- Timestamp:
- Jul 19, 2017, 11:49:33 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 9cc0472
- Parents:
- fea3faa (diff), a57cb58 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- src
- Files:
-
- 20 added
- 1 deleted
- 142 edited
- 3 moved
-
CodeGen/CodeGenerator.cc (modified) (4 diffs)
-
CodeGen/CodeGenerator.h (modified) (3 diffs)
-
CodeGen/FixMain.cc (modified) (1 diff)
-
CodeGen/FixNames.cc (modified) (6 diffs)
-
CodeGen/FixNames.h (modified) (1 diff)
-
CodeGen/GenType.cc (modified) (1 diff)
-
CodeGen/GenType.h (modified) (1 diff)
-
CodeGen/Generate.cc (modified) (1 diff)
-
CodeGen/Generate.h (modified) (1 diff)
-
CodeGen/OperatorTable.cc (modified) (3 diffs)
-
CodeTools/DeclStats.cc (modified) (11 diffs)
-
CodeTools/DeclStats.h (modified) (1 diff)
-
CodeTools/TrackLoc.cc (modified) (1 diff)
-
CodeTools/TrackLoc.h (modified) (1 diff)
-
Common/Assert.cc (modified) (1 diff)
-
Common/PassVisitor.h (modified) (9 diffs)
-
Common/PassVisitor.impl.h (modified) (9 diffs)
-
Common/PassVisitor.proto.h (modified) (3 diffs)
-
Common/SemanticError.cc (modified) (1 diff)
-
Common/SemanticError.h (modified) (1 diff)
-
Common/utility.h (modified) (1 diff)
-
Concurrency/Keywords.cc (modified) (6 diffs)
-
Concurrency/Keywords.h (modified) (1 diff)
-
ControlStruct/ExceptTranslate.cc (modified) (26 diffs)
-
ControlStruct/ExceptTranslate.h (modified) (2 diffs)
-
ControlStruct/module.mk (modified) (1 diff)
-
GenPoly/Box.cc (modified) (4 diffs)
-
GenPoly/InstantiateGeneric.cc (modified) (11 diffs)
-
InitTweak/FixInit.cc (modified) (8 diffs)
-
InitTweak/GenInit.cc (modified) (8 diffs)
-
InitTweak/InitTweak.cc (modified) (1 diff)
-
MakeLibCfa.cc (modified) (2 diffs)
-
MakeLibCfa.h (modified) (1 diff)
-
Makefile.am (modified) (1 diff)
-
Makefile.in (modified) (41 diffs)
-
Parser/DeclarationNode.cc (modified) (4 diffs)
-
Parser/ExpressionNode.cc (modified) (9 diffs)
-
Parser/InitializerNode.cc (modified) (1 diff)
-
Parser/LinkageSpec.cc (modified) (4 diffs)
-
Parser/LinkageSpec.h (modified) (2 diffs)
-
Parser/ParseNode.h (modified) (4 diffs)
-
Parser/ParserTypes.h (moved) (moved from src/Parser/lex.h ) (2 diffs)
-
Parser/StatementNode.cc (modified) (3 diffs)
-
Parser/TypeData.cc (modified) (11 diffs)
-
Parser/TypeData.h (modified) (3 diffs)
-
Parser/TypedefTable.h (modified) (2 diffs)
-
Parser/lex.ll (modified) (10 diffs)
-
Parser/module.mk (modified) (2 diffs)
-
Parser/parser.yy (modified) (21 diffs)
-
Parser/parserutility.cc (moved) (moved from src/Parser/parseutility.cc ) (2 diffs)
-
Parser/parserutility.h (moved) (moved from src/Parser/parseutility.h ) (1 diff)
-
ResolvExpr/AlternativeFinder.cc (modified) (4 diffs)
-
ResolvExpr/AlternativeFinder.h (modified) (1 diff)
-
ResolvExpr/CurrentObject.cc (added)
-
ResolvExpr/CurrentObject.h (added)
-
ResolvExpr/Resolver.cc (modified) (10 diffs)
-
ResolvExpr/Unify.cc (modified) (4 diffs)
-
ResolvExpr/module.mk (modified) (2 diffs)
-
SymTab/Autogen.cc (modified) (2 diffs)
-
SymTab/Autogen.h (modified) (3 diffs)
-
SymTab/ImplementationType.cc (modified) (2 diffs)
-
SymTab/Indexer.cc (modified) (4 diffs)
-
SymTab/Mangler.cc (modified) (2 diffs)
-
SymTab/TreeStruct.cc (added)
-
SymTab/TreeStruct.h (added)
-
SymTab/Validate.cc (modified) (9 diffs)
-
SymTab/module.mk (modified) (2 diffs)
-
SynTree/AggregateDecl.cc (modified) (2 diffs)
-
SynTree/Constant.cc (modified) (2 diffs)
-
SynTree/Constant.h (modified) (3 diffs)
-
SynTree/Declaration.h (modified) (7 diffs)
-
SynTree/Expression.cc (modified) (3 diffs)
-
SynTree/Expression.h (modified) (1 diff)
-
SynTree/Initializer.cc (modified) (3 diffs)
-
SynTree/Initializer.h (modified) (7 diffs)
-
SynTree/Mutator.cc (modified) (4 diffs)
-
SynTree/Mutator.h (modified) (2 diffs)
-
SynTree/SynTree.h (modified) (2 diffs)
-
SynTree/TupleType.cc (modified) (1 diff)
-
SynTree/Type.h (modified) (5 diffs)
-
SynTree/VarExprReplacer.cc (modified) (1 diff)
-
SynTree/VarExprReplacer.h (modified) (1 diff)
-
SynTree/Visitor.cc (modified) (4 diffs)
-
SynTree/Visitor.h (modified) (2 diffs)
-
Tuples/TupleExpansion.cc (modified) (2 diffs)
-
benchmark/CorCtxSwitch.c (modified) (1 diff)
-
benchmark/Makefile.am (modified) (6 diffs)
-
benchmark/Makefile.in (modified) (18 diffs)
-
benchmark/bench.h (modified) (1 diff)
-
benchmark/create_pthrd.c (modified) (1 diff)
-
benchmark/csv-data.c (modified) (4 diffs)
-
benchmark/interrupt_linux.c (added)
-
driver/Makefile.in (modified) (16 diffs)
-
examples/Makefile.in (modified) (16 diffs)
-
include/assert.h (modified) (1 diff)
-
libcfa/Makefile.am (modified) (3 diffs)
-
libcfa/Makefile.in (modified) (32 diffs)
-
libcfa/concurrency/CtxSwitch-i386.S (modified) (1 diff)
-
libcfa/concurrency/CtxSwitch-x86_64.S (modified) (3 diffs)
-
libcfa/concurrency/alarm.c (modified) (10 diffs)
-
libcfa/concurrency/alarm.h (modified) (2 diffs)
-
libcfa/concurrency/coroutine (modified) (4 diffs)
-
libcfa/concurrency/coroutine.c (modified) (5 diffs)
-
libcfa/concurrency/invoke.c (modified) (5 diffs)
-
libcfa/concurrency/invoke.h (modified) (4 diffs)
-
libcfa/concurrency/kernel (modified) (3 diffs)
-
libcfa/concurrency/kernel.c (modified) (35 diffs)
-
libcfa/concurrency/kernel_private.h (modified) (4 diffs)
-
libcfa/concurrency/monitor (modified) (1 diff)
-
libcfa/concurrency/monitor.c (modified) (23 diffs)
-
libcfa/concurrency/preemption.c (modified) (3 diffs)
-
libcfa/concurrency/thread (modified) (1 diff)
-
libcfa/concurrency/thread.c (modified) (4 diffs)
-
libcfa/exception.c (added)
-
libcfa/exception.h (added)
-
libcfa/fstream (modified) (3 diffs)
-
libcfa/fstream.c (modified) (7 diffs)
-
libcfa/gmp (modified) (1 diff)
-
libcfa/iostream (modified) (6 diffs)
-
libcfa/iostream.c (modified) (10 diffs)
-
libcfa/iterator (modified) (2 diffs)
-
libcfa/iterator.c (modified) (2 diffs)
-
libcfa/libhdr/libalign.h (modified) (3 diffs)
-
libcfa/libhdr/libdebug.h (modified) (2 diffs)
-
libcfa/limits (modified) (2 diffs)
-
libcfa/lsda.h (added)
-
libcfa/math (modified) (2 diffs)
-
libcfa/rational (modified) (3 diffs)
-
libcfa/rational.c (modified) (18 diffs)
-
libcfa/stdhdr/bfdlink.h (added)
-
libcfa/stdhdr/hwloc.h (added)
-
libcfa/stdhdr/krb5.h (added)
-
libcfa/stdlib (modified) (2 diffs)
-
libcfa/typeobject.c (added)
-
libcfa/typeobject.h (added)
-
main.cc (modified) (5 diffs)
-
prelude/Makefile.am (modified) (3 diffs)
-
prelude/Makefile.in (modified) (13 diffs)
-
prelude/builtins.c (modified) (1 diff)
-
tests/.expect/32/math.txt (modified) (1 diff)
-
tests/.expect/concurrent/preempt.txt (added)
-
tests/.expect/concurrent/sched-int-disjoint.txt (modified) (1 diff)
-
tests/.expect/designations.txt (added)
-
tests/.expect/io.txt (modified) (3 diffs)
-
tests/Makefile.am (modified) (3 diffs)
-
tests/Makefile.in (modified) (16 diffs)
-
tests/designations.c (added)
-
tests/except-0.c (added)
-
tests/exception.c (deleted)
-
tests/gmp.c (modified) (2 diffs)
-
tests/io.c (modified) (7 diffs)
-
tests/preempt.c (added)
-
tests/preempt_longrun/Makefile.am (modified) (1 diff)
-
tests/preempt_longrun/Makefile.in (modified) (11 diffs)
-
tests/preempt_longrun/create.c (modified) (1 diff)
-
tests/preempt_longrun/enter.c (added)
-
tests/preempt_longrun/enter3.c (added)
-
tests/preempt_longrun/processor.c (modified) (1 diff)
-
tests/preempt_longrun/stack.c (modified) (2 diffs)
-
tests/preempt_longrun/yield.c (modified) (2 diffs)
-
tests/sched-int-barge.c (modified) (2 diffs)
-
tests/sched-int-block.c (modified) (5 diffs)
-
tests/sched-int-disjoint.c (modified) (6 diffs)
-
tests/sched-int-wait.c (modified) (2 diffs)
-
tests/test.py (modified) (3 diffs)
-
tests/thread.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
rfea3faa rb826e6b 14 14 // 15 15 16 #include <algorithm> 17 #include <iostream> 18 #include <cassert> 19 #include <list> 20 21 #include "Parser/ParseNode.h" 22 23 #include "SynTree/Declaration.h" 24 #include "SynTree/Expression.h" 25 #include "SynTree/Initializer.h" 26 #include "SynTree/Statement.h" 27 #include "SynTree/Type.h" 28 #include "SynTree/Attribute.h" 29 30 #include "Common/utility.h" 31 #include "Common/UnimplementedError.h" 16 #include <cassert> // for assert, assertf 17 #include <list> // for _List_iterator, list, list<>::it... 32 18 33 19 #include "CodeGenerator.h" 34 #include "OperatorTable.h" 35 #include "GenType.h" 36 37 #include "InitTweak/InitTweak.h" 20 #include "Common/SemanticError.h" // for SemanticError 21 #include "Common/UniqueName.h" // for UniqueName 22 #include "Common/utility.h" // for CodeLocation, toString 23 #include "GenType.h" // for genType 24 #include "InitTweak/InitTweak.h" // for getPointerBase 25 #include "OperatorTable.h" // for OperatorInfo, operatorLookup 26 #include "Parser/LinkageSpec.h" // for Spec, Intrinsic 27 #include "SynTree/Attribute.h" // for Attribute 28 #include "SynTree/BaseSyntaxNode.h" // for BaseSyntaxNode 29 #include "SynTree/Constant.h" // for Constant 30 #include "SynTree/Declaration.h" // for DeclarationWithType, TypeDecl 31 #include "SynTree/Expression.h" // for Expression, UntypedExpr, Applica... 32 #include "SynTree/Initializer.h" // for Initializer, ListInit, Designation 33 #include "SynTree/Label.h" // for Label, operator<< 34 #include "SynTree/Statement.h" // for Statement, AsmStmt, BranchStmt 35 #include "SynTree/Type.h" // for Type, Type::StorageClasses, Func... 38 36 39 37 using namespace std; … … 288 286 } 289 287 290 void CodeGenerator:: printDesignators( std::list< Expression * > & designators) {291 typedef std::list< Expression * > DesignatorList;288 void CodeGenerator::visit( Designation * designation ) { 289 std::list< Expression * > designators = designation->get_designators(); 292 290 if ( designators.size() == 0 ) return; 293 for ( DesignatorList::iterator iter = designators.begin(); iter != designators.end(); ++iter) {294 if ( dynamic_cast< NameExpr * >( *iter) ) {295 // if expression is a name, then initializing aggregate member291 for ( Expression * des : designators ) { 292 if ( dynamic_cast< NameExpr * >( des ) || dynamic_cast< VariableExpr * >( des ) ) { 293 // if expression is a NameExpr or VariableExpr, then initializing aggregate member 296 294 output << "."; 297 (*iter)->accept( *this );295 des->accept( *this ); 298 296 } else { 299 // if not a simple name, it has to be a constant expression, i.e. an array designator297 // otherwise, it has to be a ConstantExpr or CastExpr, initializing array eleemnt 300 298 output << "["; 301 (*iter)->accept( *this );299 des->accept( *this ); 302 300 output << "]"; 303 301 } // if … … 307 305 308 306 void CodeGenerator::visit( SingleInit * init ) { 309 printDesignators( init->get_designators() );310 307 init->get_value()->accept( *this ); 311 308 } 312 309 313 310 void CodeGenerator::visit( ListInit * init ) { 314 printDesignators( init->get_designators() ); 311 auto initBegin = init->begin(); 312 auto initEnd = init->end(); 313 auto desigBegin = init->get_designations().begin(); 314 auto desigEnd = init->get_designations().end(); 315 315 316 output << "{ "; 316 genCommaList( init->begin(), init->end() ); 317 for ( ; initBegin != initEnd && desigBegin != desigEnd; ) { 318 (*desigBegin)->accept( *this ); 319 (*initBegin)->accept( *this ); 320 ++initBegin, ++desigBegin; 321 if ( initBegin != initEnd ) { 322 output << ", "; 323 } 324 } 317 325 output << " }"; 326 assertf( initBegin == initEnd && desigBegin == desigEnd, "Initializers and designators not the same length. %s", toString( init ).c_str() ); 318 327 } 319 328 … … 716 725 717 726 void CodeGenerator::visit( TypeExpr * typeExpr ) { 718 assertf( ! genC, "TypeExpr should not reach code generation." ); 719 output<< genType( typeExpr->get_type(), "", pretty, genC ); 727 // if ( genC ) std::cerr << "typeexpr still exists: " << typeExpr << std::endl; 728 // assertf( ! genC, "TypeExpr should not reach code generation." ); 729 if ( ! genC ) { 730 output<< genType( typeExpr->get_type(), "", pretty, genC ); 731 } 720 732 } 721 733 -
src/CodeGen/CodeGenerator.h
rfea3faa rb826e6b 17 17 #define CODEGENV_H 18 18 19 #include <list> 19 #include <list> // for list 20 #include <ostream> // for ostream, operator<< 21 #include <string> // for string 20 22 21 #include "SynTree/Declaration.h" 22 #include "SynTree/SynTree.h" 23 #include "SynTree/Visitor.h" 24 25 #include "SymTab/Indexer.h" 26 27 #include "Common/utility.h" 23 #include "SynTree/Declaration.h" // for DeclarationWithType (ptr only), Fun... 24 #include "SynTree/Visitor.h" // for Visitor 25 #include "SynTree/SynTree.h" // for Visitor Nodes 28 26 29 27 namespace CodeGen { … … 47 45 48 46 //*** Initializer 47 virtual void visit( Designation * ); 49 48 virtual void visit( SingleInit * ); 50 49 virtual void visit( ListInit * ); … … 137 136 bool lineMarks = false; 138 137 139 void printDesignators( std::list< Expression * > & );140 138 void handleStorageClass( DeclarationWithType *decl ); 141 139 void handleAggregate( AggregateDecl *aggDecl, const std::string & kind ); -
src/CodeGen/FixMain.cc
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // FixMain.cc -- 7 // FixMain.cc -- 8 8 // 9 9 // Author : Thierry Delisle 10 10 // Created On : Thr Jan 12 14:11:09 2017 11 // Last Modified By : 12 // Last Modified On : 11 // Last Modified By : 12 // Last Modified On : 13 13 // Update Count : 0 14 14 // 15 15 16 16 17 #include "FixMain.h" 17 #include "FixMain.h" 18 18 19 #include <fstream> 20 #include <iostream> 19 #include <cassert> // for assert, assertf 20 #include <fstream> // for operator<<, basic_ostream::operator<< 21 #include <list> // for list 22 #include <string> // for operator<< 21 23 22 #include "Common/SemanticError.h" 23 #include "SynTree/Declaration.h" 24 #include "Common/SemanticError.h" // for SemanticError 25 #include "SynTree/Declaration.h" // for FunctionDecl, operator<< 26 #include "SynTree/Type.h" // for FunctionType 24 27 25 28 namespace CodeGen { 26 29 bool FixMain::replace_main = false; 27 30 std::unique_ptr<FunctionDecl> FixMain::main_signature = nullptr; 28 29 void FixMain::registerMain(FunctionDecl* functionDecl) 31 32 void FixMain::registerMain(FunctionDecl* functionDecl) 30 33 { 31 if(main_signature) { 32 throw SemanticError("Multiple definition of main routine\n", functionDecl); 34 if(main_signature) { 35 throw SemanticError("Multiple definition of main routine\n", functionDecl); 33 36 } 34 37 main_signature.reset( functionDecl->clone() ); -
src/CodeGen/FixNames.cc
rfea3faa rb826e6b 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Jun 2 1 14:22:59201713 // Update Count : 1911 // Last Modified By : Andrew Beach 12 // Last Modified On : Wed Jun 28 15:26:00 2017 13 // Update Count : 20 14 14 // 15 15 16 #include <memory>16 #include "FixNames.h" 17 17 18 #include "FixNames.h" 19 #include "SynTree/Declaration.h" 20 #include "SynTree/Expression.h" 21 #include "SynTree/Visitor.h" 22 #include "SymTab/Mangler.h" 23 #include "OperatorTable.h" 24 #include "FixMain.h" 18 #include <memory> // for unique_ptr 19 #include <string> // for string, operator!=, operator== 20 21 #include "Common/SemanticError.h" // for SemanticError 22 #include "FixMain.h" // for FixMain 23 #include "Parser/LinkageSpec.h" // for Cforall, isMangled 24 #include "SymTab/Mangler.h" // for Mangler 25 #include "SynTree/Constant.h" // for Constant 26 #include "SynTree/Declaration.h" // for FunctionDecl, ObjectDecl, Declarat... 27 #include "SynTree/Expression.h" // for ConstantExpr 28 #include "SynTree/Label.h" // for Label, noLabels 29 #include "SynTree/Statement.h" // for ReturnStmt, CompoundStmt 30 #include "SynTree/Type.h" // for Type, BasicType, Type::Qualifiers 31 #include "SynTree/Visitor.h" // for Visitor, acceptAll 25 32 26 33 namespace CodeGen { … … 42 49 main_type = new FunctionType( Type::Qualifiers(), true ), nullptr ) 43 50 }; 44 main_type->get_returnVals().push_back( 51 main_type->get_returnVals().push_back( 45 52 new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr ) 46 53 ); … … 52 59 std::string mangle_main_args() { 53 60 FunctionType* main_type; 54 std::unique_ptr<FunctionDecl> mainDecl { new FunctionDecl( "main", Type::StorageClasses(), LinkageSpec::Cforall, 61 std::unique_ptr<FunctionDecl> mainDecl { new FunctionDecl( "main", Type::StorageClasses(), LinkageSpec::Cforall, 55 62 main_type = new FunctionType( Type::Qualifiers(), false ), nullptr ) 56 63 }; 57 main_type->get_returnVals().push_back( 64 main_type->get_returnVals().push_back( 58 65 new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr ) 59 66 ); 60 67 61 mainDecl->get_functionType()->get_parameters().push_back( 68 mainDecl->get_functionType()->get_parameters().push_back( 62 69 new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr ) 63 70 ); 64 71 65 mainDecl->get_functionType()->get_parameters().push_back( 66 new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, 67 new PointerType( Type::Qualifiers(), new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Char ) ) ), 72 mainDecl->get_functionType()->get_parameters().push_back( 73 new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, 74 new PointerType( Type::Qualifiers(), new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::Char ) ) ), 68 75 nullptr ) 69 76 ); … … 75 82 76 83 bool is_main(const std::string& name) { 77 static std::string mains[] = { 78 mangle_main(), 84 static std::string mains[] = { 85 mangle_main(), 79 86 mangle_main_args() 80 87 }; … … 93 100 void FixNames::fixDWT( DeclarationWithType *dwt ) { 94 101 if ( dwt->get_name() != "" ) { 95 if ( LinkageSpec::is Decoratable( dwt->get_linkage() ) ) {102 if ( LinkageSpec::isMangled( dwt->get_linkage() ) ) { 96 103 dwt->set_mangleName( SymTab::Mangler::mangle( dwt ) ); 97 104 dwt->set_scopeLevel( scopeLevel ); … … 112 119 int nargs = functionDecl->get_functionType()->get_parameters().size(); 113 120 if( !(nargs == 0 || nargs == 2 || nargs == 3) ) { 114 throw SemanticError("Main expected to have 0, 2 or 3 arguments\n", functionDecl); 121 throw SemanticError("Main expected to have 0, 2 or 3 arguments\n", functionDecl); 115 122 } 116 123 functionDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new ConstantExpr( Constant::from_int( 0 ) ) ) ); -
src/CodeGen/FixNames.h
rfea3faa rb826e6b 17 17 #define FIXNAMES_H 18 18 19 #include "SynTree/SynTree.h" 19 #include <list> // for list 20 21 class Declaration; 20 22 21 23 namespace CodeGen { -
src/CodeGen/GenType.cc
rfea3faa rb826e6b 14 14 // 15 15 16 #include <sstream> 17 #include <cassert> 18 16 #include <cassert> // for assert, assertf 17 #include <list> // for _List_iterator, _List_const_iterator 18 #include <sstream> // for operator<<, ostringstream, basic_os... 19 20 #include "CodeGenerator.h" // for CodeGenerator 19 21 #include "GenType.h" 20 #include "CodeGenerator.h" 21 22 #include "SynTree/Declaration.h" 23 #include "SynTree/Expression.h" 24 #include "SynTree/Type.h" 25 #include "SynTree/Visitor.h" 22 #include "SynTree/Declaration.h" // for DeclarationWithType 23 #include "SynTree/Expression.h" // for Expression 24 #include "SynTree/Type.h" // for PointerType, Type, FunctionType 25 #include "SynTree/Visitor.h" // for Visitor 26 26 27 27 namespace CodeGen { -
src/CodeGen/GenType.h
rfea3faa rb826e6b 17 17 #define _GENTYPE_H 18 18 19 #include <string> 20 #include "SynTree/SynTree.h" 19 #include <string> // for string 20 21 class Type; 21 22 22 23 namespace CodeGen { -
src/CodeGen/Generate.cc
rfea3faa rb826e6b 14 14 // 15 15 16 #include <algorithm> 17 #include <iostream> 18 #include <cassert> 19 #include <list> 16 #include <iostream> // for ostream, endl, operator<< 17 #include <list> // for list 18 #include <string> // for operator<< 20 19 20 #include "CodeGenerator.h" // for CodeGenerator, doSemicolon, oper... 21 #include "GenType.h" // for genPrettyType 21 22 #include "Generate.h" 22 #include "SynTree/Declaration.h" 23 #include "CodeGenerator.h" 24 #include "GenType.h" 25 #include "SynTree/SynTree.h" 26 #include "SynTree/Type.h" 27 #include "SynTree/BaseSyntaxNode.h" 28 // #include "Tuples/Tuples.h" 23 #include "Parser/LinkageSpec.h" // for isBuiltin, isGeneratable 24 #include "SynTree/BaseSyntaxNode.h" // for BaseSyntaxNode 25 #include "SynTree/Declaration.h" // for Declaration 26 #include "SynTree/Type.h" // for Type 29 27 30 28 using namespace std; -
src/CodeGen/Generate.h
rfea3faa rb826e6b 17 17 #define GENERATE_H 18 18 19 #include < list>20 #include < iostream>19 #include <iostream> // for ostream 20 #include <list> // for list 21 21 22 #include "SynTree/SynTree.h" 22 class BaseSyntaxNode; 23 class Declaration; 23 24 24 25 namespace CodeGen { -
src/CodeGen/OperatorTable.cc
rfea3faa rb826e6b 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Dec 13 14:33:05 201613 // Update Count : 1 012 // Last Modified On : Sat Jul 15 17:12:22 2017 13 // Update Count : 15 14 14 // 15 15 16 #include <map> 16 #include <map> // for map, _Rb_tree_const_iterator, map<>::const_iterator 17 #include <utility> // for pair 18 17 19 #include "OperatorTable.h" 18 20 … … 33 35 { "++?", "++", "_operator_preincr", OT_PREFIXASSIGN }, 34 36 { "--?", "--", "_operator_predecr", OT_PREFIXASSIGN }, 37 { "?\\?", "\\", "_operator_exponential", OT_INFIX }, 35 38 { "?*?", "*", "_operator_multiply", OT_INFIX }, 36 39 { "?/?", "/", "_operator_divide", OT_INFIX }, … … 50 53 { "?|?", "|", "_operator_bitor", OT_INFIX }, 51 54 { "?=?", "=", "_operator_assign", OT_INFIXASSIGN }, 55 { "?\\=?", "\\=", "_operator_expassign", OT_INFIXASSIGN }, 52 56 { "?*=?", "*=", "_operator_multassign", OT_INFIXASSIGN }, 53 57 { "?/=?", "/=", "_operator_divassign", OT_INFIXASSIGN }, -
src/CodeTools/DeclStats.cc
rfea3faa rb826e6b 16 16 #include "DeclStats.h" 17 17 18 #include <iostream> 19 #include <map> 20 #include <sstream> 21 #include <string> 22 #include <unordered_map> 23 #include <unordered_set> 24 25 #include "Common/VectorMap.h" 26 #include "GenPoly/GenPoly.h" 27 #include "Parser/LinkageSpec.h" 28 #include "SynTree/Declaration.h" 29 #include "SynTree/Visitor.h" 18 #include <iostream> // for operator<<, basic_ostream, cout 19 #include <map> // for map 20 #include <string> // for string, operator+, operator<<, cha... 21 #include <unordered_map> // for unordered_map 22 #include <unordered_set> // for unordered_set 23 #include <utility> // for pair, make_pair 24 25 #include "Common/SemanticError.h" // for SemanticError 26 #include "Common/VectorMap.h" // for VectorMap 27 #include "GenPoly/GenPoly.h" // for hasPolyBase 28 #include "Parser/LinkageSpec.h" // for ::NoOfSpecs, Spec 29 #include "SynTree/Declaration.h" // for FunctionDecl, TypeDecl, Declaration 30 #include "SynTree/Expression.h" // for UntypedExpr, Expression 31 #include "SynTree/Statement.h" // for CompoundStmt 32 #include "SynTree/Type.h" // for Type, FunctionType, PointerType 33 #include "SynTree/Visitor.h" // for maybeAccept, Visitor, acceptAll 30 34 31 35 namespace CodeTools { 32 36 33 37 class DeclStats : public Visitor { 34 38 template<typename T> … … 75 79 sum(n_types, o.n_types); 76 80 sum(p_new, o.p_new); 77 81 78 82 return *this; 79 83 } 80 84 }; 81 85 82 86 struct Stats { 83 87 unsigned n_decls; ///< Total number of declarations … … 98 102 /// Stats for the return list 99 103 ArgPackStats returns; 100 104 101 105 /// Count of declarations with each number of assertions 102 106 std::map<unsigned, unsigned> n_assns; … … 105 109 /// Stats for the assertions' return types 106 110 ArgPackStats assn_returns; 107 111 108 112 Stats() : n_decls(0), n_type_params(), by_name(), basic_type_names(), compound_type_names(), basic_type_decls(), compound_type_decls(), params(), returns(), n_assns(), assn_params(), assn_returns() {} 109 113 … … 122 126 sum( assn_params, o.assn_params ); 123 127 sum( assn_returns, o.assn_returns ); 124 128 125 129 return *this; 126 130 } … … 144 148 145 149 n += dt->size(); 146 150 147 151 std::stringstream ss; 148 152 dt->print( ss ); … … 176 180 ++pstats.n_types.at( types.size() ); 177 181 } 178 182 179 183 void analyzeFunc( FunctionType* fnTy, Stats& stats, ArgPackStats& params, ArgPackStats& returns ) { 180 184 std::unordered_set<std::string> seen; … … 186 190 auto& args = expr->get_args(); 187 191 unsigned fanout = args.size(); 188 192 189 193 ++exprs_by_fanout_at_depth[ std::make_pair(depth, fanout) ]; 190 194 for ( Expression* arg : args ) { … … 205 209 return; 206 210 } 207 211 208 212 Stats& stats = for_linkage[ decl->get_linkage() ]; 209 213 … … 323 327 } 324 328 325 void printPairMap( const std::string& name, 329 void printPairMap( const std::string& name, 326 330 const std::map<std::pair<unsigned, unsigned>, unsigned>& map ) { 327 331 for ( const auto& entry : map ) { 328 332 const auto& key = entry.first; 329 std::cout << "\"" << name << "\"," << key.first << "," << key.second << "," 333 std::cout << "\"" << name << "\"," << key.first << "," << key.second << "," 330 334 << entry.second << std::endl; 331 335 } 332 336 } 333 337 334 338 public: 335 339 void print() { … … 366 370 stats.print(); 367 371 } 368 372 369 373 } // namespace CodeTools 370 374 -
src/CodeTools/DeclStats.h
rfea3faa rb826e6b 17 17 #define DECLSTATS_H 18 18 19 #include "SynTree/SynTree.h" 19 #include <list> // for list 20 21 class Declaration; 20 22 21 23 namespace CodeTools { -
src/CodeTools/TrackLoc.cc
rfea3faa rb826e6b 16 16 #include "TrackLoc.h" 17 17 18 #include <cstdlib> 18 #include <cstdlib> // for size_t, exit, EXIT_FAILURE 19 #include <iostream> // for operator<<, ostream, basic_ostream 20 #include <iterator> // for back_inserter, inserter 21 #include <stack> // for stack 22 #include <string> // for operator<<, string 23 #include <typeindex> // for type_index 19 24 20 #include <iostream> 21 #include <sstream> 22 #include <stack> 23 #include <string> 24 #include <typeindex> 25 #include "Common/PassVisitor.h" // for PassVisitor 26 #include "Common/PassVisitor.impl.h" // for acceptAll 27 #include "Common/SemanticError.h" // for SemanticError 28 #include "Common/utility.h" // for CodeLocation 29 #include "SynTree/BaseSyntaxNode.h" // for BaseSyntaxNode 30 #include "SynTree/Mutator.h" // for mutateAll 31 #include "SynTree/Visitor.h" // for acceptAll 25 32 26 #include "Common/utility.h" 27 #include "Common/PassVisitor.h" 28 #include "Common/VectorMap.h" 29 #include "GenPoly/GenPoly.h" 30 #include "Parser/LinkageSpec.h" 31 #include "SynTree/Declaration.h" 32 #include "SynTree/Initializer.h" 33 class Declaration; 33 34 34 35 namespace CodeTools { -
src/CodeTools/TrackLoc.h
rfea3faa rb826e6b 17 17 #define TRACKLOC_H 18 18 19 #include "SynTree/SynTree.h" 19 #include <cstddef> // for size_t 20 #include <list> // for list 21 22 class Declaration; 20 23 21 24 namespace CodeTools { -
src/Common/Assert.cc
rfea3faa rb826e6b 14 14 // 15 15 16 #include <assert.h> 17 #include <cstdarg> // varargs 18 #include <cstdio> // fprintf 19 #include <cstdlib> // abort 16 #include <cstdarg> // for va_end, va_list, va_start 17 #include <cstdio> // for fprintf, stderr, vfprintf 18 #include <cstdlib> // for abort 20 19 21 20 extern const char * __progname; // global name of running executable (argv[0]) -
src/Common/PassVisitor.h
rfea3faa rb826e6b 12 12 #include "SynTree/Expression.h" 13 13 #include "SynTree/Constant.h" 14 #include "SynTree/TypeSubstitution.h" 14 15 15 16 #include "PassVisitor.proto.h" … … 26 27 // stmtsToAddBefore or stmtsToAddAfter respectively. 27 28 // | WithShortCircuiting - provides the ability to skip visiting child nodes; set visit_children to false in pre{visit,mutate} to skip visiting children 28 // | With Scopes - provides the ability to save/restore data like a LIFO stack; to save, call GuardValue with the variable to save, the variable29 // | WithGuards - provides the ability to save/restore data like a LIFO stack; to save, call GuardValue with the variable to save, the variable 29 30 // will automatically be restored to its previous value after the corresponding postvisit/postmutate teminates. 30 31 //------------------------------------------------------------------------------------------------------------------------------------------------------------------------- … … 32 33 class PassVisitor final : public Visitor, public Mutator { 33 34 public: 34 PassVisitor() = default;35 35 36 36 template< typename... Args > … … 257 257 258 258 void set_visit_children( bool& ref ) { bool_ref * ptr = visit_children_impl(pass, 0); if(ptr) ptr->set( ref ); } 259 260 guard_value_impl init_guard() {261 guard_value_impl guard;262 auto at_cleanup = at_cleanup_impl(pass, 0);263 if( at_cleanup ) {264 *at_cleanup = [&guard]( cleanup_func_t && func, void* val ) {265 guard.push( std::move( func ), val );266 };267 }268 return guard;269 }270 259 }; 271 260 … … 283 272 284 273 public: 285 TypeSubstitution * env ;274 TypeSubstitution * env = nullptr; 286 275 }; 287 276 … … 295 284 std::list< Statement* > stmtsToAddAfter; 296 285 }; 286 287 class WithDeclsToAdd { 288 protected: 289 WithDeclsToAdd() = default; 290 ~WithDeclsToAdd() = default; 291 292 public: 293 std::list< Declaration* > declsToAddBefore; 294 std::list< Declaration* > declsToAddAfter; 295 }; 296 297 297 class WithShortCircuiting { 298 298 protected: … … 304 304 }; 305 305 306 class With Scopes {307 protected: 308 With Scopes() = default;309 ~With Scopes() = default;306 class WithGuards { 307 protected: 308 WithGuards() = default; 309 ~WithGuards() = default; 310 310 311 311 public: … … 318 318 }, static_cast< void * >( & val ) ); 319 319 } 320 321 template< typename T > 322 void GuardScope( T& val ) { 323 val.beginScope(); 324 at_cleanup( []( void * val ) { 325 static_cast< T * >( val )->endScope(); 326 }, static_cast< void * >( & val ) ); 327 } 328 329 template< typename Func > 330 void GuardAction( Func func ) { 331 at_cleanup( [func](__attribute__((unused)) void *) { func(); }, nullptr ); 332 } 320 333 }; 321 334 … … 323 336 class WithVisitorRef { 324 337 protected: 325 WithVisitorRef() = default;326 ~WithVisitorRef() = default;327 328 public: 329 PassVisitor<pass_type> * const visitor ;338 WithVisitorRef() {} 339 ~WithVisitorRef() {} 340 341 public: 342 PassVisitor<pass_type> * const visitor = nullptr; 330 343 }; 331 344 -
src/Common/PassVisitor.impl.h
rfea3faa rb826e6b 3 3 #define VISIT_START( node ) \ 4 4 __attribute__((unused)) \ 5 const auto & guard = init_guard();\5 guard_value_impl guard( at_cleanup_impl(pass, 0) ); \ 6 6 bool visit_children = true; \ 7 7 set_visit_children( visit_children ); \ … … 15 15 #define MUTATE_START( node ) \ 16 16 __attribute__((unused)) \ 17 const auto & guard = init_guard();\17 guard_value_impl guard( at_cleanup_impl(pass, 0) ); \ 18 18 bool visit_children = true; \ 19 19 set_visit_children( visit_children ); \ … … 68 68 for ( std::list< Declaration* >::iterator i = decls.begin(); ; ++i ) { 69 69 // splice in new declarations after previous decl 70 if ( !empty( afterDecls ) ) { decls.splice( i, *afterDecls ); } 70 if ( !empty( afterDecls ) ) { decls.splice( i, *afterDecls ); } 71 71 72 72 if ( i == decls.end() ) break; … … 88 88 for ( std::list< Declaration* >::iterator i = decls.begin(); ; ++i ) { 89 89 // splice in new declarations after previous decl 90 if ( !empty( afterDecls ) ) { decls.splice( i, *afterDecls ); } 90 if ( !empty( afterDecls ) ) { decls.splice( i, *afterDecls ); } 91 91 92 92 if ( i == decls.end() ) break; … … 104 104 void PassVisitor< pass_type >::handleStatementList( std::list< Statement * > & statements, func_t func ) { 105 105 SemanticError errors; 106 107 // don't want statements from outer CompoundStmts to be added to this CompoundStmt 108 ValueGuardPtr< StmtList_t > oldBeforeStmts( get_beforeStmts() ); 109 ValueGuardPtr< StmtList_t > oldAfterStmts ( get_afterStmts () ); 110 ValueGuardPtr< DeclList_t > oldBeforeDecls( get_beforeDecls() ); 111 ValueGuardPtr< DeclList_t > oldAfterDecls ( get_afterDecls () ); 106 112 107 113 StmtList_t* beforeStmts = get_beforeStmts(); … … 181 187 Statement * PassVisitor< pass_type >::visitStatement( Statement * stmt ) { 182 188 return handleStatement( stmt, [this]( Statement * stmt ) { 183 maybeAccept( stmt, *this ); 189 maybeAccept( stmt, *this ); 184 190 return stmt; 185 191 }); … … 212 218 expr->accept( *this ); 213 219 return expr; 214 }); 220 }); 215 221 } 216 222 … … 565 571 VISIT_START( node ); 566 572 573 // maybeAccept( node->get_env(), *this ); 574 maybeAccept( node->get_result(), *this ); 575 567 576 for ( auto expr : node->get_args() ) { 568 577 visitExpression( expr ); … … 575 584 Expression * PassVisitor< pass_type >::mutate( UntypedExpr * node ) { 576 585 MUTATE_START( node ); 586 587 node->set_env( maybeMutate( node->get_env(), *this ) ); 588 node->set_result( maybeMutate( node->get_result(), *this ) ); 577 589 578 590 for ( auto& expr : node->get_args() ) { -
src/Common/PassVisitor.proto.h
rfea3faa rb826e6b 5 5 6 6 typedef std::function<void( void * )> cleanup_func_t; 7 typedef std::function< void( cleanup_func_t, void * ) > at_cleanup_t; 7 8 8 9 class guard_value_impl { 9 10 public: 10 guard_value_impl() = default; 11 guard_value_impl( at_cleanup_t * at_cleanup ) { 12 if( at_cleanup ) { 13 *at_cleanup = [this]( cleanup_func_t && func, void* val ) { 14 push( std::move( func ), val ); 15 }; 16 } 17 } 11 18 12 19 ~guard_value_impl() { … … 33 40 }; 34 41 35 typedef std::function< void( cleanup_func_t, void * ) > at_cleanup_t;36 42 37 43 class bool_ref { … … 56 62 // Deep magic (a.k.a template meta programming) to make the templated visitor work 57 63 // Basically the goal is to make 2 previsit_impl 58 // 1 - Use when a pass implements a valid previsit. This uses overloading which means the any overload of 64 // 1 - Use when a pass implements a valid previsit. This uses overloading which means the any overload of 59 65 // 'pass.previsit( node )' that compiles will be used for that node for that type 60 66 // This requires that this option only compile for passes that actually define an appropriate visit. -
src/Common/SemanticError.cc
rfea3faa rb826e6b 14 14 // 15 15 16 #include < iostream>17 #include < list>18 #include < string>19 #include < algorithm>20 #include < iterator>16 #include <cstdio> // for fileno, stderr 17 #include <unistd.h> // for isatty 18 #include <iostream> // for basic_ostream, operator<<, ostream 19 #include <list> // for list, _List_iterator 20 #include <string> // for string, operator<<, operator+, to_string 21 21 22 #include "Common/utility.h" // for to_string, CodeLocation (ptr only) 22 23 #include "SemanticError.h" 23 24 #include <unistd.h>25 24 26 25 inline const std::string& error_str() { -
src/Common/SemanticError.h
rfea3faa rb826e6b 17 17 #define SEMANTICERROR_H 18 18 19 #include <exception> 20 #include <string> 21 #include <sstream> 22 #include <list> 23 #include <iostream> 19 #include <exception> // for exception 20 #include <iostream> // for ostream 21 #include <list> // for list 22 #include <string> // for string 24 23 25 #include "utility.h" 24 #include "utility.h" // for CodeLocation, toString 26 25 27 26 struct error { -
src/Common/utility.h
rfea3faa rb826e6b 305 305 // for ( val : group_iterate( container1, container2, ... ) ) {} 306 306 // syntax to have a for each that iterates multiple containers of the same length 307 // TODO: update to use variadic arguments 307 // TODO: update to use variadic arguments, perfect forwarding 308 308 309 309 template< typename T1, typename T2 > -
src/Concurrency/Keywords.cc
rfea3faa rb826e6b 17 17 #include "Concurrency/Keywords.h" 18 18 19 #include "InitTweak/InitTweak.h" 20 #include "SymTab/AddVisit.h" 21 #include "SynTree/Declaration.h" 22 #include "SynTree/Expression.h" 23 #include "SynTree/Initializer.h" 24 #include "SynTree/Statement.h" 25 #include "SynTree/Type.h" 26 #include "SynTree/Visitor.h" 19 #include <cassert> // for assert 20 #include <string> // for string, operator== 21 22 #include "Common/SemanticError.h" // for SemanticError 23 #include "Common/utility.h" // for deleteAll, map_range 24 #include "InitTweak/InitTweak.h" // for isConstructor 25 #include "Parser/LinkageSpec.h" // for Cforall 26 #include "SymTab/AddVisit.h" // for acceptAndAdd 27 #include "SynTree/Constant.h" // for Constant 28 #include "SynTree/Declaration.h" // for StructDecl, FunctionDecl, ObjectDecl 29 #include "SynTree/Expression.h" // for VariableExpr, ConstantExpr, Untype... 30 #include "SynTree/Initializer.h" // for SingleInit, ListInit, Initializer ... 31 #include "SynTree/Label.h" // for Label 32 #include "SynTree/Statement.h" // for CompoundStmt, DeclStmt, ExprStmt 33 #include "SynTree/Type.h" // for StructInstType, Type, PointerType 34 #include "SynTree/Visitor.h" // for Visitor, acceptAll 35 36 class Attribute; 27 37 28 38 namespace Concurrency { … … 322 332 if( needs_main ) { 323 333 FunctionType * main_type = new FunctionType( noQualifiers, false ); 324 334 325 335 main_type->get_parameters().push_back( this_decl->clone() ); 326 336 … … 361 371 void ConcurrentSueKeyword::addRoutines( ObjectDecl * field, FunctionDecl * func ) { 362 372 CompoundStmt * statement = new CompoundStmt( noLabels ); 363 statement->push_back( 373 statement->push_back( 364 374 new ReturnStmt( 365 375 noLabels, … … 386 396 //============================================================================================= 387 397 void MutexKeyword::visit(FunctionDecl* decl) { 388 Visitor::visit(decl); 398 Visitor::visit(decl); 389 399 390 400 std::list<DeclarationWithType*> mutexArgs = findMutexArgs( decl ); … … 510 520 void ThreadStarter::visit(FunctionDecl * decl) { 511 521 Visitor::visit(decl); 512 522 513 523 if( ! InitTweak::isConstructor(decl->get_name()) ) return; 514 524 … … 528 538 if( ! stmt ) return; 529 539 530 stmt->push_back( 540 stmt->push_back( 531 541 new ExprStmt( 532 542 noLabels, -
src/Concurrency/Keywords.h
rfea3faa rb826e6b 18 18 #define KEYWORDS_H 19 19 20 #include <list> 20 #include <list> // for list 21 21 22 #include "SynTree/Declaration.h" 22 class Declaration; 23 23 24 24 namespace Concurrency { -
src/ControlStruct/ExceptTranslate.cc
rfea3faa rb826e6b 10 10 // Created On : Wed Jun 14 16:49:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : T hr Jun 22 15:57:00 201713 // Update Count : 012 // Last Modified On : Tus Jul 18 10:09:00 2017 13 // Update Count : 4 14 14 // 15 15 16 16 #include "ExceptTranslate.h" 17 17 #include "Common/PassVisitor.h" 18 19 namespace ControlFlow { 18 #include "SynTree/Statement.h" 19 #include "SynTree/Declaration.h" 20 #include "SynTree/Expression.h" 21 #include "SynTree/Type.h" 22 #include "SynTree/Attribute.h" 23 24 namespace ControlStruct { 20 25 21 26 // This (large) section could probably be moved out of the class … … 24 29 // Type(Qualifiers &, false, std::list<Attribute *> &) 25 30 26 // void (*function)() 27 static FunctionType void_func_t(Type::Qualifiers(), false);31 // void (*function)(); 32 static FunctionType try_func_t(Type::Qualifiers(), false); 28 33 // void (*function)(int, exception); 29 34 static FunctionType catch_func_t(Type::Qualifiers(), false); … … 32 37 // bool (*function)(exception); 33 38 static FunctionType handle_func_t(Type::Qualifiers(), false); 39 // void (*function)(__attribute__((unused)) void *); 40 static FunctionType finally_func_t(Type::Qualifiers(), false); 34 41 35 42 static void init_func_types() { 36 static init_complete = false;43 static bool init_complete = false; 37 44 if (init_complete) { 38 45 return; 39 46 } 40 47 ObjectDecl index_obj( 41 " index_t",48 "__handler_index", 42 49 Type::StorageClasses(), 43 50 LinkageSpec::Cforall, 44 51 /*bitfieldWidth*/ NULL, 45 new BasicType( emptyQualifiers, BasicType::UnsignedInt),52 new BasicType( noQualifiers, BasicType::SignedInt ), 46 53 /*init*/ NULL 47 );54 ); 48 55 ObjectDecl exception_obj( 49 " exception_t",56 "__exception_inst", 50 57 Type::StorageClasses(), 51 58 LinkageSpec::Cforall, 52 59 /*bitfieldWidth*/ NULL, 53 new BasicType(emptyQualifiers, BasicType::UnsignedInt), 60 new PointerType( 61 noQualifiers, 62 new BasicType( noQualifiers, BasicType::SignedInt ) 63 ), 54 64 /*init*/ NULL 55 );65 ); 56 66 ObjectDecl bool_obj( 57 " bool_t",67 "__ret_bool", 58 68 Type::StorageClasses(), 59 69 LinkageSpec::Cforall, 60 70 /*bitfieldWidth*/ NULL, 61 new BasicType( emptyQualifiers, BasicType::Bool),71 new BasicType(noQualifiers, BasicType::Bool), 62 72 /*init*/ NULL 63 ); 64 65 catch_func_t.get_parameters().push_back(index_obj.clone()); 66 catch_func_t.get_parameters().push_back(exception_obj.clone()); 67 match_func_t.get_returnVals().push_back(index_obj.clone()); 68 match_func_t.get_parameters().push_back(exception_obj.clone()); 69 handle_func_t.get_returnVals().push_back(bool_obj.clone()); 70 handle_func_t.get_parameters().push_back(exception_obj.clone()); 73 ); 74 ObjectDecl voidptr_obj( 75 "__hook", 76 Type::StorageClasses(), 77 LinkageSpec::Cforall, 78 NULL, 79 new PointerType( 80 noQualifiers, 81 new VoidType( 82 noQualifiers 83 ), 84 std::list<Attribute *>{new Attribute("unused")} 85 ), 86 NULL 87 ); 88 89 catch_func_t.get_parameters().push_back( index_obj.clone() ); 90 catch_func_t.get_parameters().push_back( exception_obj.clone() ); 91 match_func_t.get_returnVals().push_back( index_obj.clone() ); 92 match_func_t.get_parameters().push_back( exception_obj.clone() ); 93 handle_func_t.get_returnVals().push_back( bool_obj.clone() ); 94 handle_func_t.get_parameters().push_back( exception_obj.clone() ); 95 finally_func_t.get_parameters().push_back( voidptr_obj.clone() ); 71 96 72 97 init_complete = true; … … 78 103 79 104 void split( CatchList& allHandlers, CatchList& terHandlers, 80 CatchList& resHandlers ) {105 CatchList& resHandlers ) { 81 106 while ( !allHandlers.empty() ) { 82 Statement * stmt = allHandlers.front();107 CatchStmt * stmt = allHandlers.front(); 83 108 allHandlers.pop_front(); 84 if (Ca seStmt::Terminate == stmt->get_kind()) {109 if (CatchStmt::Terminate == stmt->get_kind()) { 85 110 terHandlers.push_back(stmt); 86 111 } else { … … 92 117 template<typename T> 93 118 void free_all( std::list<T *> &list ) { 94 std::list<T *>::iterator it;119 typename std::list<T *>::iterator it; 95 120 for ( it = list.begin() ; it != list.end() ; ++it ) { 96 121 delete *it; … … 100 125 101 126 void appendDeclStmt( CompoundStmt * block, Declaration * item ) { 102 block->push_back(new DeclStmt(no _labels, item));103 } 104 105 Expression * nameOf( FunctionDecl * function) {106 return new VariableExpr( function);127 block->push_back(new DeclStmt(noLabels, item)); 128 } 129 130 Expression * nameOf( DeclarationWithType * decl ) { 131 return new VariableExpr( decl ); 107 132 } 108 133 109 134 // ThrowStmt Mutation Helpers 110 135 111 Statement * create_terminate_throw( ThrowStmt *throwStmt ) { 112 // __throw_terminate( EXPR ); 113 ApplicationExpr * call = new ApplicationExpr( /* ... */ ); 114 call->get_args.push_back( throwStmt->get_expr() ); 115 Statement * result = new ExprStmt( throwStmt->get_labels(), call ); 136 Statement * create_given_throw( 137 const char * throwFunc, ThrowStmt * throwStmt ) { 138 // { int NAME = EXPR; throwFunc( &NAME ); } 139 CompoundStmt * result = new CompoundStmt( noLabels ); 140 ObjectDecl * local = new ObjectDecl( 141 "__local_exception_copy", 142 Type::StorageClasses(), 143 LinkageSpec::Cforall, 144 NULL, 145 new BasicType( noQualifiers, BasicType::SignedInt ), 146 new SingleInit( throwStmt->get_expr() ) 147 ); 148 appendDeclStmt( result, local ); 149 UntypedExpr * call = new UntypedExpr( new NameExpr( throwFunc ) ); 150 call->get_args().push_back( new AddressExpr( nameOf( local ) ) ); 151 result->push_back( new ExprStmt( throwStmt->get_labels(), call ) ); 116 152 throwStmt->set_expr( nullptr ); 117 153 delete throwStmt; 118 154 return result; 119 155 } 156 157 Statement * create_terminate_throw( ThrowStmt *throwStmt ) { 158 // { int NAME = EXPR; __throw_terminate( &NAME ); } 159 return create_given_throw( "__cfaehm__throw_terminate", throwStmt ); 160 } 120 161 Statement * create_terminate_rethrow( ThrowStmt *throwStmt ) { 121 162 // __rethrow_terminate(); 163 assert( nullptr == throwStmt->get_expr() ); 122 164 Statement * result = new ExprStmt( 123 165 throwStmt->get_labels(), 124 new ApplicationExpr( /* ... */ );166 new UntypedExpr( new NameExpr( "__cfaehm__rethrow_terminate" ) ) 125 167 ); 126 168 delete throwStmt; … … 129 171 Statement * create_resume_throw( ThrowStmt *throwStmt ) { 130 172 // __throw_resume( EXPR ); 131 ApplicationExpr * call = new ApplicationExpr( /* ... */ ); 132 call->get_args.push_back( throwStmt->get_expr() ); 133 Statement * result = new ExprStmt( throwStmt->get_labels(), call ); 134 throwStmt->set_expr( nullptr ); 135 delete throwStmt; 136 return result; 173 return create_given_throw( "__cfaehm__throw_resume", throwStmt ); 137 174 } 138 175 Statement * create_resume_rethrow( ThrowStmt *throwStmt ) { … … 140 177 Statement * result = new ReturnStmt( 141 178 throwStmt->get_labels(), 142 new ConstantExpr( 143 Constant( 144 new BasicType( 145 Type::Qualifiers(), 146 BasicType::Bool 147 ), 148 "0") 149 ) 179 new ConstantExpr( Constant::from_bool( false ) ) 150 180 ); 151 181 delete throwStmt; … … 160 190 return block; 161 191 } 162 FunctionDecl * create_try_wrapper( TryStmt *tryStmt ) { 163 CompoundStmt * body = base_try->get_block(); 164 base_try->set_block(nullptr); 165 166 return new FunctionDecl("try", Type::StorageClasses(), 167 LinkageSpec::Cforall, void_func_t, body); 192 FunctionDecl * create_try_wrapper( CompoundStmt *body ) { 193 194 return new FunctionDecl( "try", Type::StorageClasses(), 195 LinkageSpec::Cforall, try_func_t.clone(), body ); 168 196 } 169 197 170 198 FunctionDecl * create_terminate_catch( CatchList &handlers ) { 171 199 std::list<CaseStmt *> handler_wrappers; 200 201 FunctionType *func_type = catch_func_t.clone(); 202 DeclarationWithType * index_obj = func_type->get_parameters().front(); 203 // DeclarationWithType * except_obj = func_type->get_parameters().back(); 172 204 173 205 // Index 1..{number of handlers} … … 178 210 CatchStmt * handler = *it; 179 211 180 std::list<Statement *> core; 181 if ( /*the exception is named*/ ) { 182 ObjectDecl * local_except = /* Dynamic case, same */; 183 core->push_back( new DeclStmt( noLabel, local_except ) ); 184 } 185 // Append the provided statement to the handler. 186 core->push_back( cur_handler->get_body() ); 187 // Append return onto the inner block? case stmt list? 188 CaseStmt * wrapper = new CaseStmt( 212 // INTEGERconstant Version 213 // case `index`: 214 // { 215 // `handler.body` 216 // } 217 // return; 218 std::list<Statement *> caseBody; 219 caseBody.push_back( handler->get_body() ); 220 handler->set_body( nullptr ); 221 caseBody.push_back( new ReturnStmt( noLabels, nullptr ) ); 222 223 handler_wrappers.push_back( new CaseStmt( 189 224 noLabels, 190 225 new ConstantExpr( Constant::from_int( index ) ), 191 core 192 ); 193 handler_wrappers.push_back(wrapper); 226 caseBody 227 ) ); 194 228 } 195 229 // TODO: Some sort of meaningful error on default perhaps? 230 231 std::list<Statement*> stmt_handlers; 232 while ( !handler_wrappers.empty() ) { 233 stmt_handlers.push_back( handler_wrappers.front() ); 234 handler_wrappers.pop_front(); 235 } 196 236 197 237 SwitchStmt * handler_lookup = new SwitchStmt( 198 238 noLabels, 199 /*parameter 0: index*/, 200 handler_wrappers, 201 false 239 nameOf( index_obj ), 240 stmt_handlers 202 241 ); 203 242 CompoundStmt * body = new CompoundStmt( noLabels ); … … 205 244 206 245 return new FunctionDecl("catch", Type::StorageClasses(), 207 LinkageSpec::Cforall, catch_func_t, body);246 LinkageSpec::Cforall, func_type, body); 208 247 } 209 248 210 249 // Create a single check from a moddified handler. 211 CompoundStmt *create_single_matcher( CatchStmt * modded_handler ) { 212 CompoundStmt * block = new CompoundStmt( noLables ); 213 214 appendDeclStmt( block, modded_handler->get_decl() ); 215 216 // TODO: This is not the actual check. 217 LogicalExpr * cond = new ConstantExpr( Constant::from_bool( false ) ); 250 // except_obj is referenced, modded_handler will be freed. 251 CompoundStmt *create_single_matcher( 252 DeclarationWithType * except_obj, CatchStmt * modded_handler ) { 253 CompoundStmt * block = new CompoundStmt( noLabels ); 254 255 // INTEGERconstant Version 256 assert( nullptr == modded_handler->get_decl() ); 257 ConstantExpr * number = 258 dynamic_cast<ConstantExpr*>( modded_handler->get_cond() ); 259 assert( number ); 260 modded_handler->set_cond( nullptr ); 261 262 Expression * cond; 263 { 264 std::list<Expression *> args; 265 args.push_back( number ); 266 267 std::list<Expression *> rhs_args; 268 rhs_args.push_back( nameOf( except_obj ) ); 269 Expression * rhs = new UntypedExpr( 270 new NameExpr( "*?" ), rhs_args ); 271 args.push_back( rhs ); 272 273 cond = new UntypedExpr( new NameExpr( "?==?" /*???*/), args ); 274 } 218 275 219 276 if ( modded_handler->get_cond() ) { 220 cond = new LogicalExpr( cond, modded_handler->get_cond() ) q277 cond = new LogicalExpr( cond, modded_handler->get_cond() ); 221 278 } 222 279 block->push_back( new IfStmt( noLabels, 223 cond, modded_handler->get_body() );280 cond, modded_handler->get_body(), nullptr ) ); 224 281 225 282 modded_handler->set_decl( nullptr ); … … 232 289 FunctionDecl * create_terminate_match( CatchList &handlers ) { 233 290 CompoundStmt * body = new CompoundStmt( noLabels ); 291 292 FunctionType * func_type = match_func_t.clone(); 293 DeclarationWithType * except_obj = func_type->get_parameters().back(); 234 294 235 295 // Index 1..{number of handlers} … … 240 300 CatchStmt * handler = *it; 241 301 242 // body should have been taken by create_terminate_catch. 243 // assert( nullptr == handler->get_body() ); 302 // Body should have been taken by create_terminate_catch. 303 assert( nullptr == handler->get_body() ); 304 305 // Create new body. 244 306 handler->set_body( new ReturnStmt( noLabels, 245 307 new ConstantExpr( Constant::from_int( index ) ) ) ); 246 308 247 body->push_back( create_single_matcher( handler ) ); 248 } 309 // Create the handler. 310 body->push_back( create_single_matcher( except_obj, handler ) ); 311 *it = nullptr; 312 } 313 314 body->push_back( new ReturnStmt( noLabels, new ConstantExpr( 315 Constant::from_int( 0 ) ) ) ); 249 316 250 317 return new FunctionDecl("match", Type::StorageClasses(), 251 LinkageSpec::Cforall, match_func_t, body);252 } 253 254 Statement * create_terminate_caller(318 LinkageSpec::Cforall, func_type, body); 319 } 320 321 CompoundStmt * create_terminate_caller( 255 322 FunctionDecl * try_wrapper, 256 323 FunctionDecl * terminate_catch, 257 324 FunctionDecl * terminate_match) { 258 325 259 ApplicationExpr * caller = new ApplicationExpr( /* ... */ ); 260 std::list<Expression *>& args = caller.get_args(); 326 UntypedExpr * caller = new UntypedExpr( new NameExpr( 327 "__cfaehm__try_terminate" ) ); 328 std::list<Expression *>& args = caller->get_args(); 261 329 args.push_back( nameOf( try_wrapper ) ); 262 330 args.push_back( nameOf( terminate_catch ) ); 263 331 args.push_back( nameOf( terminate_match ) ); 264 332 265 return new ExprStmt( noLabels, caller ); 333 CompoundStmt * callStmt = new CompoundStmt( noLabels ); 334 callStmt->push_back( new ExprStmt( noLabels, caller ) ); 335 return callStmt; 266 336 } 267 337 268 338 FunctionDecl * create_resume_handler( CatchList &handlers ) { 269 CompoundStmt * body = new CompountStmt( noLabels ); 339 CompoundStmt * body = new CompoundStmt( noLabels ); 340 341 FunctionType * func_type = match_func_t.clone(); 342 DeclarationWithType * except_obj = func_type->get_parameters().back(); 270 343 271 344 CatchList::iterator it; … … 280 353 handling_code->push_back( handler->get_body() ); 281 354 } 282 handling_code->push_back( new ReturnStmt( noLabel ,283 new ConstantExpr( Constant::from_bool( false ) ) ) );355 handling_code->push_back( new ReturnStmt( noLabels, 356 new ConstantExpr( Constant::from_bool( true ) ) ) ); 284 357 handler->set_body( handling_code ); 285 358 286 359 // Create the handler. 287 body->push_back( create_single_matcher( handler ) ); 288 } 360 body->push_back( create_single_matcher( except_obj, handler ) ); 361 *it = nullptr; 362 } 363 364 body->push_back( new ReturnStmt( noLabels, new ConstantExpr( 365 Constant::from_bool( false ) ) ) ); 289 366 290 367 return new FunctionDecl("handle", Type::StorageClasses(), 291 LinkageSpec::Cforall, handle_func_t, body); 292 } 293 294 Statement * create_resume_wrapper( 368 LinkageSpec::Cforall, func_type, body); 369 } 370 371 CompoundStmt * create_resume_wrapper( 372 StructDecl * node_decl, 295 373 Statement * wraps, 296 374 FunctionDecl * resume_handler ) { 297 375 CompoundStmt * body = new CompoundStmt( noLabels ); 298 376 299 // struct node = {current top resume handler, call to resume_handler}; 300 // __attribute__((cleanup( ... ))); 301 // set top resume handler to node. 302 // The wrapped statement. 303 304 ListInit * node_init; 305 { 306 std::list<Initializer*> field_inits; 307 field_inits.push_back( new SingleInit( /* ... */ ) ); 308 field_inits.push_back( new SingleInit( nameOf( resume_handler ) ) ); 309 node_init = new ListInit( field_inits ); 310 } 377 // struct __try_resume_node __resume_node 378 // __attribute__((cleanup( __cfaehm__try_resume_cleanup ))); 379 // ** unwinding of the stack here could cause problems ** 380 // ** however I don't think that can happen currently ** 381 // __cfaehm__try_resume_setup( &__resume_node, resume_handler ); 311 382 312 383 std::list< Attribute * > attributes; 313 384 { 314 385 std::list< Expression * > attr_params; 315 attr_params.push_back( n ameOf( /* ... deconstructor ... */ ) );316 attrributes.push_back( new Attribute( "cleanup", attr_params) );317 }318 319 appendDeclStmt( body, 320 /**/ObjectDecl(321 " resume_node",386 attr_params.push_back( new NameExpr( 387 "__cfaehm__try_resume_cleanup" ) ); 388 attributes.push_back( new Attribute( "cleanup", attr_params ) ); 389 } 390 391 ObjectDecl * obj = new ObjectDecl( 392 "__resume_node", 322 393 Type::StorageClasses(), 323 394 LinkageSpec::Cforall, 324 395 nullptr, 325 /* Type* = resume_node */, 326 node_init, 396 new StructInstType( 397 Type::Qualifiers(), 398 node_decl 399 ), 400 nullptr, 327 401 attributes 328 ) 329 ); 402 ); 403 appendDeclStmt( body, obj ); 404 405 UntypedExpr *setup = new UntypedExpr( new NameExpr( 406 "__cfaehm__try_resume_setup" ) ); 407 setup->get_args().push_back( new AddressExpr( nameOf( obj ) ) ); 408 setup->get_args().push_back( nameOf( resume_handler ) ); 409 410 body->push_back( new ExprStmt( noLabels, setup ) ); 411 330 412 body->push_back( wraps ); 331 413 return body; … … 333 415 334 416 FunctionDecl * create_finally_wrapper( TryStmt * tryStmt ) { 335 CompoundStmt * body = tryStmt->get_finally(); 417 FinallyStmt * finally = tryStmt->get_finally(); 418 CompoundStmt * body = finally->get_block(); 419 finally->set_block( nullptr ); 420 delete finally; 336 421 tryStmt->set_finally( nullptr ); 337 422 338 423 return new FunctionDecl("finally", Type::StorageClasses(), 339 LinkageSpec::Cforall, void_func_t, body); 340 } 341 342 ObjectDecl * create_finally_hook( FunctionDecl * finally_wrapper ) { 343 // struct _cleanup_hook NAME __attribute__((cleanup( ... ))); 424 LinkageSpec::Cforall, finally_func_t.clone(), body); 425 } 426 427 ObjectDecl * create_finally_hook( 428 StructDecl * hook_decl, FunctionDecl * finally_wrapper ) { 429 // struct __cfaehm__cleanup_hook __finally_hook 430 // __attribute__((cleanup( finally_wrapper ))); 344 431 345 432 // Make Cleanup Attribute. … … 348 435 std::list< Expression * > attr_params; 349 436 attr_params.push_back( nameOf( finally_wrapper ) ); 350 attr ributes.push_back( new Attribute( "cleanup", attr_params ) );351 } 352 353 return ObjectDecl( /* ... */354 const std::string &name "finally_hook",437 attributes.push_back( new Attribute( "cleanup", attr_params ) ); 438 } 439 440 return new ObjectDecl( 441 "__finally_hook", 355 442 Type::StorageClasses(), 356 443 LinkageSpec::Cforall, 357 444 nullptr, 358 /* ... Type * ... */, 445 new StructInstType( 446 noQualifiers, 447 hook_decl 448 ), 359 449 nullptr, 360 450 attributes … … 363 453 364 454 365 class ExceptionMutatorCore : public With Scoping{455 class ExceptionMutatorCore : public WithGuards { 366 456 enum Context { NoHandler, TerHandler, ResHandler }; 367 457 … … 370 460 // loop, switch or the goto stays within the function. 371 461 372 Context cur Context;462 Context cur_context; 373 463 374 464 // We might not need this, but a unique base for each try block's … … 377 467 //unsigned int try_count = 0; 378 468 469 StructDecl *node_decl; 470 StructDecl *hook_decl; 379 471 380 472 public: 381 473 ExceptionMutatorCore() : 382 curContext(NoHandler) 474 cur_context(NoHandler), 475 node_decl(nullptr), hook_decl(nullptr) 383 476 {} 384 477 385 void premutate( CatchStmt *tryStmt ); 478 void premutate( CatchStmt *catchStmt ); 479 void premutate( StructDecl *structDecl ); 386 480 Statement * postmutate( ThrowStmt *throwStmt ); 387 481 Statement * postmutate( TryStmt *tryStmt ); … … 393 487 if ( throwStmt->get_expr() ) { 394 488 return create_terminate_throw( throwStmt ); 395 } else if ( TerHandler == cur Context ) {489 } else if ( TerHandler == cur_context ) { 396 490 return create_terminate_rethrow( throwStmt ); 397 491 } else { 398 492 assertf(false, "Invalid throw in %s at %i\n", 399 throwStmt->location.filename ,493 throwStmt->location.filename.c_str(), 400 494 throwStmt->location.linenumber); 401 495 return nullptr; … … 404 498 if ( throwStmt->get_expr() ) { 405 499 return create_resume_throw( throwStmt ); 406 } else if ( ResHandler == cur Context ) {500 } else if ( ResHandler == cur_context ) { 407 501 return create_resume_rethrow( throwStmt ); 408 502 } else { 409 503 assertf(false, "Invalid throwResume in %s at %i\n", 410 throwStmt->location.filename ,504 throwStmt->location.filename.c_str(), 411 505 throwStmt->location.linenumber); 412 506 return nullptr; … … 416 510 417 511 Statement * ExceptionMutatorCore::postmutate( TryStmt *tryStmt ) { 512 assert( node_decl ); 513 assert( hook_decl ); 514 418 515 // Generate a prefix for the function names? 419 516 420 CompoundStmt * block = new CompoundStmt( );421 Statement * inner = take_try_block( tryStmt );517 CompoundStmt * block = new CompoundStmt( noLabels ); 518 CompoundStmt * inner = take_try_block( tryStmt ); 422 519 423 520 if ( tryStmt->get_finally() ) { … … 427 524 appendDeclStmt( block, finally_block ); 428 525 // Create and add the finally cleanup hook. 429 appendDeclStmt( block, create_finally_hook( finally_block ) ); 430 } 431 432 StatementList termination_handlers; 433 StatementList resumption_handlers; 434 split( tryStmt->get_handlers(), 435 termination_handlers, resumption_handlers ); 436 437 if ( resumeption_handlers.size() ) { 526 appendDeclStmt( block, 527 create_finally_hook( hook_decl, finally_block ) ); 528 } 529 530 CatchList termination_handlers; 531 CatchList resumption_handlers; 532 split( tryStmt->get_catchers(), 533 termination_handlers, resumption_handlers ); 534 535 if ( resumption_handlers.size() ) { 438 536 // Define the helper function. 439 537 FunctionDecl * resume_handler = … … 441 539 appendDeclStmt( block, resume_handler ); 442 540 // Prepare hooks 443 inner = create_resume_wrapper( inner, resume_handler );541 inner = create_resume_wrapper( node_decl, inner, resume_handler ); 444 542 } 445 543 … … 462 560 block->push_back( inner ); 463 561 464 free_all( termination_handlers );465 free_all( resumption_handlers );562 //free_all( termination_handlers ); 563 //free_all( resumption_handlers ); 466 564 467 565 return block; … … 469 567 470 568 void ExceptionMutatorCore::premutate( CatchStmt *catchStmt ) { 471 GuardValue( cur Context );472 if ( CatchStmt::Terminat ion== catchStmt->get_kind() ) {473 cur Context = TerHandler;569 GuardValue( cur_context ); 570 if ( CatchStmt::Terminate == catchStmt->get_kind() ) { 571 cur_context = TerHandler; 474 572 } else { 475 curContext = ResHandler; 476 } 477 } 478 479 void translateEHM( std::list< Declaration *> & translationUnit ) { 573 cur_context = ResHandler; 574 } 575 } 576 577 void ExceptionMutatorCore::premutate( StructDecl *structDecl ) { 578 if ( !structDecl->has_body() ) { 579 // Skip children? 580 return; 581 } else if ( structDecl->get_name() == "__cfaehm__try_resume_node" ) { 582 assert( nullptr == node_decl ); 583 node_decl = structDecl; 584 } else if ( structDecl->get_name() == "__cfaehm__cleanup_hook" ) { 585 assert( nullptr == hook_decl ); 586 hook_decl = structDecl; 587 } 588 // Later we might get the exception type as well. 589 } 590 591 void translateEHM( std::list< Declaration *> & translationUnit ) { 592 init_func_types(); 593 480 594 PassVisitor<ExceptionMutatorCore> translator; 481 for ( Declaration * decl : translationUnit ) { 482 decl->mutate( translator ); 483 } 595 mutateAll( translationUnit, translator ); 484 596 } 485 597 } -
src/ControlStruct/ExceptTranslate.h
rfea3faa rb826e6b 10 10 // Created On : Tus Jun 06 10:13:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Jun 22 15:57:00 201713 // Update Count : 012 // Last Modified On : Fri Jun 30 10:20:00 2017 13 // Update Count : 2 14 14 // 15 15 … … 17 17 #define EXCEPT_TRANSLATE_H 18 18 19 namespace ControlFlow { 19 #include <list> 20 #include "SynTree/SynTree.h" 21 22 namespace ControlStruct { 20 23 void translateEHM( std::list< Declaration *> & translationUnit ); 21 24 /* Converts exception handling structures into their underlying C code. -
src/ControlStruct/module.mk
rfea3faa rb826e6b 10 10 ## Author : Richard C. Bilson 11 11 ## Created On : Mon Jun 1 17:49:17 2015 12 ## Last Modified By : Peter A. Buhr13 ## Last Modified On : Thu Aug 4 11:38:06 201614 ## Update Count : 312 ## Last Modified By : Andrew Beach 13 ## Last Modified On : Wed Jun 28 16:15:00 2017 14 ## Update Count : 4 15 15 ############################################################################### 16 16 17 17 SRC += ControlStruct/LabelGenerator.cc \ 18 18 ControlStruct/LabelFixer.cc \ 19 ControlStruct/MLEMutator.cc \19 ControlStruct/MLEMutator.cc \ 20 20 ControlStruct/Mutate.cc \ 21 ControlStruct/ForExprMutator.cc 22 21 ControlStruct/ForExprMutator.cc \ 22 ControlStruct/ExceptTranslate.cc -
src/GenPoly/Box.cc
rfea3faa rb826e6b 506 506 DeclarationWithType *Pass1::mutate( FunctionDecl *functionDecl ) { 507 507 if ( functionDecl->get_statements() ) { // empty routine body ? 508 // std::cerr << "mutating function: " << functionDecl->get_mangleName() << std::endl; 508 509 doBeginScope(); 509 510 scopeTyVars.beginScope(); … … 550 551 retval = oldRetval; 551 552 doEndScope(); 553 // std::cerr << "end function: " << functionDecl->get_mangleName() << std::endl; 552 554 } // if 553 555 return functionDecl; … … 1118 1120 1119 1121 Expression *Pass1::mutate( ApplicationExpr *appExpr ) { 1120 // std::cerr << "mutate appExpr: " ;1122 // std::cerr << "mutate appExpr: " << InitTweak::getFunctionName( appExpr ) << std::endl; 1121 1123 // for ( TyVarMap::iterator i = scopeTyVars.begin(); i != scopeTyVars.end(); ++i ) { 1122 1124 // std::cerr << i->first << " "; … … 1143 1145 ReferenceToType *dynRetType = isDynRet( function, exprTyVars ); 1144 1146 1147 // std::cerr << function << std::endl; 1148 // std::cerr << "scopeTyVars: "; 1149 // printTyVarMap( std::cerr, scopeTyVars ); 1150 // std::cerr << "exprTyVars: "; 1151 // printTyVarMap( std::cerr, exprTyVars ); 1152 // std::cerr << "env: " << *env << std::endl; 1153 // std::cerr << needsAdapter( function, scopeTyVars ) << ! needsAdapter( function, exprTyVars) << std::endl; 1154 1145 1155 // NOTE: addDynRetParam needs to know the actual (generated) return type so it can make a temp variable, so pass the result type from the appExpr 1146 1156 // passTypeVars needs to know the program-text return type (i.e. the distinction between _conc_T30 and T3(int)) 1147 1157 // concRetType may not be a good name in one or both of these places. A more appropriate name change is welcome. 1148 1158 if ( dynRetType ) { 1159 // std::cerr << "dynRetType: " << dynRetType << std::endl; 1149 1160 Type *concRetType = appExpr->get_result()->isVoid() ? nullptr : appExpr->get_result(); 1150 1161 ret = addDynRetParam( appExpr, concRetType, arg ); // xxx - used to use dynRetType instead of concRetType -
src/GenPoly/InstantiateGeneric.cc
rfea3faa rb826e6b 22 22 #include "InstantiateGeneric.h" 23 23 24 #include "DeclMutator.h"25 24 #include "GenPoly.h" 26 25 #include "ScopedSet.h" 27 26 #include "ScrubTyVars.h" 28 #include "PolyMutator.h" 27 28 #include "Common/PassVisitor.h" 29 #include "Common/ScopedMap.h" 30 #include "Common/UniqueName.h" 31 #include "Common/utility.h" 29 32 30 33 #include "ResolvExpr/typeops.h" … … 34 37 #include "SynTree/Type.h" 35 38 36 #include "Common/ScopedMap.h" 37 #include " Common/UniqueName.h"38 #include "Common/utility.h" 39 40 #include "InitTweak/InitTweak.h" 41 39 42 40 43 namespace GenPoly { … … 153 156 } 154 157 155 // collect the environments of each TypeInstType so that type variables can be replaced156 // xxx - possibly temporary solution. Access to type environments is required in GenericInstantiator, but it needs to be a DeclMutator which does not provide easy access to the type environments.157 class EnvFinder final : public GenPoly::PolyMutator {158 public:159 using GenPoly::PolyMutator::mutate;160 virtual Type * mutate( TypeInstType * inst ) override {161 if ( env ) envMap[inst] = env;162 return inst;163 }164 165 // don't want to associate an environment with TypeInstTypes that occur in function types - this may actually only apply to function types belonging to DeclarationWithTypes (or even just FunctionDecl)?166 virtual Type * mutate( FunctionType * ftype ) override {167 return ftype;168 }169 std::unordered_map< ReferenceToType *, TypeSubstitution * > envMap;170 };171 172 158 /// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately 173 class GenericInstantiator final : public DeclMutator{159 struct GenericInstantiator final : public WithTypeSubstitution, public WithDeclsToAdd, public WithVisitorRef<GenericInstantiator>, public WithGuards { 174 160 /// Map of (generic type, parameter list) pairs to concrete type instantiations 175 161 InstantiationMap< AggregateDecl, AggregateDecl > instantiations; … … 178 164 /// Namer for concrete types 179 165 UniqueName typeNamer; 180 /// Reference to mapping of environments 181 const std::unordered_map< ReferenceToType *, TypeSubstitution * > & envMap; 182 public: 183 GenericInstantiator( const std::unordered_map< ReferenceToType *, TypeSubstitution * > & envMap ) : DeclMutator(), instantiations(), dtypeStatics(), typeNamer("_conc_"), envMap( envMap ) {} 184 185 using DeclMutator::mutate; 186 virtual Type* mutate( StructInstType *inst ) override; 187 virtual Type* mutate( UnionInstType *inst ) override; 188 189 virtual void doBeginScope() override; 190 virtual void doEndScope() override; 166 /// Should not make use of type environment to replace types of function parameter and return values. 167 bool inFunctionType = false; 168 GenericInstantiator() : instantiations(), dtypeStatics(), typeNamer("_conc_") {} 169 170 Type* postmutate( StructInstType *inst ); 171 Type* postmutate( UnionInstType *inst ); 172 173 void premutate( __attribute__((unused)) FunctionType * ftype ) { 174 GuardValue( inFunctionType ); 175 inFunctionType = true; 176 } 177 178 void beginScope(); 179 void endScope(); 191 180 private: 192 181 /// Wrap instantiation lookup for structs … … 207 196 208 197 void instantiateGeneric( std::list< Declaration* > &translationUnit ) { 209 EnvFinder finder; 210 mutateAll( translationUnit, finder ); 211 GenericInstantiator instantiator( finder.envMap ); 212 instantiator.mutateDeclarationList( translationUnit ); 198 PassVisitor<GenericInstantiator> instantiator; 199 mutateAll( translationUnit, instantiator ); 213 200 } 214 201 … … 306 293 Type *GenericInstantiator::replaceWithConcrete( Type *type, bool doClone ) { 307 294 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) { 308 if ( envMap.count( typeInst ) ) { 309 TypeSubstitution * env = envMap.at( typeInst ); 295 if ( env && ! inFunctionType ) { 310 296 Type *concrete = env->lookup( typeInst->get_name() ); 311 297 if ( concrete ) { … … 331 317 332 318 333 Type* GenericInstantiator::mutate( StructInstType *inst ) { 334 // mutate subtypes 335 Type *mutated = Mutator::mutate( inst ); 336 inst = dynamic_cast< StructInstType* >( mutated ); 337 if ( ! inst ) return mutated; 338 319 Type* GenericInstantiator::postmutate( StructInstType *inst ) { 339 320 // exit early if no need for further mutation 340 321 if ( inst->get_parameters().empty() ) return inst; … … 368 349 substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() ); 369 350 insert( inst, typeSubs, concDecl ); // must insert before recursion 370 concDecl->acceptMutator( * this); // recursively instantiate members371 DeclMutator::addDeclaration( concDecl ); // must occur before declaration is added so that member instantiations appear first351 concDecl->acceptMutator( *visitor ); // recursively instantiate members 352 declsToAddBefore.push_back( concDecl ); // must occur before declaration is added so that member instantiations appear first 372 353 } 373 354 StructInstType *newInst = new StructInstType( inst->get_qualifiers(), concDecl->get_name() ); … … 388 369 } 389 370 390 Type* GenericInstantiator::mutate( UnionInstType *inst ) { 391 // mutate subtypes 392 Type *mutated = Mutator::mutate( inst ); 393 inst = dynamic_cast< UnionInstType* >( mutated ); 394 if ( ! inst ) return mutated; 395 371 Type* GenericInstantiator::postmutate( UnionInstType *inst ) { 396 372 // exit early if no need for further mutation 397 373 if ( inst->get_parameters().empty() ) return inst; … … 423 399 substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() ); 424 400 insert( inst, typeSubs, concDecl ); // must insert before recursion 425 concDecl->acceptMutator( * this); // recursively instantiate members426 DeclMutator::addDeclaration( concDecl ); // must occur before declaration is added so that member instantiations appear first401 concDecl->acceptMutator( *visitor ); // recursively instantiate members 402 declsToAddBefore.push_back( concDecl ); // must occur before declaration is added so that member instantiations appear first 427 403 } 428 404 UnionInstType *newInst = new UnionInstType( inst->get_qualifiers(), concDecl->get_name() ); … … 442 418 } 443 419 444 void GenericInstantiator::doBeginScope() { 445 DeclMutator::doBeginScope(); 420 void GenericInstantiator::beginScope() { 446 421 instantiations.beginScope(); 447 422 dtypeStatics.beginScope(); 448 423 } 449 424 450 void GenericInstantiator::doEndScope() { 451 DeclMutator::doEndScope(); 425 void GenericInstantiator::endScope() { 452 426 instantiations.endScope(); 453 427 dtypeStatics.endScope(); -
src/InitTweak/FixInit.cc
rfea3faa rb826e6b 104 104 typedef AddStmtVisitor Parent; 105 105 using Parent::visit; 106 typedef std::set< ObjectDecl * > ObjectSet; 106 // use ordered data structure to maintain ordering for set_difference and for consistent error messages 107 typedef std::list< ObjectDecl * > ObjectSet; 107 108 virtual void visit( CompoundStmt *compoundStmt ) override; 108 109 virtual void visit( DeclStmt *stmt ) override; … … 116 117 117 118 // debug 118 struct printSet {119 typedef ObjDeclCollector::ObjectSet ObjectSet;120 printSet( const ObjectSet & objs ) : objs( objs ) {}119 template<typename ObjectSet> 120 struct PrintSet { 121 PrintSet( const ObjectSet & objs ) : objs( objs ) {} 121 122 const ObjectSet & objs; 122 123 }; 123 std::ostream & operator<<( std::ostream & out, const printSet & set) { 124 template<typename ObjectSet> 125 PrintSet<ObjectSet> printSet( const ObjectSet & objs ) { return PrintSet<ObjectSet>( objs ); } 126 template<typename ObjectSet> 127 std::ostream & operator<<( std::ostream & out, const PrintSet<ObjectSet> & set) { 124 128 out << "{ "; 125 129 for ( ObjectDecl * obj : set.objs ) { … … 724 728 // static bool __objName_uninitialized = true 725 729 BasicType * boolType = new BasicType( Type::Qualifiers(), BasicType::Bool ); 726 SingleInit * boolInitExpr = new SingleInit( new ConstantExpr( Constant::from_int( 1 ) ) , noDesignators);730 SingleInit * boolInitExpr = new SingleInit( new ConstantExpr( Constant::from_int( 1 ) ) ); 727 731 ObjectDecl * isUninitializedVar = new ObjectDecl( objDecl->get_mangleName() + "_uninitialized", Type::StorageClasses( Type::Static ), LinkageSpec::Cforall, 0, boolType, boolInitExpr ); 728 732 isUninitializedVar->fixUniqueId(); … … 745 749 746 750 Statement * dtor = ctorInit->get_dtor(); 747 objDecl->set_init( NULL);748 ctorInit->set_ctor( NULL);751 objDecl->set_init( nullptr ); 752 ctorInit->set_ctor( nullptr ); 749 753 ctorInit->set_dtor( nullptr ); 750 754 if ( dtor ) { … … 799 803 } else { 800 804 stmtsToAddAfter.push_back( ctor ); 801 objDecl->set_init( NULL);802 ctorInit->set_ctor( NULL);805 objDecl->set_init( nullptr ); 806 ctorInit->set_ctor( nullptr ); 803 807 } 804 808 } // if 805 809 } else if ( Initializer * init = ctorInit->get_init() ) { 806 810 objDecl->set_init( init ); 807 ctorInit->set_init( NULL);811 ctorInit->set_init( nullptr ); 808 812 } else { 809 813 // no constructor and no initializer, which is okay 810 objDecl->set_init( NULL);814 objDecl->set_init( nullptr ); 811 815 } // if 812 816 delete ctorInit; … … 816 820 817 821 void ObjDeclCollector::visit( CompoundStmt * compoundStmt ) { 818 std::set< ObjectDecl * >prevVars = curVars;822 ObjectSet prevVars = curVars; 819 823 Parent::visit( compoundStmt ); 820 824 curVars = prevVars; … … 824 828 // keep track of all variables currently in scope 825 829 if ( ObjectDecl * objDecl = dynamic_cast< ObjectDecl * > ( stmt->get_decl() ) ) { 826 curVars. insert( objDecl );830 curVars.push_back( objDecl ); 827 831 } // if 828 832 Parent::visit( stmt ); … … 939 943 ) 940 944 if ( ! diff.empty() ) { 945 // create an auxilliary set for fast lookup -- can't make diff a set, because diff ordering should be consistent for error messages. 946 std::unordered_set<ObjectDecl *> needsDestructor( diff.begin(), diff.end() ); 947 941 948 // go through decl ordered list of objectdecl. for each element that occurs in diff, output destructor 942 949 OrderedDecls ordered; 943 950 for ( OrderedDecls & rdo : reverseDeclOrder ) { 944 951 // add elements from reverseDeclOrder into ordered if they occur in diff - it is key that this happens in reverse declaration order. 945 copy_if( rdo.begin(), rdo.end(), back_inserter( ordered ), [&]( ObjectDecl * objDecl ) { return diff.count( objDecl ); } );952 copy_if( rdo.begin(), rdo.end(), back_inserter( ordered ), [&]( ObjectDecl * objDecl ) { return needsDestructor.count( objDecl ); } ); 946 953 } // for 947 954 insertDtors( ordered.begin(), ordered.end(), back_inserter( stmtsToAdd ) ); -
src/InitTweak/GenInit.cc
rfea3faa rb826e6b 44 44 } 45 45 46 class ReturnFixer : public WithStmtsToAdd, public WithScopes { 47 public: 46 struct ReturnFixer : public WithStmtsToAdd, public WithGuards { 48 47 /// consistently allocates a temporary variable for the return value 49 48 /// of a function so that anything which the resolver decides can be constructed … … 59 58 }; 60 59 61 class CtorDtor final : public GenPoly::PolyMutator { 62 public: 63 typedef GenPoly::PolyMutator Parent; 64 using Parent::mutate; 60 struct CtorDtor : public WithGuards, public WithShortCircuiting { 65 61 /// create constructor and destructor statements for object declarations. 66 62 /// the actual call statements will be added in after the resolver has run … … 69 65 static void generateCtorDtor( std::list< Declaration * > &translationUnit ); 70 66 71 virtual DeclarationWithType * mutate( ObjectDecl * ) override; 72 virtual DeclarationWithType * mutate( FunctionDecl *functionDecl ) override; 67 void previsit( ObjectDecl * ); 68 void previsit( FunctionDecl *functionDecl ); 69 73 70 // should not traverse into any of these declarations to find objects 74 71 // that need to be constructed or destructed 75 virtual Declaration* mutate( StructDecl *aggregateDecl ) override; 76 virtual Declaration* mutate( UnionDecl *aggregateDecl ) override { return aggregateDecl; } 77 virtual Declaration* mutate( EnumDecl *aggregateDecl ) override { return aggregateDecl; } 78 virtual Declaration* mutate( TraitDecl *aggregateDecl ) override { return aggregateDecl; } 79 virtual TypeDecl* mutate( TypeDecl *typeDecl ) override { return typeDecl; } 80 virtual Declaration* mutate( TypedefDecl *typeDecl ) override { return typeDecl; } 81 82 virtual Type * mutate( FunctionType *funcType ) override { return funcType; } 83 84 virtual CompoundStmt * mutate( CompoundStmt * compoundStmt ) override; 72 void previsit( StructDecl *aggregateDecl ); 73 void previsit( __attribute__((unused)) UnionDecl * aggregateDecl ) { visit_children = false; } 74 void previsit( __attribute__((unused)) EnumDecl * aggregateDecl ) { visit_children = false; } 75 void previsit( __attribute__((unused)) TraitDecl * aggregateDecl ) { visit_children = false; } 76 void previsit( __attribute__((unused)) TypeDecl * typeDecl ) { visit_children = false; } 77 void previsit( __attribute__((unused)) TypedefDecl * typeDecl ) { visit_children = false; } 78 void previsit( __attribute__((unused)) FunctionType * funcType ) { visit_children = false; } 79 80 void previsit( CompoundStmt * compoundStmt ); 85 81 86 82 private: … … 211 207 212 208 void CtorDtor::generateCtorDtor( std::list< Declaration * > & translationUnit ) { 213 CtorDtorctordtor;214 mutateAll( translationUnit, ctordtor );209 PassVisitor<CtorDtor> ctordtor; 210 acceptAll( translationUnit, ctordtor ); 215 211 } 216 212 … … 289 285 } 290 286 291 DeclarationWithType * CtorDtor::mutate( ObjectDecl * objDecl ) {287 void CtorDtor::previsit( ObjectDecl * objDecl ) { 292 288 handleDWT( objDecl ); 293 289 // hands off if @=, extern, builtin, etc. … … 301 297 objDecl->set_init( genCtorInit( objDecl ) ); 302 298 } 303 return Parent::mutate( objDecl ); 304 } 305 306 DeclarationWithType * CtorDtor::mutate( FunctionDecl *functionDecl ) { 307 ValueGuard< bool > oldInFunc = inFunction; 299 } 300 301 void CtorDtor::previsit( FunctionDecl *functionDecl ) { 302 GuardValue( inFunction ); 308 303 inFunction = true; 309 304 310 305 handleDWT( functionDecl ); 311 306 312 managedTypes.beginScope();307 GuardScope( managedTypes ); 313 308 // go through assertions and recursively add seen ctor/dtors 314 309 for ( auto & tyDecl : functionDecl->get_functionType()->get_forall() ) { … … 317 312 } 318 313 } 319 // parameters should not be constructed and destructed, so don't mutate FunctionType 320 functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) ); 321 322 managedTypes.endScope(); 323 return functionDecl; 324 } 325 326 Declaration* CtorDtor::mutate( StructDecl *aggregateDecl ) { 314 315 PassVisitor<CtorDtor> newCtorDtor; 316 newCtorDtor.pass = *this; 317 maybeAccept( functionDecl->get_statements(), newCtorDtor ); 318 visit_children = false; // do not try and construct parameters or forall parameters - must happen after maybeAccept 319 } 320 321 void CtorDtor::previsit( StructDecl *aggregateDecl ) { 322 visit_children = false; // do not try to construct and destruct aggregate members 323 327 324 // don't construct members, but need to take note if there is a managed member, 328 325 // because that means that this type is also managed … … 336 333 } 337 334 } 338 return aggregateDecl; 339 } 340 341 CompoundStmt * CtorDtor::mutate( CompoundStmt * compoundStmt ) { 342 managedTypes.beginScope(); 343 CompoundStmt * stmt = Parent::mutate( compoundStmt ); 344 managedTypes.endScope(); 345 return stmt; 346 } 347 335 } 336 337 void CtorDtor::previsit( __attribute__((unused)) CompoundStmt * compoundStmt ) { 338 GuardScope( managedTypes ); 339 } 348 340 } // namespace InitTweak 349 341 -
src/InitTweak/InitTweak.cc
rfea3faa rb826e6b 14 14 public: 15 15 bool hasDesignations = false; 16 template<typename Init> 17 void handleInit( Init * init ) { 18 if ( ! init->get_designators().empty() ) hasDesignations = true; 19 else Visitor::visit( init ); 20 } 21 virtual void visit( SingleInit * singleInit ) { handleInit( singleInit); } 22 virtual void visit( ListInit * listInit ) { handleInit( listInit); } 16 virtual void visit( Designation * des ) { 17 if ( ! des->get_designators().empty() ) hasDesignations = true; 18 else Visitor::visit( des ); 19 } 23 20 }; 24 21 -
src/MakeLibCfa.cc
rfea3faa rb826e6b 15 15 16 16 #include "MakeLibCfa.h" 17 #include "SynTree/Visitor.h" 18 #include "SynTree/Declaration.h" 19 #include "SynTree/Type.h" 20 #include "SynTree/Expression.h" 21 #include "SynTree/Statement.h" 22 #include "SynTree/Initializer.h" 23 #include "CodeGen/OperatorTable.h" 24 #include "Common/UniqueName.h" 17 18 #include <cassert> // for assert 19 #include <string> // for operator==, string 20 21 #include "CodeGen/OperatorTable.h" // for OperatorInfo, operatorLookup, Ope... 22 #include "Common/SemanticError.h" // for SemanticError 23 #include "Common/UniqueName.h" // for UniqueName 24 #include "Parser/LinkageSpec.h" // for Spec, Intrinsic, C 25 #include "SynTree/Declaration.h" // for FunctionDecl, ObjectDecl, Declara... 26 #include "SynTree/Expression.h" // for NameExpr, UntypedExpr, VariableExpr 27 #include "SynTree/Initializer.h" // for SingleInit 28 #include "SynTree/Label.h" // for Label 29 #include "SynTree/Statement.h" // for CompoundStmt, ReturnStmt 30 #include "SynTree/Type.h" // for FunctionType 31 #include "SynTree/Visitor.h" // for acceptAll, Visitor 25 32 26 33 namespace LibCfa { … … 92 99 assert( ! objDecl->get_init() ); 93 100 std::list< Expression* > noDesignators; 94 objDecl->set_init( new SingleInit( new NameExpr( objDecl->get_name() ), noDesignators,false ) ); // cannot be constructed101 objDecl->set_init( new SingleInit( new NameExpr( objDecl->get_name() ), false ) ); // cannot be constructed 95 102 newDecls.push_back( objDecl ); 96 103 } -
src/MakeLibCfa.h
rfea3faa rb826e6b 17 17 #define LIBCFA_MAKELIBCFA_H 18 18 19 #include <list> 20 #include <SynTree/SynTree.h> 19 #include <list> // for list 20 21 class Declaration; 21 22 22 23 namespace LibCfa { -
src/Makefile.am
rfea3faa rb826e6b 43 43 driver_cfa_cpp_SOURCES = ${SRC} 44 44 driver_cfa_cpp_LDADD = ${LEXLIB} -ldl # yywrap 45 driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall - DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2 -g -std=c++1445 driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2 -g -std=c++14 46 46 driver_cfa_cpp_LDFLAGS = -Xlinker -export-dynamic 47 47 -
src/Makefile.in
rfea3faa rb826e6b 1 # Makefile.in generated by automake 1.1 1.3from Makefile.am.1 # Makefile.in generated by automake 1.15 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 6 # Foundation, Inc. 4 # Copyright (C) 1994-2014 Free Software Foundation, Inc. 5 7 6 # This Makefile.in is free software; the Free Software Foundation 8 7 # gives unlimited permission to copy and/or distribute it, … … 59 58 60 59 VPATH = @srcdir@ 60 am__is_gnu_make = { \ 61 if test -z '$(MAKELEVEL)'; then \ 62 false; \ 63 elif test -n '$(MAKE_HOST)'; then \ 64 true; \ 65 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ 66 true; \ 67 else \ 68 false; \ 69 fi; \ 70 } 71 am__make_running_with_option = \ 72 case $${target_option-} in \ 73 ?) ;; \ 74 *) echo "am__make_running_with_option: internal error: invalid" \ 75 "target option '$${target_option-}' specified" >&2; \ 76 exit 1;; \ 77 esac; \ 78 has_opt=no; \ 79 sane_makeflags=$$MAKEFLAGS; \ 80 if $(am__is_gnu_make); then \ 81 sane_makeflags=$$MFLAGS; \ 82 else \ 83 case $$MAKEFLAGS in \ 84 *\\[\ \ ]*) \ 85 bs=\\; \ 86 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ 87 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ 88 esac; \ 89 fi; \ 90 skip_next=no; \ 91 strip_trailopt () \ 92 { \ 93 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ 94 }; \ 95 for flg in $$sane_makeflags; do \ 96 test $$skip_next = yes && { skip_next=no; continue; }; \ 97 case $$flg in \ 98 *=*|--*) continue;; \ 99 -*I) strip_trailopt 'I'; skip_next=yes;; \ 100 -*I?*) strip_trailopt 'I';; \ 101 -*O) strip_trailopt 'O'; skip_next=yes;; \ 102 -*O?*) strip_trailopt 'O';; \ 103 -*l) strip_trailopt 'l'; skip_next=yes;; \ 104 -*l?*) strip_trailopt 'l';; \ 105 -[dEDm]) skip_next=yes;; \ 106 -[JT]) skip_next=yes;; \ 107 esac; \ 108 case $$flg in \ 109 *$$target_option*) has_opt=yes; break;; \ 110 esac; \ 111 done; \ 112 test $$has_opt = yes 113 am__make_dryrun = (target_option=n; $(am__make_running_with_option)) 114 am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 61 115 pkgdatadir = $(datadir)/@PACKAGE@ 62 116 pkgincludedir = $(includedir)/@PACKAGE@ … … 77 131 build_triplet = @build@ 78 132 host_triplet = @host@ 79 DIST_COMMON = $(srcdir)/CodeGen/module.mk \80 $(srcdir)/CodeTools/module.mk $(srcdir)/Common/module.mk \81 $(srcdir)/Concurrency/module.mk \82 $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk \83 $(srcdir)/InitTweak/module.mk $(srcdir)/Makefile.am \84 $(srcdir)/Makefile.in $(srcdir)/Parser/module.mk \85 $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk \86 $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk \87 Parser/lex.cc Parser/parser.cc Parser/parser.h88 133 cfa_cpplib_PROGRAMS = driver/cfa-cpp$(EXEEXT) 89 134 subdir = src … … 92 137 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 93 138 $(ACLOCAL_M4) 139 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) 94 140 mkinstalldirs = $(install_sh) -d 95 141 CONFIG_HEADER = $(top_builddir)/config.h … … 119 165 ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT) \ 120 166 ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) \ 167 ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT) \ 121 168 GenPoly/driver_cfa_cpp-Box.$(OBJEXT) \ 122 169 GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) \ … … 143 190 Parser/driver_cfa_cpp-TypeData.$(OBJEXT) \ 144 191 Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT) \ 145 Parser/driver_cfa_cpp-parse utility.$(OBJEXT) \192 Parser/driver_cfa_cpp-parserutility.$(OBJEXT) \ 146 193 ResolvExpr/driver_cfa_cpp-AlternativeFinder.$(OBJEXT) \ 147 194 ResolvExpr/driver_cfa_cpp-Alternative.$(OBJEXT) \ … … 161 208 ResolvExpr/driver_cfa_cpp-Occurs.$(OBJEXT) \ 162 209 ResolvExpr/driver_cfa_cpp-TypeEnvironment.$(OBJEXT) \ 210 ResolvExpr/driver_cfa_cpp-CurrentObject.$(OBJEXT) \ 163 211 SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) \ 164 212 SymTab/driver_cfa_cpp-Mangler.$(OBJEXT) \ … … 168 216 SymTab/driver_cfa_cpp-TypeEquality.$(OBJEXT) \ 169 217 SymTab/driver_cfa_cpp-Autogen.$(OBJEXT) \ 218 SymTab/driver_cfa_cpp-TreeStruct.$(OBJEXT) \ 170 219 SynTree/driver_cfa_cpp-Type.$(OBJEXT) \ 171 220 SynTree/driver_cfa_cpp-VoidType.$(OBJEXT) \ … … 213 262 driver_cfa_cpp_LINK = $(CXXLD) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) \ 214 263 $(driver_cfa_cpp_LDFLAGS) $(LDFLAGS) -o $@ 264 AM_V_P = $(am__v_P_@AM_V@) 265 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) 266 am__v_P_0 = false 267 am__v_P_1 = : 268 AM_V_GEN = $(am__v_GEN_@AM_V@) 269 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 270 am__v_GEN_0 = @echo " GEN " $@; 271 am__v_GEN_1 = 272 AM_V_at = $(am__v_at_@AM_V@) 273 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 274 am__v_at_0 = @ 275 am__v_at_1 = 215 276 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) 216 277 depcomp = $(SHELL) $(top_srcdir)/automake/depcomp … … 220 281 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) 221 282 am__v_lt_0 = --silent 283 am__v_lt_1 = 222 284 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ 223 285 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) 224 286 AM_V_CXX = $(am__v_CXX_@AM_V@) 225 287 am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) 226 am__v_CXX_0 = @echo " CXX " $@; 227 AM_V_at = $(am__v_at_@AM_V@) 228 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 229 am__v_at_0 = @ 288 am__v_CXX_0 = @echo " CXX " $@; 289 am__v_CXX_1 = 230 290 CXXLD = $(CXX) 231 291 CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ … … 233 293 AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) 234 294 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) 235 am__v_CXXLD_0 = @echo " CXXLD " $@; 295 am__v_CXXLD_0 = @echo " CXXLD " $@; 296 am__v_CXXLD_1 = 236 297 @MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ || 237 298 LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) 238 299 AM_V_LEX = $(am__v_LEX_@AM_V@) 239 300 am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) 240 am__v_LEX_0 = @echo " LEX " $@; 301 am__v_LEX_0 = @echo " LEX " $@; 302 am__v_LEX_1 = 241 303 YLWRAP = $(top_srcdir)/automake/ylwrap 242 304 @MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ || 305 am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ 306 -e s/c++$$/h++/ -e s/c$$/h/ 243 307 YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) 244 308 AM_V_YACC = $(am__v_YACC_@AM_V@) 245 309 am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) 246 am__v_YACC_0 = @echo " YACC " $@; 310 am__v_YACC_0 = @echo " YACC " $@; 311 am__v_YACC_1 = 247 312 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 248 313 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) 249 314 AM_V_CC = $(am__v_CC_@AM_V@) 250 315 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) 251 am__v_CC_0 = @echo " CC " $@; 316 am__v_CC_0 = @echo " CC " $@; 317 am__v_CC_1 = 252 318 CCLD = $(CC) 253 319 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 254 320 AM_V_CCLD = $(am__v_CCLD_@AM_V@) 255 321 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) 256 am__v_CCLD_0 = @echo " CCLD " $@; 257 AM_V_GEN = $(am__v_GEN_@AM_V@) 258 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 259 am__v_GEN_0 = @echo " GEN " $@; 322 am__v_CCLD_0 = @echo " CCLD " $@; 323 am__v_CCLD_1 = 260 324 SOURCES = $(driver_cfa_cpp_SOURCES) 261 325 DIST_SOURCES = $(driver_cfa_cpp_SOURCES) 326 am__can_run_installinfo = \ 327 case $$AM_UPDATE_INFO_DIR in \ 328 n|no|NO) false;; \ 329 *) (install-info --version) >/dev/null 2>&1;; \ 330 esac 331 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) 332 # Read a list of newline-separated strings from the standard input, 333 # and print each of them once, without duplicates. Input order is 334 # *not* preserved. 335 am__uniquify_input = $(AWK) '\ 336 BEGIN { nonempty = 0; } \ 337 { items[$$0] = 1; nonempty = 1; } \ 338 END { if (nonempty) { for (i in items) print i; }; } \ 339 ' 340 # Make sure the list of sources is unique. This is necessary because, 341 # e.g., the same source file might be shared among _SOURCES variables 342 # for different programs/libraries. 343 am__define_uniq_tagged_files = \ 344 list='$(am__tagged_files)'; \ 345 unique=`for i in $$list; do \ 346 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 347 done | $(am__uniquify_input)` 262 348 ETAGS = etags 263 349 CTAGS = ctags 350 am__DIST_COMMON = $(srcdir)/CodeGen/module.mk \ 351 $(srcdir)/CodeTools/module.mk $(srcdir)/Common/module.mk \ 352 $(srcdir)/Concurrency/module.mk \ 353 $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk \ 354 $(srcdir)/InitTweak/module.mk $(srcdir)/Makefile.in \ 355 $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk \ 356 $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk \ 357 $(srcdir)/Tuples/module.mk $(top_srcdir)/automake/depcomp \ 358 $(top_srcdir)/automake/ylwrap Parser/lex.cc Parser/parser.cc \ 359 Parser/parser.hh 264 360 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 265 361 ACLOCAL = @ACLOCAL@ … … 374 470 program_transform_name = @program_transform_name@ 375 471 psdir = @psdir@ 472 runstatedir = @runstatedir@ 376 473 sbindir = @sbindir@ 377 474 sharedstatedir = @sharedstatedir@ … … 394 491 ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \ 395 492 ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \ 396 ControlStruct/ForExprMutator.cc GenPoly/Box.cc \ 493 ControlStruct/ForExprMutator.cc \ 494 ControlStruct/ExceptTranslate.cc GenPoly/Box.cc \ 397 495 GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \ 398 496 GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \ … … 405 503 Parser/ExpressionNode.cc Parser/StatementNode.cc \ 406 504 Parser/InitializerNode.cc Parser/TypeData.cc \ 407 Parser/LinkageSpec.cc Parser/parse utility.cc \505 Parser/LinkageSpec.cc Parser/parserutility.cc \ 408 506 ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \ 409 507 ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \ … … 414 512 ResolvExpr/RenameVars.cc ResolvExpr/FindOpenVars.cc \ 415 513 ResolvExpr/PolyCost.cc ResolvExpr/Occurs.cc \ 416 ResolvExpr/TypeEnvironment.cc SymTab/Indexer.cc \417 SymTab/ Mangler.cc SymTab/Validate.cc SymTab/FixFunction.cc \418 SymTab/ ImplementationType.cc SymTab/TypeEquality.cc \419 SymTab/ Autogen.cc SynTree/Type.cc SynTree/VoidType.cc \420 SynTree/ BasicType.cc SynTree/PointerType.cc \421 SynTree/ ArrayType.cc SynTree/FunctionType.cc \422 SynTree/ ReferenceToType.cc SynTree/TupleType.cc \423 SynTree/T ypeofType.cc SynTree/AttrType.cc \514 ResolvExpr/TypeEnvironment.cc ResolvExpr/CurrentObject.cc \ 515 SymTab/Indexer.cc SymTab/Mangler.cc SymTab/Validate.cc \ 516 SymTab/FixFunction.cc SymTab/ImplementationType.cc \ 517 SymTab/TypeEquality.cc SymTab/Autogen.cc SymTab/TreeStruct.cc \ 518 SynTree/Type.cc SynTree/VoidType.cc SynTree/BasicType.cc \ 519 SynTree/PointerType.cc SynTree/ArrayType.cc \ 520 SynTree/FunctionType.cc SynTree/ReferenceToType.cc \ 521 SynTree/TupleType.cc SynTree/TypeofType.cc SynTree/AttrType.cc \ 424 522 SynTree/VarArgsType.cc SynTree/ZeroOneType.cc \ 425 523 SynTree/Constant.cc SynTree/Expression.cc SynTree/TupleExpr.cc \ … … 438 536 MAINTAINERCLEANFILES = Parser/parser.output ${libdir}/${notdir \ 439 537 ${cfa_cpplib_PROGRAMS}} 440 BUILT_SOURCES = Parser/parser.h 538 BUILT_SOURCES = Parser/parser.hh 441 539 AM_YFLAGS = -d -t -v 442 540 … … 447 545 driver_cfa_cpp_SOURCES = ${SRC} 448 546 driver_cfa_cpp_LDADD = ${LEXLIB} -ldl # yywrap 449 driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall - DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2 -g -std=c++14547 driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I${abs_top_srcdir}/src/include -DYY_NO_INPUT -O2 -g -std=c++14 450 548 driver_cfa_cpp_LDFLAGS = -Xlinker -export-dynamic 451 549 all: $(BUILT_SOURCES) … … 466 564 $(am__cd) $(top_srcdir) && \ 467 565 $(AUTOMAKE) --foreign src/Makefile 468 .PRECIOUS: Makefile469 566 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 470 567 @case '$?' in \ … … 475 572 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ 476 573 esac; 477 $(srcdir)/CodeGen/module.mk $(srcdir)/CodeTools/module.mk $(srcdir)/Concurrency/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk :574 $(srcdir)/CodeGen/module.mk $(srcdir)/CodeTools/module.mk $(srcdir)/Concurrency/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk $(am__empty): 478 575 479 576 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) … … 487 584 install-cfa_cpplibPROGRAMS: $(cfa_cpplib_PROGRAMS) 488 585 @$(NORMAL_INSTALL) 489 test -z "$(cfa_cpplibdir)" || $(MKDIR_P) "$(DESTDIR)$(cfa_cpplibdir)"490 586 @list='$(cfa_cpplib_PROGRAMS)'; test -n "$(cfa_cpplibdir)" || list=; \ 587 if test -n "$$list"; then \ 588 echo " $(MKDIR_P) '$(DESTDIR)$(cfa_cpplibdir)'"; \ 589 $(MKDIR_P) "$(DESTDIR)$(cfa_cpplibdir)" || exit 1; \ 590 fi; \ 491 591 for p in $$list; do echo "$$p $$p"; done | \ 492 592 sed 's/$(EXEEXT)$$//' | \ 493 while read p p1; do if test -f $$p ;\494 then echo "$$p"; echo "$$p"; else :; fi; \593 while read p p1; do if test -f $$p \ 594 ; then echo "$$p"; echo "$$p"; else :; fi; \ 495 595 done | \ 496 sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ 596 sed -e 'p;s,.*/,,;n;h' \ 597 -e 's|.*|.|' \ 497 598 -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ 498 599 sed 'N;N;N;s,\n, ,g' | \ … … 515 616 files=`for p in $$list; do echo "$$p"; done | \ 516 617 sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ 517 -e 's/$$/$(EXEEXT)/' `; \ 618 -e 's/$$/$(EXEEXT)/' \ 619 `; \ 518 620 test -n "$$list" || exit 0; \ 519 621 echo " ( cd '$(DESTDIR)$(cfa_cpplibdir)' && rm -f" $$files ")"; \ … … 594 696 ControlStruct/$(am__dirstamp) \ 595 697 ControlStruct/$(DEPDIR)/$(am__dirstamp) 698 ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT): \ 699 ControlStruct/$(am__dirstamp) \ 700 ControlStruct/$(DEPDIR)/$(am__dirstamp) 596 701 GenPoly/$(am__dirstamp): 597 702 @$(MKDIR_P) GenPoly … … 634 739 InitTweak/driver_cfa_cpp-InitTweak.$(OBJEXT): \ 635 740 InitTweak/$(am__dirstamp) InitTweak/$(DEPDIR)/$(am__dirstamp) 636 Parser/parser.h : Parser/parser.cc741 Parser/parser.hh: Parser/parser.cc 637 742 @if test ! -f $@; then rm -f Parser/parser.cc; else :; fi 638 743 @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) Parser/parser.cc; else :; fi … … 663 768 Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT): Parser/$(am__dirstamp) \ 664 769 Parser/$(DEPDIR)/$(am__dirstamp) 665 Parser/driver_cfa_cpp-parse utility.$(OBJEXT): Parser/$(am__dirstamp) \770 Parser/driver_cfa_cpp-parserutility.$(OBJEXT): Parser/$(am__dirstamp) \ 666 771 Parser/$(DEPDIR)/$(am__dirstamp) 667 772 ResolvExpr/$(am__dirstamp): … … 721 826 ResolvExpr/$(am__dirstamp) \ 722 827 ResolvExpr/$(DEPDIR)/$(am__dirstamp) 828 ResolvExpr/driver_cfa_cpp-CurrentObject.$(OBJEXT): \ 829 ResolvExpr/$(am__dirstamp) \ 830 ResolvExpr/$(DEPDIR)/$(am__dirstamp) 723 831 SymTab/$(am__dirstamp): 724 832 @$(MKDIR_P) SymTab … … 740 848 SymTab/$(DEPDIR)/$(am__dirstamp) 741 849 SymTab/driver_cfa_cpp-Autogen.$(OBJEXT): SymTab/$(am__dirstamp) \ 850 SymTab/$(DEPDIR)/$(am__dirstamp) 851 SymTab/driver_cfa_cpp-TreeStruct.$(OBJEXT): SymTab/$(am__dirstamp) \ 742 852 SymTab/$(DEPDIR)/$(am__dirstamp) 743 853 SynTree/$(am__dirstamp): … … 834 944 @$(MKDIR_P) driver 835 945 @: > driver/$(am__dirstamp) 946 836 947 driver/cfa-cpp$(EXEEXT): $(driver_cfa_cpp_OBJECTS) $(driver_cfa_cpp_DEPENDENCIES) $(EXTRA_driver_cfa_cpp_DEPENDENCIES) driver/$(am__dirstamp) 837 948 @rm -f driver/cfa-cpp$(EXEEXT) … … 840 951 mostlyclean-compile: 841 952 -rm -f *.$(OBJEXT) 842 -rm -f CodeGen/driver_cfa_cpp-CodeGenerator.$(OBJEXT) 843 -rm -f CodeGen/driver_cfa_cpp-FixMain.$(OBJEXT) 844 -rm -f CodeGen/driver_cfa_cpp-FixNames.$(OBJEXT) 845 -rm -f CodeGen/driver_cfa_cpp-GenType.$(OBJEXT) 846 -rm -f CodeGen/driver_cfa_cpp-Generate.$(OBJEXT) 847 -rm -f CodeGen/driver_cfa_cpp-OperatorTable.$(OBJEXT) 848 -rm -f CodeTools/driver_cfa_cpp-DeclStats.$(OBJEXT) 849 -rm -f CodeTools/driver_cfa_cpp-TrackLoc.$(OBJEXT) 850 -rm -f Common/driver_cfa_cpp-Assert.$(OBJEXT) 851 -rm -f Common/driver_cfa_cpp-DebugMalloc.$(OBJEXT) 852 -rm -f Common/driver_cfa_cpp-SemanticError.$(OBJEXT) 853 -rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT) 854 -rm -f Concurrency/driver_cfa_cpp-Keywords.$(OBJEXT) 855 -rm -f ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) 856 -rm -f ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT) 857 -rm -f ControlStruct/driver_cfa_cpp-LabelGenerator.$(OBJEXT) 858 -rm -f ControlStruct/driver_cfa_cpp-MLEMutator.$(OBJEXT) 859 -rm -f ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT) 860 -rm -f GenPoly/driver_cfa_cpp-Box.$(OBJEXT) 861 -rm -f GenPoly/driver_cfa_cpp-CopyParams.$(OBJEXT) 862 -rm -f GenPoly/driver_cfa_cpp-DeclMutator.$(OBJEXT) 863 -rm -f GenPoly/driver_cfa_cpp-FindFunction.$(OBJEXT) 864 -rm -f GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) 865 -rm -f GenPoly/driver_cfa_cpp-InstantiateGeneric.$(OBJEXT) 866 -rm -f GenPoly/driver_cfa_cpp-Lvalue.$(OBJEXT) 867 -rm -f GenPoly/driver_cfa_cpp-PolyMutator.$(OBJEXT) 868 -rm -f GenPoly/driver_cfa_cpp-ScrubTyVars.$(OBJEXT) 869 -rm -f GenPoly/driver_cfa_cpp-Specialize.$(OBJEXT) 870 -rm -f InitTweak/driver_cfa_cpp-FixGlobalInit.$(OBJEXT) 871 -rm -f InitTweak/driver_cfa_cpp-FixInit.$(OBJEXT) 872 -rm -f InitTweak/driver_cfa_cpp-GenInit.$(OBJEXT) 873 -rm -f InitTweak/driver_cfa_cpp-InitTweak.$(OBJEXT) 874 -rm -f Parser/driver_cfa_cpp-DeclarationNode.$(OBJEXT) 875 -rm -f Parser/driver_cfa_cpp-ExpressionNode.$(OBJEXT) 876 -rm -f Parser/driver_cfa_cpp-InitializerNode.$(OBJEXT) 877 -rm -f Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT) 878 -rm -f Parser/driver_cfa_cpp-ParseNode.$(OBJEXT) 879 -rm -f Parser/driver_cfa_cpp-StatementNode.$(OBJEXT) 880 -rm -f Parser/driver_cfa_cpp-TypeData.$(OBJEXT) 881 -rm -f Parser/driver_cfa_cpp-TypedefTable.$(OBJEXT) 882 -rm -f Parser/driver_cfa_cpp-lex.$(OBJEXT) 883 -rm -f Parser/driver_cfa_cpp-parser.$(OBJEXT) 884 -rm -f Parser/driver_cfa_cpp-parseutility.$(OBJEXT) 885 -rm -f ResolvExpr/driver_cfa_cpp-AdjustExprType.$(OBJEXT) 886 -rm -f ResolvExpr/driver_cfa_cpp-Alternative.$(OBJEXT) 887 -rm -f ResolvExpr/driver_cfa_cpp-AlternativeFinder.$(OBJEXT) 888 -rm -f ResolvExpr/driver_cfa_cpp-AlternativePrinter.$(OBJEXT) 889 -rm -f ResolvExpr/driver_cfa_cpp-CastCost.$(OBJEXT) 890 -rm -f ResolvExpr/driver_cfa_cpp-CommonType.$(OBJEXT) 891 -rm -f ResolvExpr/driver_cfa_cpp-ConversionCost.$(OBJEXT) 892 -rm -f ResolvExpr/driver_cfa_cpp-FindOpenVars.$(OBJEXT) 893 -rm -f ResolvExpr/driver_cfa_cpp-Occurs.$(OBJEXT) 894 -rm -f ResolvExpr/driver_cfa_cpp-PolyCost.$(OBJEXT) 895 -rm -f ResolvExpr/driver_cfa_cpp-PtrsAssignable.$(OBJEXT) 896 -rm -f ResolvExpr/driver_cfa_cpp-PtrsCastable.$(OBJEXT) 897 -rm -f ResolvExpr/driver_cfa_cpp-RenameVars.$(OBJEXT) 898 -rm -f ResolvExpr/driver_cfa_cpp-ResolveTypeof.$(OBJEXT) 899 -rm -f ResolvExpr/driver_cfa_cpp-Resolver.$(OBJEXT) 900 -rm -f ResolvExpr/driver_cfa_cpp-TypeEnvironment.$(OBJEXT) 901 -rm -f ResolvExpr/driver_cfa_cpp-Unify.$(OBJEXT) 902 -rm -f SymTab/driver_cfa_cpp-Autogen.$(OBJEXT) 903 -rm -f SymTab/driver_cfa_cpp-FixFunction.$(OBJEXT) 904 -rm -f SymTab/driver_cfa_cpp-ImplementationType.$(OBJEXT) 905 -rm -f SymTab/driver_cfa_cpp-Indexer.$(OBJEXT) 906 -rm -f SymTab/driver_cfa_cpp-Mangler.$(OBJEXT) 907 -rm -f SymTab/driver_cfa_cpp-TypeEquality.$(OBJEXT) 908 -rm -f SymTab/driver_cfa_cpp-Validate.$(OBJEXT) 909 -rm -f SynTree/driver_cfa_cpp-AddStmtVisitor.$(OBJEXT) 910 -rm -f SynTree/driver_cfa_cpp-AddressExpr.$(OBJEXT) 911 -rm -f SynTree/driver_cfa_cpp-AggregateDecl.$(OBJEXT) 912 -rm -f SynTree/driver_cfa_cpp-ApplicationExpr.$(OBJEXT) 913 -rm -f SynTree/driver_cfa_cpp-ArrayType.$(OBJEXT) 914 -rm -f SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) 915 -rm -f SynTree/driver_cfa_cpp-Attribute.$(OBJEXT) 916 -rm -f SynTree/driver_cfa_cpp-BasicType.$(OBJEXT) 917 -rm -f SynTree/driver_cfa_cpp-CommaExpr.$(OBJEXT) 918 -rm -f SynTree/driver_cfa_cpp-CompoundStmt.$(OBJEXT) 919 -rm -f SynTree/driver_cfa_cpp-Constant.$(OBJEXT) 920 -rm -f SynTree/driver_cfa_cpp-DeclStmt.$(OBJEXT) 921 -rm -f SynTree/driver_cfa_cpp-Declaration.$(OBJEXT) 922 -rm -f SynTree/driver_cfa_cpp-DeclarationWithType.$(OBJEXT) 923 -rm -f SynTree/driver_cfa_cpp-Expression.$(OBJEXT) 924 -rm -f SynTree/driver_cfa_cpp-FunctionDecl.$(OBJEXT) 925 -rm -f SynTree/driver_cfa_cpp-FunctionType.$(OBJEXT) 926 -rm -f SynTree/driver_cfa_cpp-Initializer.$(OBJEXT) 927 -rm -f SynTree/driver_cfa_cpp-Mutator.$(OBJEXT) 928 -rm -f SynTree/driver_cfa_cpp-NamedTypeDecl.$(OBJEXT) 929 -rm -f SynTree/driver_cfa_cpp-ObjectDecl.$(OBJEXT) 930 -rm -f SynTree/driver_cfa_cpp-PointerType.$(OBJEXT) 931 -rm -f SynTree/driver_cfa_cpp-ReferenceToType.$(OBJEXT) 932 -rm -f SynTree/driver_cfa_cpp-Statement.$(OBJEXT) 933 -rm -f SynTree/driver_cfa_cpp-TupleExpr.$(OBJEXT) 934 -rm -f SynTree/driver_cfa_cpp-TupleType.$(OBJEXT) 935 -rm -f SynTree/driver_cfa_cpp-Type.$(OBJEXT) 936 -rm -f SynTree/driver_cfa_cpp-TypeDecl.$(OBJEXT) 937 -rm -f SynTree/driver_cfa_cpp-TypeExpr.$(OBJEXT) 938 -rm -f SynTree/driver_cfa_cpp-TypeSubstitution.$(OBJEXT) 939 -rm -f SynTree/driver_cfa_cpp-TypeofType.$(OBJEXT) 940 -rm -f SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT) 941 -rm -f SynTree/driver_cfa_cpp-VarExprReplacer.$(OBJEXT) 942 -rm -f SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) 943 -rm -f SynTree/driver_cfa_cpp-VoidType.$(OBJEXT) 944 -rm -f SynTree/driver_cfa_cpp-ZeroOneType.$(OBJEXT) 945 -rm -f Tuples/driver_cfa_cpp-Explode.$(OBJEXT) 946 -rm -f Tuples/driver_cfa_cpp-TupleAssignment.$(OBJEXT) 947 -rm -f Tuples/driver_cfa_cpp-TupleExpansion.$(OBJEXT) 953 -rm -f CodeGen/*.$(OBJEXT) 954 -rm -f CodeTools/*.$(OBJEXT) 955 -rm -f Common/*.$(OBJEXT) 956 -rm -f Concurrency/*.$(OBJEXT) 957 -rm -f ControlStruct/*.$(OBJEXT) 958 -rm -f GenPoly/*.$(OBJEXT) 959 -rm -f InitTweak/*.$(OBJEXT) 960 -rm -f Parser/*.$(OBJEXT) 961 -rm -f ResolvExpr/*.$(OBJEXT) 962 -rm -f SymTab/*.$(OBJEXT) 963 -rm -f SynTree/*.$(OBJEXT) 964 -rm -f Tuples/*.$(OBJEXT) 948 965 949 966 distclean-compile: … … 965 982 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@ 966 983 @AMDEP_TRUE@@am__include@ @am__quote@Concurrency/$(DEPDIR)/driver_cfa_cpp-Keywords.Po@am__quote@ 984 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po@am__quote@ 967 985 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ForExprMutator.Po@am__quote@ 968 986 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelFixer.Po@am__quote@ … … 994 1012 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-lex.Po@am__quote@ 995 1013 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parser.Po@am__quote@ 996 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parse utility.Po@am__quote@1014 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Po@am__quote@ 997 1015 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-AdjustExprType.Po@am__quote@ 998 1016 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-Alternative.Po@am__quote@ … … 1002 1020 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-CommonType.Po@am__quote@ 1003 1021 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-ConversionCost.Po@am__quote@ 1022 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-CurrentObject.Po@am__quote@ 1004 1023 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-FindOpenVars.Po@am__quote@ 1005 1024 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-Occurs.Po@am__quote@ … … 1017 1036 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Po@am__quote@ 1018 1037 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Mangler.Po@am__quote@ 1038 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Po@am__quote@ 1019 1039 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-TypeEquality.Po@am__quote@ 1020 1040 @AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/driver_cfa_cpp-Validate.Po@am__quote@ … … 1355 1375 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ForExprMutator.obj `if test -f 'ControlStruct/ForExprMutator.cc'; then $(CYGPATH_W) 'ControlStruct/ForExprMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ForExprMutator.cc'; fi` 1356 1376 1377 ControlStruct/driver_cfa_cpp-ExceptTranslate.o: ControlStruct/ExceptTranslate.cc 1378 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ExceptTranslate.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.o `test -f 'ControlStruct/ExceptTranslate.cc' || echo '$(srcdir)/'`ControlStruct/ExceptTranslate.cc 1379 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po 1380 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ControlStruct/ExceptTranslate.cc' object='ControlStruct/driver_cfa_cpp-ExceptTranslate.o' libtool=no @AMDEPBACKSLASH@ 1381 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1382 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.o `test -f 'ControlStruct/ExceptTranslate.cc' || echo '$(srcdir)/'`ControlStruct/ExceptTranslate.cc 1383 1384 ControlStruct/driver_cfa_cpp-ExceptTranslate.obj: ControlStruct/ExceptTranslate.cc 1385 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ExceptTranslate.obj -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.obj `if test -f 'ControlStruct/ExceptTranslate.cc'; then $(CYGPATH_W) 'ControlStruct/ExceptTranslate.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ExceptTranslate.cc'; fi` 1386 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po 1387 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ControlStruct/ExceptTranslate.cc' object='ControlStruct/driver_cfa_cpp-ExceptTranslate.obj' libtool=no @AMDEPBACKSLASH@ 1388 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1389 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.obj `if test -f 'ControlStruct/ExceptTranslate.cc'; then $(CYGPATH_W) 'ControlStruct/ExceptTranslate.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ExceptTranslate.cc'; fi` 1390 1357 1391 GenPoly/driver_cfa_cpp-Box.o: GenPoly/Box.cc 1358 1392 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-Box.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-Box.Tpo -c -o GenPoly/driver_cfa_cpp-Box.o `test -f 'GenPoly/Box.cc' || echo '$(srcdir)/'`GenPoly/Box.cc … … 1691 1725 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-LinkageSpec.obj `if test -f 'Parser/LinkageSpec.cc'; then $(CYGPATH_W) 'Parser/LinkageSpec.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/LinkageSpec.cc'; fi` 1692 1726 1693 Parser/driver_cfa_cpp-parse utility.o: Parser/parseutility.cc1694 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parse utility.o -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo -c -o Parser/driver_cfa_cpp-parseutility.o `test -f 'Parser/parseutility.cc' || echo '$(srcdir)/'`Parser/parseutility.cc1695 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parse utility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Po1696 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser/parse utility.cc' object='Parser/driver_cfa_cpp-parseutility.o' libtool=no @AMDEPBACKSLASH@1697 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1698 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parse utility.o `test -f 'Parser/parseutility.cc' || echo '$(srcdir)/'`Parser/parseutility.cc1699 1700 Parser/driver_cfa_cpp-parse utility.obj: Parser/parseutility.cc1701 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parse utility.obj -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo -c -o Parser/driver_cfa_cpp-parseutility.obj `if test -f 'Parser/parseutility.cc'; then $(CYGPATH_W) 'Parser/parseutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parseutility.cc'; fi`1702 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parse utility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Po1703 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser/parse utility.cc' object='Parser/driver_cfa_cpp-parseutility.obj' libtool=no @AMDEPBACKSLASH@1704 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1705 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parse utility.obj `if test -f 'Parser/parseutility.cc'; then $(CYGPATH_W) 'Parser/parseutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parseutility.cc'; fi`1727 Parser/driver_cfa_cpp-parserutility.o: Parser/parserutility.cc 1728 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parserutility.o -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo -c -o Parser/driver_cfa_cpp-parserutility.o `test -f 'Parser/parserutility.cc' || echo '$(srcdir)/'`Parser/parserutility.cc 1729 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Po 1730 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser/parserutility.cc' object='Parser/driver_cfa_cpp-parserutility.o' libtool=no @AMDEPBACKSLASH@ 1731 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1732 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parserutility.o `test -f 'Parser/parserutility.cc' || echo '$(srcdir)/'`Parser/parserutility.cc 1733 1734 Parser/driver_cfa_cpp-parserutility.obj: Parser/parserutility.cc 1735 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parserutility.obj -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo -c -o Parser/driver_cfa_cpp-parserutility.obj `if test -f 'Parser/parserutility.cc'; then $(CYGPATH_W) 'Parser/parserutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parserutility.cc'; fi` 1736 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Po 1737 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser/parserutility.cc' object='Parser/driver_cfa_cpp-parserutility.obj' libtool=no @AMDEPBACKSLASH@ 1738 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1739 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parserutility.obj `if test -f 'Parser/parserutility.cc'; then $(CYGPATH_W) 'Parser/parserutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parserutility.cc'; fi` 1706 1740 1707 1741 ResolvExpr/driver_cfa_cpp-AlternativeFinder.o: ResolvExpr/AlternativeFinder.cc … … 1943 1977 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ResolvExpr/driver_cfa_cpp-TypeEnvironment.obj `if test -f 'ResolvExpr/TypeEnvironment.cc'; then $(CYGPATH_W) 'ResolvExpr/TypeEnvironment.cc'; else $(CYGPATH_W) '$(srcdir)/ResolvExpr/TypeEnvironment.cc'; fi` 1944 1978 1979 ResolvExpr/driver_cfa_cpp-CurrentObject.o: ResolvExpr/CurrentObject.cc 1980 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ResolvExpr/driver_cfa_cpp-CurrentObject.o -MD -MP -MF ResolvExpr/$(DEPDIR)/driver_cfa_cpp-CurrentObject.Tpo -c -o ResolvExpr/driver_cfa_cpp-CurrentObject.o `test -f 'ResolvExpr/CurrentObject.cc' || echo '$(srcdir)/'`ResolvExpr/CurrentObject.cc 1981 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ResolvExpr/$(DEPDIR)/driver_cfa_cpp-CurrentObject.Tpo ResolvExpr/$(DEPDIR)/driver_cfa_cpp-CurrentObject.Po 1982 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ResolvExpr/CurrentObject.cc' object='ResolvExpr/driver_cfa_cpp-CurrentObject.o' libtool=no @AMDEPBACKSLASH@ 1983 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1984 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ResolvExpr/driver_cfa_cpp-CurrentObject.o `test -f 'ResolvExpr/CurrentObject.cc' || echo '$(srcdir)/'`ResolvExpr/CurrentObject.cc 1985 1986 ResolvExpr/driver_cfa_cpp-CurrentObject.obj: ResolvExpr/CurrentObject.cc 1987 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ResolvExpr/driver_cfa_cpp-CurrentObject.obj -MD -MP -MF ResolvExpr/$(DEPDIR)/driver_cfa_cpp-CurrentObject.Tpo -c -o ResolvExpr/driver_cfa_cpp-CurrentObject.obj `if test -f 'ResolvExpr/CurrentObject.cc'; then $(CYGPATH_W) 'ResolvExpr/CurrentObject.cc'; else $(CYGPATH_W) '$(srcdir)/ResolvExpr/CurrentObject.cc'; fi` 1988 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ResolvExpr/$(DEPDIR)/driver_cfa_cpp-CurrentObject.Tpo ResolvExpr/$(DEPDIR)/driver_cfa_cpp-CurrentObject.Po 1989 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ResolvExpr/CurrentObject.cc' object='ResolvExpr/driver_cfa_cpp-CurrentObject.obj' libtool=no @AMDEPBACKSLASH@ 1990 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1991 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ResolvExpr/driver_cfa_cpp-CurrentObject.obj `if test -f 'ResolvExpr/CurrentObject.cc'; then $(CYGPATH_W) 'ResolvExpr/CurrentObject.cc'; else $(CYGPATH_W) '$(srcdir)/ResolvExpr/CurrentObject.cc'; fi` 1992 1945 1993 SymTab/driver_cfa_cpp-Indexer.o: SymTab/Indexer.cc 1946 1994 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-Indexer.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-Indexer.Tpo -c -o SymTab/driver_cfa_cpp-Indexer.o `test -f 'SymTab/Indexer.cc' || echo '$(srcdir)/'`SymTab/Indexer.cc … … 2041 2089 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-Autogen.obj `if test -f 'SymTab/Autogen.cc'; then $(CYGPATH_W) 'SymTab/Autogen.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/Autogen.cc'; fi` 2042 2090 2091 SymTab/driver_cfa_cpp-TreeStruct.o: SymTab/TreeStruct.cc 2092 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-TreeStruct.o -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Tpo -c -o SymTab/driver_cfa_cpp-TreeStruct.o `test -f 'SymTab/TreeStruct.cc' || echo '$(srcdir)/'`SymTab/TreeStruct.cc 2093 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Po 2094 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SymTab/TreeStruct.cc' object='SymTab/driver_cfa_cpp-TreeStruct.o' libtool=no @AMDEPBACKSLASH@ 2095 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2096 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-TreeStruct.o `test -f 'SymTab/TreeStruct.cc' || echo '$(srcdir)/'`SymTab/TreeStruct.cc 2097 2098 SymTab/driver_cfa_cpp-TreeStruct.obj: SymTab/TreeStruct.cc 2099 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SymTab/driver_cfa_cpp-TreeStruct.obj -MD -MP -MF SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Tpo -c -o SymTab/driver_cfa_cpp-TreeStruct.obj `if test -f 'SymTab/TreeStruct.cc'; then $(CYGPATH_W) 'SymTab/TreeStruct.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/TreeStruct.cc'; fi` 2100 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Tpo SymTab/$(DEPDIR)/driver_cfa_cpp-TreeStruct.Po 2101 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SymTab/TreeStruct.cc' object='SymTab/driver_cfa_cpp-TreeStruct.obj' libtool=no @AMDEPBACKSLASH@ 2102 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2103 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SymTab/driver_cfa_cpp-TreeStruct.obj `if test -f 'SymTab/TreeStruct.cc'; then $(CYGPATH_W) 'SymTab/TreeStruct.cc'; else $(CYGPATH_W) '$(srcdir)/SymTab/TreeStruct.cc'; fi` 2104 2043 2105 SynTree/driver_cfa_cpp-Type.o: SynTree/Type.cc 2044 2106 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-Type.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-Type.Tpo -c -o SynTree/driver_cfa_cpp-Type.o `test -f 'SynTree/Type.cc' || echo '$(srcdir)/'`SynTree/Type.cc … … 2591 2653 2592 2654 .yy.cc: 2593 $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE) 2594 2595 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 2596 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 2597 unique=`for i in $$list; do \ 2598 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 2599 done | \ 2600 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 2601 END { if (nonempty) { for (i in files) print i; }; }'`; \ 2602 mkid -fID $$unique 2603 tags: TAGS 2604 2605 TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 2606 $(TAGS_FILES) $(LISP) 2655 $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) 2656 2657 ID: $(am__tagged_files) 2658 $(am__define_uniq_tagged_files); mkid -fID $$unique 2659 tags: tags-am 2660 TAGS: tags 2661 2662 tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 2607 2663 set x; \ 2608 2664 here=`pwd`; \ 2609 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 2610 unique=`for i in $$list; do \ 2611 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 2612 done | \ 2613 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 2614 END { if (nonempty) { for (i in files) print i; }; }'`; \ 2665 $(am__define_uniq_tagged_files); \ 2615 2666 shift; \ 2616 2667 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ … … 2624 2675 fi; \ 2625 2676 fi 2626 ctags: CTAGS 2627 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 2628 $(TAGS_FILES) $(LISP) 2629 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 2630 unique=`for i in $$list; do \ 2631 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 2632 done | \ 2633 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 2634 END { if (nonempty) { for (i in files) print i; }; }'`; \ 2677 ctags: ctags-am 2678 2679 CTAGS: ctags 2680 ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 2681 $(am__define_uniq_tagged_files); \ 2635 2682 test -z "$(CTAGS_ARGS)$$unique" \ 2636 2683 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ … … 2641 2688 && $(am__cd) $(top_srcdir) \ 2642 2689 && gtags -i $(GTAGS_ARGS) "$$here" 2690 cscopelist: cscopelist-am 2691 2692 cscopelist-am: $(am__tagged_files) 2693 list='$(am__tagged_files)'; \ 2694 case "$(srcdir)" in \ 2695 [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ 2696 *) sdir=$(subdir)/$(srcdir) ;; \ 2697 esac; \ 2698 for i in $$list; do \ 2699 if test -f "$$i"; then \ 2700 echo "$(subdir)/$$i"; \ 2701 else \ 2702 echo "$$sdir/$$i"; \ 2703 fi; \ 2704 done >> $(top_builddir)/cscope.files 2643 2705 2644 2706 distclean-tags: … … 2741 2803 -rm -f Parser/lex.cc 2742 2804 -rm -f Parser/parser.cc 2743 -rm -f Parser/parser.h 2805 -rm -f Parser/parser.hh 2744 2806 -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) 2745 2807 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) … … 2815 2877 .MAKE: all check install install-am install-strip 2816 2878 2817 .PHONY: CTAGS GTAGS all all-am check check-am clean \ 2818 clean-cfa_cpplibPROGRAMS clean-generic ctags distclean \ 2819 distclean-compile distclean-generic distclean-tags distdir dvi \ 2820 dvi-am html html-am info info-am install install-am \ 2821 install-cfa_cpplibPROGRAMS install-data install-data-am \ 2822 install-dvi install-dvi-am install-exec install-exec-am \ 2823 install-html install-html-am install-info install-info-am \ 2824 install-man install-pdf install-pdf-am install-ps \ 2825 install-ps-am install-strip installcheck installcheck-am \ 2826 installdirs maintainer-clean maintainer-clean-generic \ 2827 mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ 2828 ps ps-am tags uninstall uninstall-am \ 2829 uninstall-cfa_cpplibPROGRAMS 2879 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ 2880 clean-cfa_cpplibPROGRAMS clean-generic cscopelist-am ctags \ 2881 ctags-am distclean distclean-compile distclean-generic \ 2882 distclean-tags distdir dvi dvi-am html html-am info info-am \ 2883 install install-am install-cfa_cpplibPROGRAMS install-data \ 2884 install-data-am install-dvi install-dvi-am install-exec \ 2885 install-exec-am install-html install-html-am install-info \ 2886 install-info-am install-man install-pdf install-pdf-am \ 2887 install-ps install-ps-am install-strip installcheck \ 2888 installcheck-am installdirs maintainer-clean \ 2889 maintainer-clean-generic mostlyclean mostlyclean-compile \ 2890 mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ 2891 uninstall-am uninstall-cfa_cpplibPROGRAMS 2892 2893 .PRECIOUS: Makefile 2830 2894 2831 2895 -
src/Parser/DeclarationNode.cc
rfea3faa rb826e6b 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 12:34:05 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Mar 17 15:46:33201713 // Update Count : 10 1811 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Jul 14 16:55:00 2017 13 // Update Count : 1020 14 14 // 15 15 … … 253 253 newnode->type->aggregate.fields = fields; 254 254 newnode->type->aggregate.body = body; 255 newnode->type->aggregate.tagged = false; 256 newnode->type->aggregate.parent = nullptr; 255 257 return newnode; 256 258 } // DeclarationNode::newAggregate … … 273 275 return newnode; 274 276 } // DeclarationNode::newEnumConstant 277 278 DeclarationNode * DeclarationNode::newTreeStruct( Aggregate kind, const string * name, const string * parent, ExpressionNode * actuals, DeclarationNode * fields, bool body ) { 279 assert( name ); 280 DeclarationNode * newnode = new DeclarationNode; 281 newnode->type = new TypeData( TypeData::Aggregate ); 282 newnode->type->aggregate.kind = kind; 283 newnode->type->aggregate.name = name; 284 newnode->type->aggregate.actuals = actuals; 285 newnode->type->aggregate.fields = fields; 286 newnode->type->aggregate.body = body; 287 newnode->type->aggregate.tagged = true; 288 newnode->type->aggregate.parent = parent; 289 return newnode; 290 } // DeclarationNode::newTreeStruct 275 291 276 292 DeclarationNode * DeclarationNode::newName( string * name ) { … … 1063 1079 case TypeData::Enum: 1064 1080 case TypeData::Aggregate: { 1065 ReferenceToType * ret = buildComAggInst( type, attributes );1081 ReferenceToType * ret = buildComAggInst( type, attributes, linkage ); 1066 1082 buildList( type->aggregate.actuals, ret->get_parameters() ); 1067 1083 return ret; -
src/Parser/ExpressionNode.cc
rfea3faa rb826e6b 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:17:07 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Jun 21 16:44:46201713 // Update Count : 5 4111 // Last Modified By : Andrew Beach 12 // Last Modified On : Tus Jul 18 10:08:00 2017 13 // Update Count : 550 14 14 // 15 15 … … 27 27 #include "SynTree/Declaration.h" 28 28 #include "Common/UnimplementedError.h" 29 #include "parse utility.h"29 #include "parserutility.h" 30 30 #include "Common/utility.h" 31 31 … … 46 46 // type. 47 47 48 Type::Qualifiers emptyQualifiers; // no qualifiers on constants48 Type::Qualifiers noQualifiers; // no qualifiers on constants 49 49 50 50 static inline bool checkU( char c ) { return c == 'u' || c == 'U'; } … … 118 118 } // if 119 119 120 Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[Unsigned][size] ), str, v ) );120 Expression * ret = new ConstantExpr( Constant( new BasicType( noQualifiers, kind[Unsigned][size] ), str, v ) ); 121 121 delete &str; // created by lex 122 122 return ret; … … 153 153 } // if 154 154 155 Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, kind[complx][size] ), str, v ) );155 Expression * ret = new ConstantExpr( Constant( new BasicType( noQualifiers, kind[complx][size] ), str, v ) ); 156 156 delete &str; // created by lex 157 157 return ret; … … 159 159 160 160 Expression *build_constantChar( const std::string & str ) { 161 Expression * ret = new ConstantExpr( Constant( new BasicType( emptyQualifiers, BasicType::Char ), str, (unsigned long long int)(unsigned char)str[1] ) );161 Expression * ret = new ConstantExpr( Constant( new BasicType( noQualifiers, BasicType::Char ), str, (unsigned long long int)(unsigned char)str[1] ) ); 162 162 delete &str; // created by lex 163 163 return ret; … … 166 166 ConstantExpr *build_constantStr( const std::string & str ) { 167 167 // string should probably be a primitive type 168 ArrayType *at = new ArrayType( emptyQualifiers, new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char ),168 ArrayType *at = new ArrayType( noQualifiers, new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char ), 169 169 new ConstantExpr( Constant::from_ulong( str.size() + 1 - 2 ) ), // +1 for '\0' and -2 for '"' 170 170 false, false ); … … 176 176 177 177 Expression *build_constantZeroOne( const std::string & str ) { 178 Expression * ret = new ConstantExpr( Constant( str == "0" ? (Type *)new ZeroType( emptyQualifiers ) : (Type*)new OneType( emptyQualifiers ), str,178 Expression * ret = new ConstantExpr( Constant( str == "0" ? (Type *)new ZeroType( noQualifiers ) : (Type*)new OneType( noQualifiers ), str, 179 179 str == "0" ? (unsigned long long int)0 : (unsigned long long int)1 ) ); 180 180 delete &str; // created by lex … … 231 231 } 232 232 233 // Must harmonize with OperKinds. 233 234 static const char *OperName[] = { 234 235 // diadic 235 "SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "? *?", "?/?", "?%?", "||", "&&",236 "SizeOf", "AlignOf", "OffsetOf", "?+?", "?-?", "?\\?", "?*?", "?/?", "?%?", "||", "&&", 236 237 "?|?", "?&?", "?^?", "Cast", "?<<?", "?>>?", "?<?", "?>?", "?<=?", "?>=?", "?==?", "?!=?", 237 "?=?", "?@=?", "? *=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?",238 "?=?", "?@=?", "?\\=?", "?*=?", "?/=?", "?%=?", "?+=?", "?-=?", "?<<=?", "?>>=?", "?&=?", "?^=?", "?|=?", 238 239 "?[?]", "...", 239 240 // monadic -
src/Parser/InitializerNode.cc
rfea3faa rb826e6b 74 74 75 75 InitializerNode *moreInit; 76 if ( get_next() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) != 0) )76 if ( (moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) ) { 77 77 moreInit->printOneLine( os ); 78 } 78 79 } 79 80 80 81 Initializer *InitializerNode::build() const { 81 82 if ( aggregate ) { 83 // steal designators from children 84 std::list< Designation * > designlist; 85 InitializerNode * child = next_init(); 86 for ( ; child != nullptr; child = dynamic_cast< InitializerNode * >( child->get_next() ) ) { 87 std::list< Expression * > desList; 88 buildList< Expression, ExpressionNode >( child->designator, desList ); 89 designlist.push_back( new Designation( desList ) ); 90 } // for 82 91 std::list< Initializer * > initlist; 83 92 buildList< Initializer, InitializerNode >( next_init(), initlist ); 84 85 std::list< Expression * > designlist;86 87 if ( designator != 0 ) {88 buildList< Expression, ExpressionNode >( designator, designlist );89 } // if90 91 93 return new ListInit( initlist, designlist, maybeConstructed ); 92 94 } else { 93 std::list< Expression * > designators; 94 95 if ( designator != 0 ) 96 buildList< Expression, ExpressionNode >( designator, designators ); 97 98 if ( get_expression() != 0) 99 return new SingleInit( maybeBuild< Expression >( get_expression() ), designators, maybeConstructed ); 95 if ( get_expression() != 0) { 96 return new SingleInit( maybeBuild< Expression >( get_expression() ), maybeConstructed ); 97 } 100 98 } // if 101 102 99 return 0; 103 100 } -
src/Parser/LinkageSpec.cc
rfea3faa rb826e6b 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:22:09 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Sun Oct 2 23:16:21 201613 // Update Count : 2 311 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Jul 7 11:11:00 2017 13 // Update Count : 25 14 14 // 15 15 … … 22 22 #include "Common/SemanticError.h" 23 23 24 LinkageSpec::Spec LinkageSpec::linkageCheck( const string * spec ) { 24 namespace LinkageSpec { 25 26 Spec linkageCheck( const string * spec ) { 27 assert( spec ); 25 28 unique_ptr<const string> guard( spec ); // allocated by lexer 26 29 if ( *spec == "\"Cforall\"" ) { … … 28 31 } else if ( *spec == "\"C\"" ) { 29 32 return C; 33 } else if ( *spec == "\"BuiltinC\"" ) { 34 return BuiltinC; 30 35 } else { 31 36 throw SemanticError( "Invalid linkage specifier " + *spec ); … … 33 38 } 34 39 35 string LinkageSpec::linkageName( LinkageSpec::Spec linkage ) { 36 assert( 0 <= linkage && linkage < LinkageSpec::NoOfSpecs ); 37 static const char *linkageKinds[LinkageSpec::NoOfSpecs] = { 38 "intrinsic", "Cforall", "C", "automatically generated", "compiler built-in", 39 }; 40 return linkageKinds[linkage]; 40 Spec linkageUpdate( Spec old_spec, const string * cmd ) { 41 assert( cmd ); 42 unique_ptr<const string> guard( cmd ); // allocated by lexer 43 if ( *cmd == "\"Cforall\"" ) { 44 old_spec.is_mangled = true; 45 return old_spec; 46 } else if ( *cmd == "\"C\"" ) { 47 old_spec.is_mangled = false; 48 return old_spec; 49 } else { 50 throw SemanticError( "Invalid linkage specifier " + *cmd ); 51 } // if 41 52 } 42 53 43 bool LinkageSpec::isDecoratable( Spec spec ) { 44 assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs ); 45 static bool decoratable[LinkageSpec::NoOfSpecs] = { 46 // Intrinsic, Cforall, C, AutoGen, Compiler 47 true, true, false, true, false, 48 }; 49 return decoratable[spec]; 54 std::string linkageName( Spec linkage ) { 55 switch ( linkage ) { 56 case Intrinsic: 57 return "intrinsic"; 58 case C: 59 return "C"; 60 case Cforall: 61 return "Cforall"; 62 case AutoGen: 63 return "autogenerated cfa"; 64 case Compiler: 65 return "compiler built-in"; 66 case BuiltinCFA: 67 return "cfa built-in"; 68 case BuiltinC: 69 return "c built-in"; 70 default: 71 return "<unnamed linkage spec>"; 72 } 50 73 } 51 74 52 bool LinkageSpec::isGeneratable( Spec spec ) { 53 assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs ); 54 static bool generatable[LinkageSpec::NoOfSpecs] = { 55 // Intrinsic, Cforall, C, AutoGen, Compiler 56 true, true, true, true, false, 57 }; 58 return generatable[spec]; 59 } 60 61 bool LinkageSpec::isOverridable( Spec spec ) { 62 assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs ); 63 static bool overridable[LinkageSpec::NoOfSpecs] = { 64 // Intrinsic, Cforall, C, AutoGen, Compiler 65 true, false, false, true, false, 66 }; 67 return overridable[spec]; 68 } 69 70 bool LinkageSpec::isBuiltin( Spec spec ) { 71 assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs ); 72 static bool builtin[LinkageSpec::NoOfSpecs] = { 73 // Intrinsic, Cforall, C, AutoGen, Compiler 74 true, false, false, false, true, 75 }; 76 return builtin[spec]; 77 } 75 } // LinkageSpec 78 76 79 77 // Local Variables: // -
src/Parser/LinkageSpec.h
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // LinkageSpec.h -- 7 // LinkageSpec.h -- 8 8 // 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:24:28 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Sat Oct 1 23:03:17 201613 // Update Count : 1 111 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Jul 7 11:03:00 2017 13 // Update Count : 13 14 14 // 15 15 … … 19 19 #include <string> 20 20 21 struct LinkageSpec { 22 enum Spec { 23 Intrinsic, // C built-in defined in prelude 24 Cforall, // ordinary 25 C, // not overloadable, not mangled 26 AutoGen, // built by translator (struct assignment) 27 Compiler, // gcc internal 28 NoOfSpecs 21 namespace LinkageSpec { 22 // All linkage specs are some combination of these flags: 23 enum { 24 Mangle = 1 << 0, 25 Generate = 1 << 1, 26 Overrideable = 1 << 2, 27 Builtin = 1 << 3, 28 29 NoOfSpecs = 1 << 4, 29 30 }; 30 31 static Spec linkageCheck( const std::string * ); 32 static std::string linkageName( Spec ); 33 34 static bool isDecoratable( Spec ); 35 static bool isGeneratable( Spec ); 36 static bool isOverridable( Spec ); 37 static bool isBuiltin( Spec ); 31 32 union Spec { 33 unsigned int val; 34 struct { 35 bool is_mangled : 1; 36 bool is_generatable : 1; 37 bool is_overridable : 1; 38 bool is_builtin : 1; 39 }; 40 constexpr Spec( unsigned int val ) : val( val ) {} 41 constexpr Spec( Spec const &other ) : val( other.val ) {} 42 // Operators may go here. 43 // Supports == and != 44 constexpr operator unsigned int () const { return val; } 45 }; 46 47 48 Spec linkageCheck( const std::string * ); 49 // Returns the Spec with the given name (limited to C, Cforall & BuiltinC) 50 Spec linkageUpdate( Spec old_spec, const std::string * cmd ); 51 /* If cmd = "C" returns a Spec that is old_spec with is_mangled = false 52 * If cmd = "Cforall" returns old_spec Spec with is_mangled = true 53 */ 54 55 std::string linkageName( Spec ); 56 57 // To Update: LinkageSpec::isXyz( cur_spec ) -> cur_spec.is_xyz 58 inline bool isMangled( Spec spec ) { return spec.is_mangled; } 59 inline bool isGeneratable( Spec spec ) { return spec.is_generatable; } 60 inline bool isOverridable( Spec spec ) { return spec.is_overridable; } 61 inline bool isBuiltin( Spec spec ) { return spec.is_builtin; } 62 63 // Pre-defined flag combinations: 64 // C built-in defined in prelude 65 constexpr Spec const Intrinsic = { Mangle | Generate | Overrideable | Builtin }; 66 // ordinary 67 constexpr Spec const Cforall = { Mangle | Generate }; 68 // not overloadable, not mangled 69 constexpr Spec const C = { Generate }; 70 // built by translator (struct assignment) 71 constexpr Spec const AutoGen = { Mangle | Generate | Overrideable }; 72 // gcc internal 73 constexpr Spec const Compiler = { Builtin }; 74 // mangled builtins 75 constexpr Spec const BuiltinCFA = { Mangle | Generate | Builtin }; 76 // non-mangled builtins 77 constexpr Spec const BuiltinC = { Generate | Builtin }; 38 78 }; 39 79 -
src/Parser/ParseNode.h
rfea3faa rb826e6b 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:28:16 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Mon Jun 12 13:00:00201713 // Update Count : 7 7911 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jul 15 16:00:48 2017 13 // Update Count : 785 14 14 // 15 15 … … 141 141 }; 142 142 143 // Must harmonize with OperName. 143 144 enum class OperKinds { 144 145 // diadic 145 SizeOf, AlignOf, OffsetOf, Plus, Minus, Mul, Div, Mod, Or, And,146 SizeOf, AlignOf, OffsetOf, Plus, Minus, Exp, Mul, Div, Mod, Or, And, 146 147 BitOr, BitAnd, Xor, Cast, LShift, RShift, LThan, GThan, LEThan, GEThan, Eq, Neq, 147 Assign, AtAssn, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn,148 Assign, AtAssn, ExpAssn, MulAssn, DivAssn, ModAssn, PlusAssn, MinusAssn, LSAssn, RSAssn, AndAssn, ERAssn, OrAssn, 148 149 Index, Range, 149 150 // monadic … … 248 249 static DeclarationNode * newAsmStmt( StatementNode * stmt ); // gcc external asm statement 249 250 251 // Perhaps this would best fold into newAggragate. 252 static DeclarationNode * newTreeStruct( Aggregate kind, const std::string * name, const std::string * parent, ExpressionNode * actuals, DeclarationNode * fields, bool body ); 253 250 254 DeclarationNode(); 251 255 ~DeclarationNode(); … … 332 336 333 337 static UniqueName anonymous; 338 339 // Temp to test TreeStruct 340 const std::string * parent_name; 334 341 }; // DeclarationNode 335 342 -
src/Parser/ParserTypes.h
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // lex.h --7 // parser.hh -- 8 8 // 9 9 // Author : Peter A. Buhr 10 10 // Created On : Sat Sep 22 08:58:10 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 21 11:28:47 201613 // Update Count : 34 712 // Last Modified On : Wed Jun 28 22:10:17 2017 13 // Update Count : 349 14 14 // 15 15 16 #ifndef PARSER_ LEX_H17 #define PARSER_ LEX_H16 #ifndef PARSER_HH 17 #define PARSER_HH 18 18 19 19 int yylex(); … … 42 42 }; // Token 43 43 44 #endif // PARSER_ LEX_H44 #endif // PARSER_HH 45 45 46 46 // Local Variables: // -
src/Parser/StatementNode.cc
rfea3faa rb826e6b 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 14:59:41 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Mon Jun 12 13:03:00201713 // Update Count : 3 2911 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jul 11 21:23:15 2017 13 // Update Count : 331 14 14 // 15 15 … … 21 21 #include "SynTree/Statement.h" 22 22 #include "SynTree/Expression.h" 23 #include "parse utility.h"23 #include "parserutility.h" 24 24 #include "Common/utility.h" 25 25 … … 93 93 std::list< Statement * > branches; 94 94 buildMoveList< Statement, StatementNode >( stmt, branches ); 95 assert( branches.size() >= 0 ); // size== 0 for switch (...) {}, i.e., no declaration or statements95 // branches.size() == 0 for switch (...) {}, i.e., no declaration or statements 96 96 return new SwitchStmt( noLabels, maybeMoveBuild< Expression >(ctl), branches ); 97 97 } -
src/Parser/TypeData.cc
rfea3faa rb826e6b 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 15:12:51 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Mar 17 15:52:43201713 // Update Count : 56 311 // Last Modified By : Andrew Beach 12 // Last Modified On : Tus Jul 18 10:10:00 2017 13 // Update Count : 566 14 14 // 15 15 … … 63 63 aggregate.fields = nullptr; 64 64 aggregate.body = false; 65 aggregate.tagged = false; 66 aggregate.parent = nullptr; 65 67 break; 66 68 case AggregateInst: … … 121 123 delete aggregate.actuals; 122 124 delete aggregate.fields; 125 delete aggregate.parent; 123 126 // delete aggregate; 124 127 break; … … 192 195 newtype->aggregate.kind = aggregate.kind; 193 196 newtype->aggregate.body = aggregate.body; 197 newtype->aggregate.tagged = aggregate.tagged; 198 newtype->aggregate.parent = aggregate.parent ? new string( *aggregate.parent ) : nullptr; 194 199 break; 195 200 case AggregateInst: … … 449 454 case TypeData::Builtin: 450 455 if(td->builtintype == DeclarationNode::Zero) { 451 return new ZeroType( emptyQualifiers );456 return new ZeroType( noQualifiers ); 452 457 } 453 458 else if(td->builtintype == DeclarationNode::One) { 454 return new OneType( emptyQualifiers );459 return new OneType( noQualifiers ); 455 460 } 456 461 else { … … 614 619 } // buildPointer 615 620 616 AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes ) {621 AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) { 617 622 assert( td->kind == TypeData::Aggregate ); 618 623 AggregateDecl * at; 619 624 switch ( td->aggregate.kind ) { 620 625 case DeclarationNode::Struct: 626 if ( td->aggregate.tagged ) { 627 at = new StructDecl( *td->aggregate.name, td->aggregate.parent, attributes, linkage ); 628 buildForall( td->aggregate.params, at->get_parameters() ); 629 break; 630 } 621 631 case DeclarationNode::Coroutine: 622 632 case DeclarationNode::Monitor: 623 633 case DeclarationNode::Thread: 624 at = new StructDecl( *td->aggregate.name, td->aggregate.kind, attributes );634 at = new StructDecl( *td->aggregate.name, td->aggregate.kind, attributes, linkage ); 625 635 buildForall( td->aggregate.params, at->get_parameters() ); 626 636 break; … … 643 653 } // buildAggregate 644 654 645 ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes ) {655 ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) { 646 656 switch ( type->kind ) { 647 657 case TypeData::Enum: { … … 656 666 ReferenceToType * ret; 657 667 if ( type->aggregate.body ) { 658 AggregateDecl * typedecl = buildAggregate( type, attributes );668 AggregateDecl * typedecl = buildAggregate( type, attributes, linkage ); 659 669 switch ( type->aggregate.kind ) { 660 670 case DeclarationNode::Struct: … … 760 770 if ( cur->has_enumeratorValue() ) { 761 771 ObjectDecl * member = dynamic_cast< ObjectDecl * >(* members); 762 member->set_init( new SingleInit( maybeMoveBuild< Expression >( cur->consume_enumeratorValue() ) , list< Expression * >()) );772 member->set_init( new SingleInit( maybeMoveBuild< Expression >( cur->consume_enumeratorValue() ) ) ); 763 773 } // if 764 774 } // for … … 777 787 TupleType * buildTuple( const TypeData * td ) { 778 788 assert( td->kind == TypeData::Tuple ); 779 TupleType * ret = new TupleType( buildQualifiers( td ) ); 780 buildTypeList( td->tuple, ret->get_types() ); 789 std::list< Type * > types; 790 buildTypeList( td->tuple, types ); 791 TupleType * ret = new TupleType( buildQualifiers( td ), types ); 781 792 buildForall( td->forall, ret->get_forall() ); 782 793 return ret; … … 802 813 return decl->set_asmName( asmName ); 803 814 } else if ( td->kind == TypeData::Aggregate ) { 804 return buildAggregate( td, attributes );815 return buildAggregate( td, attributes, linkage ); 805 816 } else if ( td->kind == TypeData::Enum ) { 806 817 return buildEnum( td, attributes ); -
src/Parser/TypeData.h
rfea3faa rb826e6b 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 15:18:36 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Thu Mar 16 08:32:39201713 // Update Count : 18 511 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Jul 14 16:57:00 2017 13 // Update Count : 187 14 14 // 15 15 … … 31 31 DeclarationNode * fields; 32 32 bool body; 33 34 bool tagged; 35 const std::string * parent; 33 36 }; 34 37 … … 102 105 ArrayType * buildArray( const TypeData * ); 103 106 AggregateDecl * buildAggregate( const TypeData *, std::list< Attribute * > ); 104 ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes );107 ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ); 105 108 ReferenceToType * buildAggInst( const TypeData * ); 106 109 TypeDecl * buildVariable( const TypeData * ); -
src/Parser/TypedefTable.h
rfea3faa rb826e6b 10 10 // Created On : Sat May 16 15:24:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Aug 15 18:25:04 201613 // Update Count : 2812 // Last Modified On : Wed Jun 28 21:56:34 2017 13 // Update Count : 33 14 14 // 15 15 … … 22 22 #include <stack> 23 23 24 #include " lex.h"25 #include "parser.h "24 #include "ParserTypes.h" 25 #include "parser.hh" 26 26 27 27 class TypedefTable { -
src/Parser/lex.ll
rfea3faa rb826e6b 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Tue May 30 22:00:48 201713 * Update Count : 5 2712 * Last Modified On : Tue Jul 18 07:11:48 2017 13 * Update Count : 544 14 14 */ 15 15 … … 27 27 #include <cstdio> // FILENAME_MAX 28 28 29 #include "lex.h"30 #include "parser.h" // YACC generated definitions based on C++ grammar31 29 #include "ParseNode.h" 32 30 #include "TypedefTable.h" … … 61 59 } 62 60 61 // Stop warning due to incorrectly generated flex code. 62 #pragma GCC diagnostic ignored "-Wsign-compare" 63 63 %} 64 64 … … 125 125 op_unary {op_unary_only}|{op_unary_binary}|{op_unary_pre_post} 126 126 127 op_binary_only "/"|"%"|" ^"|"&"|"|"|"<"|">"|"="|"=="|"!="|"<<"|">>"|"<="|">="|"+="|"-="|"*="|"/="|"%="|"&="|"|="|"^="|"<<="|">>="127 op_binary_only "/"|"%"|"\\"|"^"|"&"|"|"|"<"|">"|"="|"=="|"!="|"<<"|">>"|"<="|">="|"+="|"-="|"*="|"/="|"%="|"\\="|"&="|"|="|"^="|"<<="|">>=" 128 128 op_binary_over {op_unary_binary}|{op_binary_only} 129 129 // op_binary_not_over "?"|"->"|"."|"&&"|"||"|"@=" … … 136 136 137 137 %% 138 /* line directives */138 /* line directives */ 139 139 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" { 140 140 /* " stop highlighting */ … … 232 232 int { KEYWORD_RETURN(INT); } 233 233 __int128 { KEYWORD_RETURN(INT); } // GCC 234 __int128_t { KEYWORD_RETURN(INT); } // GCC 234 235 __label__ { KEYWORD_RETURN(LABEL); } // GCC 235 236 long { KEYWORD_RETURN(LONG); } … … 266 267 __typeof { KEYWORD_RETURN(TYPEOF); } // GCC 267 268 __typeof__ { KEYWORD_RETURN(TYPEOF); } // GCC 269 __uint128_t { KEYWORD_RETURN(INT); } // GCC 268 270 union { KEYWORD_RETURN(UNION); } 269 271 unsigned { KEYWORD_RETURN(UNSIGNED); } … … 274 276 __volatile__ { KEYWORD_RETURN(VOLATILE); } // GCC 275 277 while { KEYWORD_RETURN(WHILE); } 278 with { KEYWORD_RETURN(WITH); } // CFA 276 279 zero_t { NUMERIC_RETURN(ZERO_T); } // CFA 277 280 … … 336 339 "-" { ASCIIOP_RETURN(); } 337 340 "*" { ASCIIOP_RETURN(); } 341 "\\" { ASCIIOP_RETURN(); } // CFA, exponentiation 338 342 "/" { ASCIIOP_RETURN(); } 339 343 "%" { ASCIIOP_RETURN(); } … … 360 364 "+=" { NAMEDOP_RETURN(PLUSassign); } 361 365 "-=" { NAMEDOP_RETURN(MINUSassign); } 366 "\\=" { NAMEDOP_RETURN(EXPassign); } // CFA, exponentiation 362 367 "*=" { NAMEDOP_RETURN(MULTassign); } 363 368 "/=" { NAMEDOP_RETURN(DIVassign); } -
src/Parser/module.mk
rfea3faa rb826e6b 11 11 ## Created On : Sat May 16 15:29:09 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Tue Aug 16 17:28:34 201614 ## Update Count : 10 113 ## Last Modified On : Wed Jun 28 21:58:29 2017 14 ## Update Count : 104 15 15 ############################################################################### 16 16 17 BUILT_SOURCES = Parser/parser.h 17 BUILT_SOURCES = Parser/parser.hh 18 18 19 19 AM_YFLAGS = -d -t -v … … 29 29 Parser/TypeData.cc \ 30 30 Parser/LinkageSpec.cc \ 31 Parser/parse utility.cc31 Parser/parserutility.cc 32 32 33 33 MAINTAINERCLEANFILES += Parser/parser.output -
src/Parser/parser.yy
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // cfa.y --7 // parser.yy -- 8 8 // 9 9 // Author : Peter A. Buhr 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Mon Ju n 12 12:59:00 201713 // Update Count : 24 0211 // Last Modified By : Andrew Beach 12 // Last Modified On : Mon Jul 17 12:17:00 2017 13 // Update Count : 2455 14 14 // 15 15 … … 48 48 #include <cstdio> 49 49 #include <stack> 50 #include "lex.h"51 #include "parser.h"52 50 #include "ParseNode.h" 53 51 #include "TypedefTable.h" … … 88 86 bool forall = false; // aggregate have one or more forall qualifiers ? 89 87 %} 88 89 // Types declaration 90 %union 91 { 92 Token tok; 93 ParseNode * pn; 94 ExpressionNode * en; 95 DeclarationNode * decl; 96 DeclarationNode::Aggregate aggKey; 97 DeclarationNode::TypeClass tclass; 98 StatementNode * sn; 99 ConstantExpr * constant; 100 ForCtl * fctl; 101 LabelNode * label; 102 InitializerNode * in; 103 OperKinds op; 104 std::string * str; 105 bool flag; 106 CatchStmt::Kind catch_kind; 107 } 90 108 91 109 //************************* TERMINAL TOKENS ******************************** … … 111 129 %token ATTRIBUTE EXTENSION // GCC 112 130 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN 113 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT // CFA131 %token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH // CFA 114 132 %token ASM // C99, extension ISO/IEC 9899:1999 Section J.5.10(1) 115 133 %token ALIGNAS ALIGNOF GENERIC STATICASSERT // C11 … … 133 151 %token ELLIPSIS // ... 134 152 135 %token MULTassign DIVassign MODassign // *= /= %=/153 %token EXPassign MULTassign DIVassign MODassign // \= *= /= %= 136 154 %token PLUSassign MINUSassign // += -= 137 155 %token LSassign RSassign // <<= >>= … … 139 157 140 158 %token ATassign // @= 141 142 // Types declaration143 %union144 {145 Token tok;146 ParseNode * pn;147 ExpressionNode * en;148 DeclarationNode * decl;149 DeclarationNode::Aggregate aggKey;150 DeclarationNode::TypeClass tclass;151 StatementNode * sn;152 ConstantExpr * constant;153 ForCtl * fctl;154 LabelNode * label;155 InitializerNode * in;156 OperKinds op;157 std::string * str;158 bool flag;159 }160 159 161 160 %type<tok> identifier no_attr_identifier zero_one … … 169 168 %type<op> ptrref_operator unary_operator assignment_operator 170 169 %type<en> primary_expression postfix_expression unary_expression 171 %type<en> cast_expression multiplicative_expression additive_expression shift_expression 172 %type<en> relational_expression equality_expression AND_expression exclusive_OR_expression 173 %type<en> inclusive_OR_expression logical_AND_expression logical_OR_expression conditional_expression 174 %type<en> constant_expression assignment_expression assignment_expression_opt 170 %type<en> cast_expression exponential_expression multiplicative_expression additive_expression 171 %type<en> shift_expression relational_expression equality_expression 172 %type<en> AND_expression exclusive_OR_expression inclusive_OR_expression 173 %type<en> logical_AND_expression logical_OR_expression 174 %type<en> conditional_expression constant_expression assignment_expression assignment_expression_opt 175 175 %type<en> comma_expression comma_expression_opt 176 %type<en> argument_expression_list argument_expression assignment_opt176 %type<en> argument_expression_list argument_expression default_initialize_opt 177 177 %type<fctl> for_control_expression 178 178 %type<en> subrange … … 185 185 // statements 186 186 %type<sn> labeled_statement compound_statement expression_statement selection_statement 187 %type<sn> iteration_statement jump_statement exception_statement asm_statement 187 %type<sn> iteration_statement jump_statement 188 %type<sn> with_statement exception_statement asm_statement 188 189 %type<sn> fall_through_opt fall_through 189 190 %type<sn> statement statement_list 190 191 %type<sn> block_item_list block_item 191 %type<sn> case_clause192 %type<sn> with_clause_opt 192 193 %type<en> case_value 193 %type<sn> case_ value_list case_label case_label_list194 %type<sn> case_clause case_value_list case_label case_label_list 194 195 %type<sn> switch_clause_list_opt switch_clause_list choose_clause_list_opt choose_clause_list 195 196 %type<sn> /* handler_list */ handler_clause finally_clause 197 %type<catch_kind> handler_key 196 198 197 199 // declarations … … 572 574 ; 573 575 576 exponential_expression: 577 cast_expression 578 | exponential_expression '\\' cast_expression 579 { $$ = new ExpressionNode( build_binary_val( OperKinds::Exp, $1, $3 ) ); } 580 ; 581 574 582 multiplicative_expression: 575 cast_expression576 | multiplicative_expression '*' cast_expression583 exponential_expression 584 | multiplicative_expression '*' exponential_expression 577 585 { $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); } 578 | multiplicative_expression '/' cast_expression586 | multiplicative_expression '/' exponential_expression 579 587 { $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); } 580 | multiplicative_expression '%' cast_expression588 | multiplicative_expression '%' exponential_expression 581 589 { $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); } 582 590 ; … … 677 685 '=' { $$ = OperKinds::Assign; } 678 686 | ATassign { $$ = OperKinds::AtAssn; } 687 | EXPassign { $$ = OperKinds::ExpAssn; } 679 688 | MULTassign { $$ = OperKinds::MulAssn; } 680 689 | DIVassign { $$ = OperKinds::DivAssn; } … … 729 738 | iteration_statement 730 739 | jump_statement 740 | with_statement 731 741 | exception_statement 732 742 | asm_statement … … 936 946 ; 937 947 948 with_statement: 949 WITH '(' tuple_expression_list ')' compound_statement 950 { $$ = (StatementNode *)0; } // FIX ME 951 ; 952 938 953 exception_statement: 939 954 TRY compound_statement handler_clause … … 959 974 960 975 handler_clause: 961 CATCH '(' push push exception_declaration pop ')' compound_statement pop 962 { $$ = new StatementNode( build_catch( CatchStmt::Terminate, $5, nullptr, $8 ) ); } 963 | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop 964 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Terminate, $6, nullptr, $9 ) ) ); } 965 | CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 966 { $$ = new StatementNode( build_catch( CatchStmt::Resume, $5, nullptr, $8 ) ); } 967 | handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop 968 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Resume, $6, nullptr, $9 ) ) ); } 976 // TEMPORARY, TEST EXCEPTIONS 977 handler_key '(' push push INTEGERconstant pop ')' compound_statement pop 978 { $$ = new StatementNode( build_catch( $1, nullptr, new ExpressionNode( build_constantInteger( *$5 ) ), $8 ) ); } 979 | handler_clause handler_key '(' push push INTEGERconstant pop ')' compound_statement pop 980 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, nullptr, new ExpressionNode( build_constantInteger( *$6 ) ), $9 ) ) ); } 981 982 | handler_key '(' push push exception_declaration pop handler_predicate_opt ')' compound_statement pop 983 { $$ = new StatementNode( build_catch( $1, $5, nullptr, $9 ) ); } 984 | handler_clause handler_key '(' push push exception_declaration pop handler_predicate_opt ')' compound_statement pop 985 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, $6, nullptr, $10 ) ) ); } 986 ; 987 988 handler_predicate_opt: 989 //empty 990 | ';' conditional_expression 991 ; 992 993 handler_key: 994 CATCH 995 { $$ = CatchStmt::Terminate; } 996 | CATCHRESUME 997 { $$ = CatchStmt::Resume; } 969 998 ; 970 999 … … 1651 1680 | aggregate_key attribute_list_opt typegen_name // CFA 1652 1681 { $$ = $3->addQualifiers( $2 ); } 1682 1683 // Temp, testing TreeStruct 1684 | STRUCT TRY attribute_list_opt no_attr_identifier_or_type_name 1685 { 1686 typedefTable.makeTypedef( *$4 ); // create typedef 1687 if ( forall ) typedefTable.changeKind( *$4, TypedefTable::TG ); // $ 1688 forall = false; // reset 1689 } 1690 '{' field_declaration_list '}' 1691 { 1692 $$ = DeclarationNode::newTreeStruct( DeclarationNode::Struct, 1693 $4, nullptr, nullptr, $7, true )->addQualifiers( $3 ); 1694 } 1695 | STRUCT TRY attribute_list_opt no_attr_identifier_or_type_name TYPEDEFname 1696 { 1697 typedefTable.makeTypedef( *$4 ); // create typedef 1698 if ( forall ) typedefTable.changeKind( *$4, TypedefTable::TG ); // $ 1699 forall = false; // reset 1700 } 1701 '{' field_declaration_list '}' 1702 { 1703 $$ = DeclarationNode::newTreeStruct( DeclarationNode::Struct, 1704 $4, $5, nullptr, $8, true )->addQualifiers( $3 ); 1705 } 1653 1706 ; 1654 1707 … … 1829 1882 cfa_parameter_declaration: // CFA, new & old style parameter declaration 1830 1883 parameter_declaration 1831 | cfa_identifier_parameter_declarator_no_tuple identifier_or_type_name assignment_opt1884 | cfa_identifier_parameter_declarator_no_tuple identifier_or_type_name default_initialize_opt 1832 1885 { $$ = $1->addName( $2 ); } 1833 | cfa_abstract_tuple identifier_or_type_name assignment_opt1886 | cfa_abstract_tuple identifier_or_type_name default_initialize_opt 1834 1887 // To obtain LR(1), these rules must be duplicated here (see cfa_abstract_declarator). 1835 1888 { $$ = $1->addName( $2 ); } 1836 | type_qualifier_list cfa_abstract_tuple identifier_or_type_name assignment_opt1889 | type_qualifier_list cfa_abstract_tuple identifier_or_type_name default_initialize_opt 1837 1890 { $$ = $2->addName( $3 )->addQualifiers( $1 ); } 1838 1891 | cfa_function_specifier … … 1851 1904 parameter_declaration: 1852 1905 // No SUE declaration in parameter list. 1853 declaration_specifier_nobody identifier_parameter_declarator assignment_opt1906 declaration_specifier_nobody identifier_parameter_declarator default_initialize_opt 1854 1907 { 1855 1908 typedefTable.addToEnclosingScope( TypedefTable::ID ); 1856 1909 $$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr ); 1857 1910 } 1858 | declaration_specifier_nobody type_parameter_redeclarator assignment_opt1911 | declaration_specifier_nobody type_parameter_redeclarator default_initialize_opt 1859 1912 { 1860 1913 typedefTable.addToEnclosingScope( TypedefTable::ID ); … … 1864 1917 1865 1918 abstract_parameter_declaration: 1866 declaration_specifier_nobody assignment_opt1919 declaration_specifier_nobody default_initialize_opt 1867 1920 { $$ = $1->addInitializer( $2 ? new InitializerNode( $2 ) : nullptr ); } 1868 | declaration_specifier_nobody abstract_parameter_declarator assignment_opt1921 | declaration_specifier_nobody abstract_parameter_declarator default_initialize_opt 1869 1922 { $$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr ); } 1870 1923 ; … … 2167 2220 { 2168 2221 linkageStack.push( linkage ); // handle nested extern "C"/"Cforall" 2169 linkage = LinkageSpec::linkage Check($2 );2222 linkage = LinkageSpec::linkageUpdate( linkage, $2 ); 2170 2223 } 2171 2224 '{' external_definition_list_opt '}' … … 2203 2256 ; 2204 2257 2258 with_clause_opt: 2259 // empty 2260 { $$ = (StatementNode *)0; } // FIX ME 2261 | WITH '(' tuple_expression_list ')' 2262 { $$ = (StatementNode *)0; } // FIX ME 2263 ; 2264 2205 2265 function_definition: 2206 cfa_function_declaration compound_statement// CFA2266 cfa_function_declaration with_clause_opt compound_statement // CFA 2207 2267 { 2208 2268 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2209 2269 typedefTable.leaveScope(); 2210 $$ = $1->addFunctionBody( $ 2);2211 } 2212 | declaration_specifier function_declarator compound_statement2270 $$ = $1->addFunctionBody( $3 ); 2271 } 2272 | declaration_specifier function_declarator with_clause_opt compound_statement 2213 2273 { 2214 2274 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2215 2275 typedefTable.leaveScope(); 2216 $$ = $2->addFunctionBody( $ 3)->addType( $1 );2217 } 2218 | type_qualifier_list function_declarator compound_statement2276 $$ = $2->addFunctionBody( $4 )->addType( $1 ); 2277 } 2278 | type_qualifier_list function_declarator with_clause_opt compound_statement 2219 2279 { 2220 2280 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2221 2281 typedefTable.leaveScope(); 2222 $$ = $2->addFunctionBody( $ 3)->addQualifiers( $1 );2223 } 2224 | declaration_qualifier_list function_declarator compound_statement2282 $$ = $2->addFunctionBody( $4 )->addQualifiers( $1 ); 2283 } 2284 | declaration_qualifier_list function_declarator with_clause_opt compound_statement 2225 2285 { 2226 2286 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2227 2287 typedefTable.leaveScope(); 2228 $$ = $2->addFunctionBody( $ 3)->addQualifiers( $1 );2229 } 2230 | declaration_qualifier_list type_qualifier_list function_declarator compound_statement2288 $$ = $2->addFunctionBody( $4 )->addQualifiers( $1 ); 2289 } 2290 | declaration_qualifier_list type_qualifier_list function_declarator with_clause_opt compound_statement 2231 2291 { 2232 2292 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2233 2293 typedefTable.leaveScope(); 2234 $$ = $3->addFunctionBody( $ 4)->addQualifiers( $2 )->addQualifiers( $1 );2294 $$ = $3->addFunctionBody( $5 )->addQualifiers( $2 )->addQualifiers( $1 ); 2235 2295 } 2236 2296 2237 2297 // Old-style K&R function definition, OBSOLESCENT (see 4) 2238 | declaration_specifier KR_function_declarator push KR_declaration_list_opt compound_statement2298 | declaration_specifier KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement 2239 2299 { 2240 2300 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2241 2301 typedefTable.leaveScope(); 2242 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $ 5)->addType( $1 );2243 } 2244 | type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement2302 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addType( $1 ); 2303 } 2304 | type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement 2245 2305 { 2246 2306 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2247 2307 typedefTable.leaveScope(); 2248 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $ 5)->addQualifiers( $1 );2308 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 ); 2249 2309 } 2250 2310 2251 2311 // Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4) 2252 | declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement2312 | declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement 2253 2313 { 2254 2314 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2255 2315 typedefTable.leaveScope(); 2256 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $ 5)->addQualifiers( $1 );2257 } 2258 | declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement2316 $$ = $2->addOldDeclList( $4 )->addFunctionBody( $6 )->addQualifiers( $1 ); 2317 } 2318 | declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt with_clause_opt compound_statement 2259 2319 { 2260 2320 typedefTable.addToEnclosingScope( TypedefTable::ID ); 2261 2321 typedefTable.leaveScope(); 2262 $$ = $3->addOldDeclList( $5 )->addFunctionBody( $ 6)->addQualifiers( $2 )->addQualifiers( $1 );2322 $$ = $3->addOldDeclList( $5 )->addFunctionBody( $7 )->addQualifiers( $2 )->addQualifiers( $1 ); 2263 2323 } 2264 2324 ; … … 2323 2383 | TYPEGENname 2324 2384 | CONST 2325 { $$ = Token{ new string( "__const__" ) }; }2385 { $$ = Token{ new string( "__const__" ), { nullptr, -1 } }; } 2326 2386 ; 2327 2387 … … 3022 3082 ; 3023 3083 3024 assignment_opt:3084 default_initialize_opt: 3025 3085 // empty 3026 3086 { $$ = nullptr; } -
src/Parser/parserutility.cc
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // parse utility.cc --7 // parserutility.cc -- 8 8 // 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 15:30:39 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Jun 21 15:33:41201713 // Update Count : 511 // Last Modified By : Andrew Beach 12 // Last Modified On : Tus Jul 18 10:12:00 2017 13 // Update Count : 8 14 14 // 15 15 16 #include "parse utility.h"16 #include "parserutility.h" 17 17 #include "SynTree/Type.h" 18 18 #include "SynTree/Expression.h" … … 26 26 UntypedExpr *comparison = new UntypedExpr( new NameExpr( "?!=?" ) ); 27 27 comparison->get_args().push_back( orig ); 28 comparison->get_args().push_back( new ConstantExpr( Constant( new ZeroType( emptyQualifiers ), "0", (unsigned long long int)0 ) ) );28 comparison->get_args().push_back( new ConstantExpr( Constant( new ZeroType( noQualifiers ), "0", (unsigned long long int)0 ) ) ); 29 29 return new CastExpr( comparison, new BasicType( Type::Qualifiers(), BasicType::SignedInt ) ); 30 30 } -
src/Parser/parserutility.h
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // parse utility.h --7 // parserutility.h -- 8 8 // 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 15:31:46 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat May 16 15:32:58 201513 // Update Count : 212 // Last Modified On : Wed Jun 28 22:11:40 2017 13 // Update Count : 3 14 14 // 15 15 -
src/ResolvExpr/AlternativeFinder.cc
rfea3faa rb826e6b 604 604 // ) 605 605 SymTab::Indexer decls( indexer ); 606 PRINT(607 std::cerr << "============= original indexer" << std::endl;608 indexer.print( std::cerr );609 std::cerr << "============= new indexer" << std::endl;610 decls.print( std::cerr );611 )606 // PRINT( 607 // std::cerr << "============= original indexer" << std::endl; 608 // indexer.print( std::cerr ); 609 // std::cerr << "============= new indexer" << std::endl; 610 // decls.print( std::cerr ); 611 // ) 612 612 addToIndexer( have, decls ); 613 613 AssertionSet newNeed; … … 809 809 } 810 810 811 Expression * restructureCast( Expression * argExpr, Type * toType ) { 812 if ( argExpr->get_result()->size() > 1 && ! toType->isVoid() ) { 813 // Argument expression is a tuple and the target type is not void. Cast each member of the tuple 814 // to its corresponding target type, producing the tuple of those cast expressions. If there are 815 // more components of the tuple than components in the target type, then excess components do not 816 // come out in the result expression (but UniqueExprs ensure that side effects will still be done). 817 if ( Tuples::maybeImpure( argExpr ) && ! dynamic_cast< UniqueExpr * >( argExpr ) ) { 818 // expressions which may contain side effects require a single unique instance of the expression. 819 argExpr = new UniqueExpr( argExpr ); 820 } 821 std::list< Expression * > componentExprs; 822 for ( unsigned int i = 0; i < toType->size(); i++ ) { 823 // cast each component 824 TupleIndexExpr * idx = new TupleIndexExpr( argExpr->clone(), i ); 825 componentExprs.push_back( restructureCast( idx, toType->getComponent( i ) ) ); 826 } 827 delete argExpr; 828 assert( componentExprs.size() > 0 ); 829 // produce the tuple of casts 830 return new TupleExpr( componentExprs ); 831 } else { 832 // handle normally 833 return new CastExpr( argExpr, toType->clone() ); 834 } 835 } 836 811 837 void AlternativeFinder::visit( CastExpr *castExpr ) { 812 838 Type *& toType = castExpr->get_result(); … … 840 866 thisCost += Cost( 0, 0, discardedValues ); 841 867 842 Expression * argExpr = i->expr->clone(); 843 if ( argExpr->get_result()->size() > 1 && ! castExpr->get_result()->isVoid() ) { 844 // Argument expression is a tuple and the target type is not void. Cast each member of the tuple 845 // to its corresponding target type, producing the tuple of those cast expressions. If there are 846 // more components of the tuple than components in the target type, then excess components do not 847 // come out in the result expression (but UniqueExprs ensure that side effects will still be done). 848 if ( Tuples::maybeImpure( argExpr ) && ! dynamic_cast< UniqueExpr * >( argExpr ) ) { 849 // expressions which may contain side effects require a single unique instance of the expression. 850 argExpr = new UniqueExpr( argExpr ); 851 } 852 std::list< Expression * > componentExprs; 853 for ( unsigned int i = 0; i < castExpr->get_result()->size(); i++ ) { 854 // cast each component 855 TupleIndexExpr * idx = new TupleIndexExpr( argExpr->clone(), i ); 856 componentExprs.push_back( new CastExpr( idx, castExpr->get_result()->getComponent( i )->clone() ) ); 857 } 858 delete argExpr; 859 assert( componentExprs.size() > 0 ); 860 // produce the tuple of casts 861 candidates.push_back( Alternative( new TupleExpr( componentExprs ), i->env, i->cost, thisCost ) ); 862 } else { 863 // handle normally 864 candidates.push_back( Alternative( new CastExpr( argExpr->clone(), toType->clone() ), i->env, i->cost, thisCost ) ); 865 } 868 candidates.push_back( Alternative( restructureCast( i->expr->clone(), toType ), i->env, i->cost, thisCost ) ); 866 869 } // if 867 870 } // for … … 1182 1185 } 1183 1186 1187 void AlternativeFinder::visit( UntypedInitExpr *initExpr ) { 1188 // handle each option like a cast 1189 AltList candidates; 1190 PRINT( std::cerr << "untyped init expr: " << initExpr << std::endl; ) 1191 // O(N^2) checks of d-types with e-types 1192 for ( InitAlternative & initAlt : initExpr->get_initAlts() ) { 1193 Type * toType = resolveTypeof( initAlt.type, indexer ); 1194 SymTab::validateType( toType, &indexer ); 1195 adjustExprType( toType, env, indexer ); 1196 // Ideally the call to findWithAdjustment could be moved out of the loop, but unfortunately it currently has to occur inside or else 1197 // polymorphic return types are not properly bound to the initialization type, since return type variables are only open for the duration of resolving 1198 // the UntypedExpr. This is only actually an issue in initialization contexts that allow more than one possible initialization type, but it is still suboptimal. 1199 AlternativeFinder finder( indexer, env ); 1200 finder.targetType = toType; 1201 finder.findWithAdjustment( initExpr->get_expr() ); 1202 for ( Alternative & alt : finder.get_alternatives() ) { 1203 TypeEnvironment newEnv( alt.env ); 1204 AssertionSet needAssertions, haveAssertions; 1205 OpenVarSet openVars; // find things in env that don't have a "representative type" and claim those are open vars? 1206 PRINT( std::cerr << " @ " << toType << " " << initAlt.designation << std::endl; ) 1207 // It's possible that a cast can throw away some values in a multiply-valued expression. (An example is a 1208 // cast-to-void, which casts from one value to zero.) Figure out the prefix of the subexpression results 1209 // that are cast directly. The candidate is invalid if it has fewer results than there are types to cast 1210 // to. 1211 int discardedValues = alt.expr->get_result()->size() - toType->size(); 1212 if ( discardedValues < 0 ) continue; 1213 // xxx - may need to go into tuple types and extract relevant types and use unifyList. Note that currently, this does not 1214 // allow casting a tuple to an atomic type (e.g. (int)([1, 2, 3])) 1215 // unification run for side-effects 1216 unify( toType, alt.expr->get_result(), newEnv, needAssertions, haveAssertions, openVars, indexer ); // xxx - do some inspecting on this line... why isn't result bound to initAlt.type?? 1217 1218 Cost thisCost = castCost( alt.expr->get_result(), toType, indexer, newEnv ); 1219 if ( thisCost != Cost::infinity ) { 1220 // count one safe conversion for each value that is thrown away 1221 thisCost += Cost( 0, 0, discardedValues ); 1222 candidates.push_back( Alternative( new InitExpr( restructureCast( alt.expr->clone(), toType ), initAlt.designation->clone() ), newEnv, alt.cost, thisCost ) ); 1223 } 1224 } 1225 } 1226 1227 // findMinCost selects the alternatives with the lowest "cost" members, but has the side effect of copying the 1228 // cvtCost member to the cost member (since the old cost is now irrelevant). Thus, calling findMinCost twice 1229 // selects first based on argument cost, then on conversion cost. 1230 AltList minArgCost; 1231 findMinCost( candidates.begin(), candidates.end(), std::back_inserter( minArgCost ) ); 1232 findMinCost( minArgCost.begin(), minArgCost.end(), std::back_inserter( alternatives ) ); 1233 } 1184 1234 } // namespace ResolvExpr 1185 1235 -
src/ResolvExpr/AlternativeFinder.h
rfea3faa rb826e6b 73 73 virtual void visit( UniqueExpr *unqExpr ); 74 74 virtual void visit( StmtExpr *stmtExpr ); 75 virtual void visit( UntypedInitExpr *initExpr ); 75 76 /// Runs a new alternative finder on each element in [begin, end) 76 77 /// and writes each alternative finder to out. -
src/ResolvExpr/Resolver.cc
rfea3faa rb826e6b 14 14 // 15 15 16 #include <iostream> 17 18 #include "Alternative.h" 19 #include "AlternativeFinder.h" 20 #include "CurrentObject.h" 21 #include "RenameVars.h" 16 22 #include "Resolver.h" 17 #include "AlternativeFinder.h"18 #include "Alternative.h"19 #include "RenameVars.h"20 23 #include "ResolveTypeof.h" 21 24 #include "typeops.h" 25 26 #include "SynTree/Expression.h" 27 #include "SynTree/Initializer.h" 22 28 #include "SynTree/Statement.h" 23 29 #include "SynTree/Type.h" 24 #include "SynTree/Expression.h" 25 #include "Sy nTree/Initializer.h"30 31 #include "SymTab/Autogen.h" 26 32 #include "SymTab/Indexer.h" 27 #include "SymTab/Autogen.h" 33 28 34 #include "Common/utility.h" 35 29 36 #include "InitTweak/InitTweak.h" 30 37 31 #include <iostream>32 38 using namespace std; 33 39 … … 39 45 if ( const Resolver * res = dynamic_cast< const Resolver * >( &other ) ) { 40 46 functionReturn = res->functionReturn; 41 initContext = res->initContext;47 currentObject = res->currentObject; 42 48 inEnumDecl = res->inEnumDecl; 43 49 } … … 64 70 virtual void visit( BranchStmt *branchStmt ) override; 65 71 virtual void visit( ReturnStmt *returnStmt ) override; 72 virtual void visit( ThrowStmt *throwStmt ) override; 66 73 67 74 virtual void visit( SingleInit *singleInit ) override; … … 79 86 80 87 Type * functionReturn = nullptr; 81 Type *initContext = nullptr;88 CurrentObject currentObject = nullptr; 82 89 bool inEnumDecl = false; 83 90 }; … … 186 193 // each value of initContext is retained, so the type on the first analysis is preserved and used for selecting 187 194 // the RHS. 188 Type *temp = initContext;189 initContext = new_type;190 if ( inEnumDecl && dynamic_cast< EnumInstType * >( initContext) ) {195 ValueGuard<CurrentObject> temp( currentObject ); 196 currentObject = CurrentObject( objectDecl->get_type() ); 197 if ( inEnumDecl && dynamic_cast< EnumInstType * >( objectDecl->get_type() ) ) { 191 198 // enumerator initializers should not use the enum type to initialize, since 192 199 // the enum type is still incomplete at this point. Use signed int instead. 193 initContext = new BasicType( Type::Qualifiers(), BasicType::SignedInt);200 currentObject = CurrentObject( new BasicType( Type::Qualifiers(), BasicType::SignedInt ) ); 194 201 } 195 202 Parent::visit( objectDecl ); 196 if ( inEnumDecl && dynamic_cast< EnumInstType * >( initContext) ) {203 if ( inEnumDecl && dynamic_cast< EnumInstType * >( objectDecl->get_type() ) ) { 197 204 // delete newly created signed int type 198 delete initContext; 199 } 200 initContext = temp; 205 // delete currentObject.getType(); 206 } 201 207 } 202 208 … … 315 321 316 322 void Resolver::visit( SwitchStmt *switchStmt ) { 317 ValueGuard< Type * > oldInitContext( initContext );323 ValueGuard< CurrentObject > oldCurrentObject( currentObject ); 318 324 Expression *newExpr; 319 325 newExpr = findIntegralExpression( switchStmt->get_condition(), *this ); … … 321 327 switchStmt->set_condition( newExpr ); 322 328 323 initContext = newExpr->get_result();329 currentObject = CurrentObject( newExpr->get_result() ); 324 330 Parent::visit( switchStmt ); 325 331 } … … 327 333 void Resolver::visit( CaseStmt *caseStmt ) { 328 334 if ( caseStmt->get_condition() ) { 329 assert( initContext ); 330 CastExpr * castExpr = new CastExpr( caseStmt->get_condition(), initContext->clone() ); 335 std::list< InitAlternative > initAlts = currentObject.getOptions(); 336 assertf( initAlts.size() == 1, "SwitchStmt did not correctly resolve an integral expression." ); 337 CastExpr * castExpr = new CastExpr( caseStmt->get_condition(), initAlts.front().type->clone() ); 331 338 Expression * newExpr = findSingleExpression( castExpr, *this ); 332 339 castExpr = safe_dynamic_cast< CastExpr * >( newExpr ); … … 360 367 } 361 368 369 void Resolver::visit( ThrowStmt *throwStmt ) { 370 if ( throwStmt->get_expr() ) { 371 Expression * wrapped = new CastExpr( throwStmt->get_expr(), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) ); 372 Expression * newExpr = findSingleExpression( wrapped, *this ); 373 throwStmt->set_expr( newExpr ); 374 } 375 } 376 362 377 template< typename T > 363 378 bool isCharType( T t ) { … … 370 385 371 386 void Resolver::visit( SingleInit *singleInit ) { 372 if ( singleInit->get_value() ) { 373 // // find all the d's 374 // std::list<Expression *> &designators = singleInit->get_designators(); 375 // std::list<Type *> types1{ initContext }, types2; 376 // for ( Expression * expr: designators ) { 377 // cerr << expr << endl; 378 // if ( NameExpr * nexpr = dynamic_cast<NameExpr *>( expr ) ) { 379 // for ( Type * type: types1 ) { 380 // cerr << type << endl; 381 // ReferenceToType * fred = dynamic_cast<ReferenceToType *>(type); 382 // std::list<Declaration *> members; 383 // if ( fred ) { 384 // fred->lookup( nexpr->get_name(), members ); // concatenate identical field name 385 // for ( Declaration * mem: members ) { 386 // if ( DeclarationWithType * dwt = dynamic_cast<DeclarationWithType *>(mem) ) { 387 // types2.push_back( dwt->get_type() ); 388 // } // if 389 // } // for 390 // } // if 391 // } // for 392 // types1 = types2; 393 // types2.clear(); 394 // } // if 395 // } // for 396 // // for ( Type * type: types1 ) { 397 // // cerr << type << endl; 398 // // } // for 399 400 // // O(N^2) checks of d-types with f-types 401 // // find the minimum cost 402 CastExpr *castExpr = new CastExpr( singleInit->get_value(), initContext->clone() ); 403 Expression *newExpr = findSingleExpression( castExpr, *this ); 404 delete castExpr; 405 singleInit->set_value( newExpr ); 406 407 // check if initializing type is char[] 408 if ( ArrayType * at = dynamic_cast< ArrayType * >( initContext ) ) { 409 if ( isCharType( at->get_base() ) ) { 410 // check if the resolved type is char * 411 if ( PointerType * pt = dynamic_cast< PointerType *>( newExpr->get_result() ) ) { 412 if ( isCharType( pt->get_base() ) ) { 413 // strip cast if we're initializing a char[] with a char *, e.g. char x[] = "hello"; 414 CastExpr *ce = dynamic_cast< CastExpr * >( newExpr ); 415 singleInit->set_value( ce->get_arg() ); 416 ce->set_arg( NULL ); 417 delete ce; 418 } 387 // resolve initialization using the possibilities as determined by the currentObject cursor 388 UntypedInitExpr * untyped = new UntypedInitExpr( singleInit->get_value(), currentObject.getOptions() ); 389 Expression * newExpr = findSingleExpression( untyped, *this ); 390 InitExpr * initExpr = safe_dynamic_cast< InitExpr * >( newExpr ); 391 392 // move cursor to the object that is actually initialized 393 currentObject.setNext( initExpr->get_designation() ); 394 395 // discard InitExpr wrapper and retain relevant pieces 396 newExpr = initExpr->get_expr(); 397 newExpr->set_env( initExpr->get_env() ); 398 initExpr->set_expr( nullptr ); 399 initExpr->set_env( nullptr ); 400 delete initExpr; 401 402 // get the actual object's type (may not exactly match what comes back from the resolver due to conversions) 403 Type * initContext = currentObject.getCurrentType(); 404 405 // check if actual object's type is char[] 406 if ( ArrayType * at = dynamic_cast< ArrayType * >( initContext ) ) { 407 if ( isCharType( at->get_base() ) ) { 408 // check if the resolved type is char * 409 if ( PointerType * pt = dynamic_cast< PointerType *>( newExpr->get_result() ) ) { 410 if ( isCharType( pt->get_base() ) ) { 411 // strip cast if we're initializing a char[] with a char *, e.g. char x[] = "hello"; 412 CastExpr *ce = safe_dynamic_cast< CastExpr * >( newExpr ); 413 newExpr = ce->get_arg(); 414 ce->set_arg( nullptr ); 415 delete ce; 419 416 } 420 417 } 421 418 } 422 } // if 423 } 424 425 template< typename AggrInst > 426 TypeSubstitution makeGenericSubstitutuion( AggrInst * inst ) { 427 assert( inst ); 428 assert( inst->get_baseParameters() ); 429 std::list< TypeDecl * > baseParams = *inst->get_baseParameters(); 430 std::list< Expression * > typeSubs = inst->get_parameters(); 431 TypeSubstitution subs( baseParams.begin(), baseParams.end(), typeSubs.begin() ); 432 return subs; 433 } 434 435 ReferenceToType * isStructOrUnion( Type * type ) { 436 if ( StructInstType * sit = dynamic_cast< StructInstType * >( type ) ) { 437 return sit; 438 } else if ( UnionInstType * uit = dynamic_cast< UnionInstType * >( type ) ) { 439 return uit; 440 } 441 return nullptr; 442 } 443 444 void Resolver::resolveSingleAggrInit( Declaration * dcl, InitIterator & init, InitIterator & initEnd, TypeSubstitution sub ) { 445 DeclarationWithType * dt = dynamic_cast< DeclarationWithType * >( dcl ); 446 assert( dt ); 447 // need to substitute for generic types, so that casts are to concrete types 448 initContext = dt->get_type()->clone(); 449 sub.apply( initContext ); 450 451 try { 452 if ( init == initEnd ) return; // stop when there are no more initializers 453 (*init)->accept( *this ); 454 ++init; // made it past an initializer 455 } catch( SemanticError & ) { 456 // need to delve deeper, if you can 457 if ( ReferenceToType * type = isStructOrUnion( initContext ) ) { 458 resolveAggrInit( type, init, initEnd ); 459 } else { 460 // member is not an aggregate type, so can't go any deeper 461 462 // might need to rethink what is being thrown 463 throw; 464 } // if 465 } 466 } 467 468 void Resolver::resolveAggrInit( ReferenceToType * inst, InitIterator & init, InitIterator & initEnd ) { 469 if ( StructInstType * sit = dynamic_cast< StructInstType * >( inst ) ) { 470 TypeSubstitution sub = makeGenericSubstitutuion( sit ); 471 StructDecl * st = sit->get_baseStruct(); 472 if(st->get_members().empty()) return; 473 // want to resolve each initializer to the members of the struct, 474 // but if there are more initializers than members we should stop 475 list< Declaration * >::iterator it = st->get_members().begin(); 476 for ( ; it != st->get_members().end(); ++it) { 477 resolveSingleAggrInit( *it, init, initEnd, sub ); 478 } 479 } else if ( UnionInstType * uit = dynamic_cast< UnionInstType * >( inst ) ) { 480 TypeSubstitution sub = makeGenericSubstitutuion( uit ); 481 UnionDecl * un = uit->get_baseUnion(); 482 if(un->get_members().empty()) return; 483 // only resolve to the first member of a union 484 resolveSingleAggrInit( *un->get_members().begin(), init, initEnd, sub ); 485 } // if 419 } 420 421 // set initializer expr to resolved express 422 singleInit->set_value( newExpr ); 423 424 // move cursor to next object in preparation for next initializer 425 currentObject.increment(); 486 426 } 487 427 488 428 void Resolver::visit( ListInit * listInit ) { 489 InitIterator iter = listInit->begin(); 490 InitIterator end = listInit->end(); 491 492 if ( ArrayType * at = dynamic_cast< ArrayType * >( initContext ) ) { 493 // resolve each member to the base type of the array 494 for ( ; iter != end; ++iter ) { 495 initContext = at->get_base(); 496 (*iter)->accept( *this ); 497 } // for 498 } else if ( TupleType * tt = dynamic_cast< TupleType * > ( initContext ) ) { 499 for ( Type * t : *tt ) { 500 if ( iter == end ) break; 501 initContext = t; 502 (*iter++)->accept( *this ); 503 } 504 } else if ( ReferenceToType * type = isStructOrUnion( initContext ) ) { 505 resolveAggrInit( type, iter, end ); 506 } else if ( TypeInstType * tt = dynamic_cast< TypeInstType * >( initContext ) ) { 507 Type * base = tt->get_baseType()->get_base(); 508 if ( base ) { 509 // know the implementation type, so try using that as the initContext 510 initContext = base; 511 visit( listInit ); 512 } else { 513 // missing implementation type -- might be an unknown type variable, so try proceeding with the current init context 514 Parent::visit( listInit ); 515 } 516 } else { 517 assert( dynamic_cast< BasicType * >( initContext ) || dynamic_cast< PointerType * >( initContext ) 518 || dynamic_cast< ZeroType * >( initContext ) || dynamic_cast< OneType * >( initContext ) || dynamic_cast < EnumInstType * > ( initContext ) ); 519 // basic types are handled here 520 Parent::visit( listInit ); 521 } 522 523 #if 0 524 if ( ArrayType *at = dynamic_cast<ArrayType*>(initContext) ) { 525 std::list<Initializer *>::iterator iter( listInit->begin_initializers() ); 526 for ( ; iter != listInit->end_initializers(); ++iter ) { 527 initContext = at->get_base(); 528 (*iter)->accept( *this ); 529 } // for 530 } else if ( StructInstType *st = dynamic_cast<StructInstType*>(initContext) ) { 531 StructDecl *baseStruct = st->get_baseStruct(); 532 std::list<Declaration *>::iterator iter1( baseStruct->get_members().begin() ); 533 std::list<Initializer *>::iterator iter2( listInit->begin_initializers() ); 534 for ( ; iter1 != baseStruct->get_members().end() && iter2 != listInit->end_initializers(); ++iter2 ) { 535 if ( (*iter2)->get_designators().empty() ) { 536 DeclarationWithType *dt = dynamic_cast<DeclarationWithType *>( *iter1 ); 537 initContext = dt->get_type(); 538 (*iter2)->accept( *this ); 539 ++iter1; 540 } else { 541 StructDecl *st = baseStruct; 542 iter1 = st->get_members().begin(); 543 std::list<Expression *>::iterator iter3( (*iter2)->get_designators().begin() ); 544 for ( ; iter3 != (*iter2)->get_designators().end(); ++iter3 ) { 545 NameExpr *key = dynamic_cast<NameExpr *>( *iter3 ); 546 assert( key ); 547 for ( ; iter1 != st->get_members().end(); ++iter1 ) { 548 if ( key->get_name() == (*iter1)->get_name() ) { 549 (*iter1)->print( cout ); 550 cout << key->get_name() << endl; 551 ObjectDecl *fred = dynamic_cast<ObjectDecl *>( *iter1 ); 552 assert( fred ); 553 StructInstType *mary = dynamic_cast<StructInstType*>( fred->get_type() ); 554 assert( mary ); 555 st = mary->get_baseStruct(); 556 iter1 = st->get_members().begin(); 557 break; 558 } // if 559 } // for 560 } // for 561 ObjectDecl *fred = dynamic_cast<ObjectDecl *>( *iter1 ); 562 assert( fred ); 563 initContext = fred->get_type(); 564 (*listInit->begin_initializers())->accept( *this ); 565 } // if 566 } // for 567 } else if ( UnionInstType *st = dynamic_cast<UnionInstType*>(initContext) ) { 568 DeclarationWithType *dt = dynamic_cast<DeclarationWithType *>( *st->get_baseUnion()->get_members().begin() ); 569 initContext = dt->get_type(); 570 (*listInit->begin_initializers())->accept( *this ); 571 } // if 572 #endif 429 // move cursor into brace-enclosed initializer-list 430 currentObject.enterListInit(); 431 // xxx - fix this so that the list isn't copied, iterator should be used to change current element 432 std::list<Designation *> newDesignations; 433 for ( auto p : group_iterate(listInit->get_designations(), listInit->get_initializers()) ) { 434 // iterate designations and initializers in pairs, moving the cursor to the current designated object and resolving 435 // the initializer against that object. 436 Designation * des = std::get<0>(p); 437 Initializer * init = std::get<1>(p); 438 newDesignations.push_back( currentObject.findNext( des ) ); 439 init->accept( *this ); 440 } 441 // set the set of 'resolved' designations and leave the brace-enclosed initializer-list 442 listInit->get_designations() = newDesignations; // xxx - memory management 443 currentObject.exitListInit(); 444 445 // xxx - this part has not be folded into CurrentObject yet 446 // } else if ( TypeInstType * tt = dynamic_cast< TypeInstType * >( initContext ) ) { 447 // Type * base = tt->get_baseType()->get_base(); 448 // if ( base ) { 449 // // know the implementation type, so try using that as the initContext 450 // ObjectDecl tmpObj( "", Type::StorageClasses(), LinkageSpec::Cforall, nullptr, base->clone(), nullptr ); 451 // currentObject = &tmpObj; 452 // visit( listInit ); 453 // } else { 454 // // missing implementation type -- might be an unknown type variable, so try proceeding with the current init context 455 // Parent::visit( listInit ); 456 // } 457 // } else { 573 458 } 574 459 -
src/ResolvExpr/Unify.cc
rfea3faa rb826e6b 606 606 } else if ( tupleParam ) { 607 607 // bundle other parameters into tuple to match 608 TupleType* binder = new TupleType{ paramTy->get_qualifiers() };608 std::list< Type * > binderTypes; 609 609 610 610 do { 611 binder ->get_types().push_back( otherParam->get_type()->clone() );611 binderTypes.push_back( otherParam->get_type()->clone() ); 612 612 ++jt; 613 613 … … 618 618 } while (true); 619 619 620 otherParamTy = binder;620 otherParamTy = new TupleType{ paramTy->get_qualifiers(), binderTypes }; 621 621 ++it; // skip ttype parameter for break 622 622 } else if ( otherTupleParam ) { 623 623 // bundle parameters into tuple to match other 624 TupleType* binder = new TupleType{ otherParamTy->get_qualifiers() };624 std::list< Type * > binderTypes; 625 625 626 626 do { 627 binder ->get_types().push_back( param->get_type()->clone() );627 binderTypes.push_back( param->get_type()->clone() ); 628 628 ++it; 629 629 … … 634 634 } while (true); 635 635 636 paramTy = binder;636 paramTy = new TupleType{ otherParamTy->get_qualifiers(), binderTypes }; 637 637 ++jt; // skip ttype parameter for break 638 638 } … … 756 756 return function->get_returnVals().front()->get_type()->clone(); 757 757 } else { 758 TupleType * tupleType = new TupleType( Type::Qualifiers() );758 std::list< Type * > types; 759 759 for ( DeclarationWithType * decl : function->get_returnVals() ) { 760 t upleType->get_types().push_back( decl->get_type()->clone() );760 types.push_back( decl->get_type()->clone() ); 761 761 } // for 762 return tupleType;762 return new TupleType( Type::Qualifiers(), types ); 763 763 } 764 764 } -
src/ResolvExpr/module.mk
rfea3faa rb826e6b 6 6 ## file "LICENCE" distributed with Cforall. 7 7 ## 8 ## module.mk -- 8 ## module.mk -- 9 9 ## 10 10 ## Author : Richard C. Bilson … … 31 31 ResolvExpr/PolyCost.cc \ 32 32 ResolvExpr/Occurs.cc \ 33 ResolvExpr/TypeEnvironment.cc 33 ResolvExpr/TypeEnvironment.cc \ 34 ResolvExpr/CurrentObject.cc -
src/SymTab/Autogen.cc
rfea3faa rb826e6b 9 9 // Author : Rob Schluntz 10 10 // Created On : Thu Mar 03 15:45:56 2016 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Mar 17 09:41:08201713 // Update Count : 6 011 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Jul 14 16:41:00 2017 13 // Update Count : 62 14 14 // 15 15 … … 400 400 /// generates struct constructors, destructor, and assignment functions 401 401 void makeStructFunctions( StructDecl *aggregateDecl, StructInstType *refType, unsigned int functionNesting, std::list< Declaration * > & declsToAdd, const std::vector< FuncData > & data ) { 402 // Builtins do not use autogeneration. 403 if ( aggregateDecl->get_linkage() == LinkageSpec::BuiltinCFA || 404 aggregateDecl->get_linkage() == LinkageSpec::BuiltinC ) { 405 return; 406 } 407 402 408 // Make function polymorphic in same parameters as generic struct, if applicable 403 409 const std::list< TypeDecl* > & typeParams = aggregateDecl->get_parameters(); // List of type variables to be placed on the generated functions -
src/SymTab/Autogen.h
rfea3faa rb826e6b 25 25 26 26 namespace SymTab { 27 /// Generates assignment operators, constructors, and destructor for aggregate types as required28 void autogenerateRoutines( std::list< Declaration * > &translationUnit );27 /// Generates assignment operators, constructors, and destructor for aggregate types as required 28 void autogenerateRoutines( std::list< Declaration * > &translationUnit ); 29 29 30 /// returns true if obj's name is the empty string and it has a bitfield width31 bool isUnnamedBitfield( ObjectDecl * obj );30 /// returns true if obj's name is the empty string and it has a bitfield width 31 bool isUnnamedBitfield( ObjectDecl * obj ); 32 32 33 /// size_t type - set when size_t typedef is seen. Useful in a few places,34 /// such as in determining array dimension type35 extern Type * SizeType;33 /// size_t type - set when size_t typedef is seen. Useful in a few places, 34 /// such as in determining array dimension type 35 extern Type * SizeType; 36 36 37 /// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls.38 template< typename OutputIterator >37 /// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls. 38 template< typename OutputIterator > 39 39 Statement * genCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false, bool forward = true ); 40 40 41 /// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Should only be called with non-array types.42 /// optionally returns a statement which must be inserted prior to the containing loop, if there is one43 template< typename OutputIterator >41 /// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Should only be called with non-array types. 42 /// optionally returns a statement which must be inserted prior to the containing loop, if there is one 43 template< typename OutputIterator > 44 44 Statement * genScalarCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast = false ) { 45 45 // want to be able to generate assignment, ctor, and dtor generically, … … 50 50 dstParam = new AddressExpr( dstParam ); 51 51 if ( addCast ) { 52 // cast to T* with qualifiers removed, so that qualified objects can be constructed 53 // and destructed with the same functions as non-qualified objects. 54 // unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument 55 // must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever 56 // remove lvalue as a qualifier, this can change to 57 // type->get_qualifiers() = Type::Qualifiers(); 58 assert( type ); 59 Type * castType = type->clone(); 60 // castType->get_qualifiers() -= Type::Qualifiers(true, true, true, false, true, false); 61 castType->get_qualifiers() -= Type::Qualifiers( Type::Const | Type::Volatile | Type::Restrict | Type::Atomic ); 62 castType->set_lvalue( true ); // xxx - might not need this 63 dstParam = new CastExpr( dstParam, new PointerType( Type::Qualifiers(), castType ) ); 52 // cast to T* with qualifiers removed, so that qualified objects can be constructed 53 // and destructed with the same functions as non-qualified objects. 54 // unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument 55 // must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever 56 // remove lvalue as a qualifier, this can change to 57 // type->get_qualifiers() = Type::Qualifiers(); 58 assert( type ); 59 Type * castType = type->clone(); 60 castType->get_qualifiers() -= Type::Qualifiers( Type::Const | Type::Volatile | Type::Restrict | Type::Atomic ); 61 castType->set_lvalue( true ); // xxx - might not need this 62 dstParam = new CastExpr( dstParam, new PointerType( Type::Qualifiers(), castType ) ); 64 63 } 65 64 fExpr->get_args().push_back( dstParam ); … … 75 74 76 75 return listInit; 77 }78 79 /// Store in out a loop which calls fname on each element of the array with srcParam and dstParam as arguments.80 /// If forward is true, loop goes from 0 to N-1, else N-1 to 081 template< typename OutputIterator >82 void genArrayCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, ArrayType *array, bool addCast = false, bool forward = true ) {83 static UniqueName indexName( "_index" );84 85 // for a flexible array member nothing is done -- user must define own assignment86 if ( ! array->get_dimension() ) return ;87 88 Expression * begin, * end, * update, * cmp;89 if ( forward ) {90 // generate: for ( int i = 0; i < N; ++i )91 begin = new ConstantExpr( Constant::from_int( 0 ) );92 end = array->get_dimension()->clone();93 cmp = new NameExpr( "?<?" );94 update = new NameExpr( "++?" );95 } else {96 // generate: for ( int i = N-1; i >= 0; --i )97 begin = new UntypedExpr( new NameExpr( "?-?" ) );98 ((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() );99 ((UntypedExpr*)begin)->get_args().push_back( new ConstantExpr( Constant::from_int( 1 ) ) );100 end = new ConstantExpr( Constant::from_int( 0 ) );101 cmp = new NameExpr( "?>=?" );102 update = new NameExpr( "--?" );103 76 } 104 77 105 ObjectDecl *index = new ObjectDecl( indexName.newName(), Type::StorageClasses(), LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), new SingleInit( begin, std::list<Expression*>() ) ); 78 /// Store in out a loop which calls fname on each element of the array with srcParam and dstParam as arguments. 79 /// If forward is true, loop goes from 0 to N-1, else N-1 to 0 80 template< typename OutputIterator > 81 void genArrayCall( InitTweak::InitExpander & srcParam, Expression *dstParam, const std::string & fname, OutputIterator out, ArrayType *array, bool addCast = false, bool forward = true ) { 82 static UniqueName indexName( "_index" ); 106 83 107 UntypedExpr *cond = new UntypedExpr( cmp ); 108 cond->get_args().push_back( new VariableExpr( index ) ); 109 cond->get_args().push_back( end ); 84 // for a flexible array member nothing is done -- user must define own assignment 85 if ( ! array->get_dimension() ) return ; 110 86 111 UntypedExpr *inc = new UntypedExpr( update ); 112 inc->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) ); 87 Expression * begin, * end, * update, * cmp; 88 if ( forward ) { 89 // generate: for ( int i = 0; i < N; ++i ) 90 begin = new ConstantExpr( Constant::from_int( 0 ) ); 91 end = array->get_dimension()->clone(); 92 cmp = new NameExpr( "?<?" ); 93 update = new NameExpr( "++?" ); 94 } else { 95 // generate: for ( int i = N-1; i >= 0; --i ) 96 begin = new UntypedExpr( new NameExpr( "?-?" ) ); 97 ((UntypedExpr*)begin)->get_args().push_back( array->get_dimension()->clone() ); 98 ((UntypedExpr*)begin)->get_args().push_back( new ConstantExpr( Constant::from_int( 1 ) ) ); 99 end = new ConstantExpr( Constant::from_int( 0 ) ); 100 cmp = new NameExpr( "?>=?" ); 101 update = new NameExpr( "--?" ); 102 } 113 103 114 UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?[?]" ) ); 115 dstIndex->get_args().push_back( dstParam ); 116 dstIndex->get_args().push_back( new VariableExpr( index ) ); 117 dstParam = dstIndex; 104 ObjectDecl *index = new ObjectDecl( indexName.newName(), Type::StorageClasses(), LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), new SingleInit( begin ) ); 118 105 119 // srcParam must keep track of the array indices to build the120 // source parameter and/or array list initializer121 srcParam.addArrayIndex( new VariableExpr( index ), array->get_dimension()->clone());106 UntypedExpr *cond = new UntypedExpr( cmp ); 107 cond->get_args().push_back( new VariableExpr( index ) ); 108 cond->get_args().push_back( end ); 122 109 123 // for stmt's body, eventually containing call 124 CompoundStmt * body = new CompoundStmt( noLabels ); 125 Statement * listInit = genCall( srcParam, dstParam, fname, back_inserter( body->get_kids() ), array->get_base(), addCast, forward ); 110 UntypedExpr *inc = new UntypedExpr( update ); 111 inc->get_args().push_back( new AddressExpr( new VariableExpr( index ) ) ); 126 112 127 // block containing for stmt and index variable 128 std::list<Statement *> initList; 129 CompoundStmt * block = new CompoundStmt( noLabels ); 130 block->get_kids().push_back( new DeclStmt( noLabels, index ) ); 131 if ( listInit ) block->get_kids().push_back( listInit ); 132 block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, body ) ); 113 UntypedExpr *dstIndex = new UntypedExpr( new NameExpr( "?[?]" ) ); 114 dstIndex->get_args().push_back( dstParam ); 115 dstIndex->get_args().push_back( new VariableExpr( index ) ); 116 dstParam = dstIndex; 133 117 134 *out++ = block; 135 } 118 // srcParam must keep track of the array indices to build the 119 // source parameter and/or array list initializer 120 srcParam.addArrayIndex( new VariableExpr( index ), array->get_dimension()->clone() ); 136 121 137 template< typename OutputIterator > 122 // for stmt's body, eventually containing call 123 CompoundStmt * body = new CompoundStmt( noLabels ); 124 Statement * listInit = genCall( srcParam, dstParam, fname, back_inserter( body->get_kids() ), array->get_base(), addCast, forward ); 125 126 // block containing for stmt and index variable 127 std::list<Statement *> initList; 128 CompoundStmt * block = new CompoundStmt( noLabels ); 129 block->get_kids().push_back( new DeclStmt( noLabels, index ) ); 130 if ( listInit ) block->get_kids().push_back( listInit ); 131 block->get_kids().push_back( new ForStmt( noLabels, initList, cond, inc, body ) ); 132 133 *out++ = block; 134 } 135 136 template< typename OutputIterator > 138 137 Statement * genCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, Type * type, bool addCast, bool forward ) { 139 if ( ArrayType * at = dynamic_cast< ArrayType * >( type ) ) { 140 genArrayCall( srcParam, dstParam, fname, out, at, addCast, forward ); 141 return 0; 142 } else { 143 return genScalarCall( srcParam, dstParam, fname, out, type, addCast ); 138 if ( ArrayType * at = dynamic_cast< ArrayType * >( type ) ) { 139 genArrayCall( srcParam, dstParam, fname, out, at, addCast, forward ); 140 return 0; 141 } else { 142 return genScalarCall( srcParam, dstParam, fname, out, type, addCast ); 143 } 144 144 } 145 }146 145 147 /// inserts into out a generated call expression to function fname with arguments dstParam148 /// and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls. decl is the149 /// object being constructed. The function wraps constructor and destructor calls in an150 /// ImplicitCtorDtorStmt node.151 template< typename OutputIterator >146 /// inserts into out a generated call expression to function fname with arguments dstParam 147 /// and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls. decl is the 148 /// object being constructed. The function wraps constructor and destructor calls in an 149 /// ImplicitCtorDtorStmt node. 150 template< typename OutputIterator > 152 151 void genImplicitCall( InitTweak::InitExpander & srcParam, Expression * dstParam, const std::string & fname, OutputIterator out, DeclarationWithType * decl, bool forward = true ) { 153 ObjectDecl *obj = dynamic_cast<ObjectDecl *>( decl );154 assert( obj );155 // unnamed bit fields are not copied as they cannot be accessed156 if ( isUnnamedBitfield( obj ) ) return;152 ObjectDecl *obj = dynamic_cast<ObjectDecl *>( decl ); 153 assert( obj ); 154 // unnamed bit fields are not copied as they cannot be accessed 155 if ( isUnnamedBitfield( obj ) ) return; 157 156 158 bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) );159 std::list< Statement * > stmts;160 genCall( srcParam, dstParam, fname, back_inserter( stmts ), obj->get_type(), addCast, forward );157 bool addCast = (fname == "?{}" || fname == "^?{}") && ( !obj || ( obj && obj->get_bitfieldWidth() == NULL ) ); 158 std::list< Statement * > stmts; 159 genCall( srcParam, dstParam, fname, back_inserter( stmts ), obj->get_type(), addCast, forward ); 161 160 162 // currently genCall should produce at most one element, but if that changes then the next line needs to be updated to grab the statement which contains the call 163 assert( stmts.size() <= 1 ); 164 if ( stmts.size() == 1 ) { 165 Statement * callStmt = stmts.front(); 166 if ( addCast ) { 167 // implicitly generated ctor/dtor calls should be wrapped 168 // so that later passes are aware they were generated. 169 // xxx - don't mark as an implicit ctor/dtor if obj is a bitfield, 170 // because this causes the address to be taken at codegen, which is illegal in C. 171 callStmt = new ImplicitCtorDtorStmt( callStmt ); 172 } 173 *out++ = callStmt; 161 // currently genCall should produce at most one element, but if that changes then the next line needs to be updated to grab the statement which contains the call 162 assert( stmts.size() <= 1 ); 163 if ( stmts.size() == 1 ) { 164 Statement * callStmt = stmts.front(); 165 if ( addCast ) { 166 // implicitly generated ctor/dtor calls should be wrapped 167 // so that later passes are aware they were generated. 168 // xxx - don't mark as an implicit ctor/dtor if obj is a bitfield, 169 // because this causes the address to be taken at codegen, which is illegal in C. 170 callStmt = new ImplicitCtorDtorStmt( callStmt ); 171 } 172 *out++ = callStmt; 173 } 174 174 } 175 }176 175 } // namespace SymTab 177 176 #endif // AUTOGEN_H -
src/SymTab/ImplementationType.cc
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // ImplementationType.cc -- 7 // ImplementationType.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 92 92 93 93 void ImplementationType::visit(TupleType *tupleType) { 94 TupleType *newType = new TupleType( Type::Qualifiers() );94 std::list< Type * > types; 95 95 for ( std::list< Type* >::iterator i = tupleType->get_types().begin(); i != tupleType->get_types().end(); ++i ) { 96 96 Type *implType = implementationType( *i, indexer ); 97 97 implType->get_qualifiers() |= tupleType->get_qualifiers(); 98 newType->get_types().push_back( implType );98 types.push_back( implType ); 99 99 } // for 100 result = new Type;100 result = new TupleType( Type::Qualifiers(), types ); 101 101 } 102 102 -
src/SymTab/Indexer.cc
rfea3faa rb826e6b 652 652 for ( MangleTable::const_iterator decl = mangleTable.begin(); decl != mangleTable.end(); ++decl ) { 653 653 // check for C decls with the same name, skipping those with a compatible type (by mangleName) 654 if ( decl->second->get_linkage() == LinkageSpec::C&& decl->first != mangleName ) return true;654 if ( ! LinkageSpec::isMangled( decl->second->get_linkage() ) && decl->first != mangleName ) return true; 655 655 } 656 656 } … … 669 669 // check for C decls with the same name, skipping 670 670 // those with an incompatible type (by mangleName) 671 if ( decl->second->get_linkage() == LinkageSpec::C&& decl->first == mangleName ) return true;671 if ( ! LinkageSpec::isMangled( decl->second->get_linkage() ) && decl->first == mangleName ) return true; 672 672 } 673 673 } … … 724 724 // new definition shadows the autogenerated one, even at the same scope 725 725 return false; 726 } else if ( added->get_linkage() != LinkageSpec::C|| ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) {726 } else if ( LinkageSpec::isMangled( added->get_linkage() ) || ResolvExpr::typesCompatible( added->get_type(), existing->get_type(), Indexer() ) ) { 727 727 // typesCompatible doesn't really do the right thing here. When checking compatibility of function types, 728 728 // we should ignore outermost pointer qualifiers, except _Atomic? … … 765 765 766 766 // this ensures that no two declarations with the same unmangled name at the same scope both have C linkage 767 if ( decl->get_linkage() == LinkageSpec::C) {767 if ( ! LinkageSpec::isMangled( decl->get_linkage() ) ) { 768 768 // NOTE this is broken in Richard's original code in such a way that it never triggers (it 769 769 // doesn't check decls that have the same manglename, and all C-linkage decls are defined to -
src/SymTab/Mangler.cc
rfea3faa rb826e6b 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:40:29 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Mar 17 09:40:01201713 // Update Count : 2 011 // Last Modified By : Andrew Beach 12 // Last Modified On : Wed Jun 28 15:31:00 2017 13 // Update Count : 21 14 14 // 15 15 … … 72 72 } else { 73 73 // if we add another kind of overridable function, this has to change 74 assert( false );74 assert( false && "unknown overrideable linkage" ); 75 75 } // if 76 76 } -
src/SymTab/Validate.cc
rfea3faa rb826e6b 106 106 107 107 /// Fix return types so that every function returns exactly one value 108 class ReturnTypeFixer { 109 public: 108 struct ReturnTypeFixer { 110 109 static void fix( std::list< Declaration * > &translationUnit ); 111 110 … … 115 114 116 115 /// Replaces enum types by int, and function or array types in function parameter and return lists by appropriate pointers. 117 class EnumAndPointerDecay { 118 public: 116 struct EnumAndPointerDecay { 119 117 void previsit( EnumDecl *aggregateDecl ); 120 118 void previsit( FunctionType *func ); … … 159 157 }; 160 158 161 class ReturnChecker : public WithScopes { 162 public: 159 struct ReturnChecker : public WithGuards { 163 160 /// Checks that return statements return nothing if their return type is void 164 161 /// and return something if the return type is non-void. 165 162 static void checkFunctionReturns( std::list< Declaration * > & translationUnit ); 166 private: 163 167 164 void previsit( FunctionDecl * functionDecl ); 168 165 void previsit( ReturnStmt * returnStmt ); … … 205 202 }; 206 203 207 class VerifyCtorDtorAssign { 208 public: 204 struct VerifyCtorDtorAssign { 209 205 /// ensure that constructors, destructors, and assignment have at least one 210 206 /// parameter, the first of which must be a pointer, and that ctor/dtors have no … … 216 212 217 213 /// ensure that generic types have the correct number of type arguments 218 class ValidateGenericParameters { 219 public: 214 struct ValidateGenericParameters { 220 215 void previsit( StructInstType * inst ); 221 216 void previsit( UnionInstType * inst ); 222 217 }; 223 218 224 class ArrayLength { 225 public: 219 struct ArrayLength { 226 220 /// for array types without an explicit length, compute the length and store it so that it 227 221 /// is known to the rest of the phases. For example, … … 236 230 }; 237 231 238 class CompoundLiteral final : public GenPoly::DeclMutator{232 struct CompoundLiteral final : public WithDeclsToAdd, public WithVisitorRef<CompoundLiteral> { 239 233 Type::StorageClasses storageClasses; 240 234 241 using GenPoly::DeclMutator::mutate; 242 DeclarationWithType * mutate( ObjectDecl *objectDecl ) final; 243 Expression *mutate( CompoundLiteralExpr *compLitExpr ) final; 235 void premutate( ObjectDecl *objectDecl ); 236 Expression * postmutate( CompoundLiteralExpr *compLitExpr ); 244 237 }; 245 238 … … 248 241 LinkReferenceToTypes lrt( doDebug, 0 ); 249 242 ForallPointerDecay fpd( 0 ); 250 CompoundLiteralcompoundliteral;243 PassVisitor<CompoundLiteral> compoundliteral; 251 244 PassVisitor<ValidateGenericParameters> genericParams; 252 245 … … 263 256 Concurrency::implementThreadStarter( translationUnit ); 264 257 ReturnChecker::checkFunctionReturns( translationUnit ); 265 compoundliteral.mutateDeclarationList( translationUnit);258 mutateAll( translationUnit, compoundliteral ); 266 259 acceptAll( translationUnit, fpd ); 267 260 ArrayLength::computeLength( translationUnit ); … … 883 876 } 884 877 885 DeclarationWithType * CompoundLiteral::mutate( ObjectDecl *objectDecl ) {878 void CompoundLiteral::premutate( ObjectDecl *objectDecl ) { 886 879 storageClasses = objectDecl->get_storageClasses(); 887 DeclarationWithType * temp = Mutator::mutate( objectDecl ); 888 return temp; 889 } 890 891 Expression *CompoundLiteral::mutate( CompoundLiteralExpr *compLitExpr ) { 880 } 881 882 Expression *CompoundLiteral::postmutate( CompoundLiteralExpr *compLitExpr ) { 892 883 // transform [storage_class] ... (struct S){ 3, ... }; 893 884 // into [storage_class] struct S temp = { 3, ... }; 894 885 static UniqueName indexName( "_compLit" ); 895 886 896 ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageClasses, LinkageSpec::C, 0, compLitExpr->get_result(), compLitExpr->get_initializer() );897 compLitExpr->set_result( 0);898 compLitExpr->set_initializer( 0);887 ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageClasses, LinkageSpec::C, nullptr, compLitExpr->get_result(), compLitExpr->get_initializer() ); 888 compLitExpr->set_result( nullptr ); 889 compLitExpr->set_initializer( nullptr ); 899 890 delete compLitExpr; 900 DeclarationWithType * newtempvar = mutate( tempvar ); 901 addDeclaration( newtempvar ); // add modified temporary to current block 902 return new VariableExpr( newtempvar ); 891 declsToAddBefore.push_back( tempvar ); // add modified temporary to current block 892 return new VariableExpr( tempvar ); 903 893 } 904 894 -
src/SymTab/module.mk
rfea3faa rb826e6b 10 10 ## Author : Richard C. Bilson 11 11 ## Created On : Mon Jun 1 17:49:17 2015 12 ## Last Modified By : Rob Schluntz13 ## Last Modified On : Tue Jul 07 16:22:23 201514 ## Update Count : 212 ## Last Modified By : Andrew Beach 13 ## Last Modified On : Wed Jul 12 13:06:00 2017 14 ## Update Count : 3 15 15 ############################################################################### 16 16 … … 21 21 SymTab/ImplementationType.cc \ 22 22 SymTab/TypeEquality.cc \ 23 SymTab/Autogen.cc 23 SymTab/Autogen.cc \ 24 SymTab/TreeStruct.cc -
src/SynTree/AggregateDecl.cc
rfea3faa rb826e6b 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 23:56:39 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : T hu Mar 16 07:49:07201713 // Update Count : 2 011 // Last Modified By : Andrew Beach 12 // Last Modified On : Tus Jun 27 15:30:00 2017 13 // Update Count : 21 14 14 // 15 15 … … 20 20 21 21 22 AggregateDecl::AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes ) : Parent( name, Type::StorageClasses(), LinkageSpec::Cforall), body( false ), attributes( attributes ) {22 AggregateDecl::AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes, LinkageSpec::Spec linkage ) : Parent( name, Type::StorageClasses(), linkage ), body( false ), attributes( attributes ) { 23 23 } 24 24 -
src/SynTree/Constant.cc
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Constant.cc -- 7 // Constant.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Jun 22 10:11:00 201713 // Update Count : 2 812 // Last Modified On : Fri Jul 14 14:50:00 2017 13 // Update Count : 29 14 14 // 15 15 … … 46 46 } 47 47 48 Constant Constant::null( Type * ptrtype ) { 49 if ( nullptr == ptrtype ) { 50 ptrtype = new PointerType( 51 Type::Qualifiers(), 52 new VoidType( Type::Qualifiers() ) 53 ); 54 } 55 56 return Constant( ptrtype, "0", (unsigned long long int)0 ); 57 } 58 59 unsigned long long Constant::get_ival() const { 60 assertf( safe_dynamic_cast<BasicType*>(type)->isInteger(), "Attempt to retrieve ival from non-integer constant." ); 61 return val.ival; 62 } 63 64 double Constant::get_dval() const { 65 assertf( ! safe_dynamic_cast<BasicType*>(type)->isInteger(), "Attempt to retrieve dval from integer constant." ); 66 return val.dval; 67 } 68 48 69 void Constant::print( std::ostream &os ) const { 49 70 os << "(" << rep << " " << val.ival; -
src/SynTree/Constant.h
rfea3faa rb826e6b 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // Constant.h -- 7 // Constant.h -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Jun 22 10:13:00 201713 // Update Count : 1 512 // Last Modified On : Fri Jul 14 13:33:00 2017 13 // Update Count : 16 14 14 // 15 15 … … 32 32 std::string & get_value() { return rep; } 33 33 void set_value( std::string newValue ) { rep = newValue; } 34 unsigned long long get_ival() const; 35 double get_dval() const; 34 36 35 37 /// generates a boolean constant of the given bool … … 41 43 /// generates a floating point constant of the given double 42 44 static Constant from_double( double d ); 45 46 /// generates a null pointer value for the given type. void * if omitted. 47 static Constant null( Type * ptrtype = nullptr ); 43 48 44 49 virtual void accept( Visitor & v ) { v.visit( this ); } -
src/SynTree/Declaration.h
rfea3faa rb826e6b 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Fri Mar 17 16:05:08201713 // Update Count : 12 111 // Last Modified By : Andrew Beach 12 // Last Modified On : Fri Jul 14 16:59:00 2017 13 // Update Count : 123 14 14 // 15 15 … … 238 238 typedef Declaration Parent; 239 239 public: 240 AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() );240 AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ); 241 241 AggregateDecl( const AggregateDecl &other ); 242 242 virtual ~AggregateDecl(); … … 266 266 typedef AggregateDecl Parent; 267 267 public: 268 StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes ), kind( kind ) {} 268 StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( kind ), tagged( false ), parent_name( "" ) {} 269 StructDecl( const std::string &name, const std::string *parent, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ), kind( DeclarationNode::Struct ), tagged( true ), parent_name( parent ? *parent : "" ) {} 269 270 StructDecl( const StructDecl &other ) : Parent( other ) {} 270 271 … … 273 274 bool is_thread() { return kind == DeclarationNode::Thread; } 274 275 276 // Tagged/Tree Structure Excetion 277 bool get_tagged() { return tagged; } 278 void set_tagged( bool newValue ) { tagged = newValue; } 279 bool has_parent() { return parent_name != ""; } 280 std::string get_parentName() { return parent_name; } 281 275 282 virtual StructDecl *clone() const { return new StructDecl( *this ); } 276 283 virtual void accept( Visitor &v ) { v.visit( this ); } … … 279 286 DeclarationNode::Aggregate kind; 280 287 virtual std::string typeString() const; 288 289 bool tagged; 290 std::string parent_name; 281 291 }; 282 292 … … 284 294 typedef AggregateDecl Parent; 285 295 public: 286 UnionDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes) {}296 UnionDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ) {} 287 297 UnionDecl( const UnionDecl &other ) : Parent( other ) {} 288 298 … … 297 307 typedef AggregateDecl Parent; 298 308 public: 299 EnumDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes) {}309 EnumDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >(), LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage ) {} 300 310 EnumDecl( const EnumDecl &other ) : Parent( other ) {} 301 311 -
src/SynTree/Expression.cc
rfea3faa rb826e6b 21 21 #include <iterator> 22 22 23 #include "Declaration.h" 24 #include "Expression.h" 25 #include "Initializer.h" 26 #include "Statement.h" 23 27 #include "Type.h" 24 #include "Initializer.h"25 #include "Expression.h"26 #include "Declaration.h"27 #include "Statement.h"28 28 #include "TypeSubstitution.h" 29 #include "VarExprReplacer.h" 30 29 31 #include "Common/utility.h" 32 #include "Common/PassVisitor.h" 33 30 34 #include "InitTweak/InitTweak.h" 31 35 … … 92 96 93 97 Declaration *decl = get_var(); 94 // if ( decl != 0) decl->print(os, indent + 2);95 98 if ( decl != 0) decl->printShort(os, indent + 2); 96 99 os << std::endl; … … 657 660 } 658 661 662 InitAlternative::InitAlternative( Type * type, Designation * designation ) : type( type ), designation( designation ) {} 663 InitAlternative::InitAlternative( const InitAlternative & other ) : type( maybeClone( other.type ) ), designation( maybeClone( other.designation ) ) {} 664 InitAlternative::~InitAlternative() { 665 delete type; 666 delete designation; 667 } 668 669 UntypedInitExpr::UntypedInitExpr( Expression * expr, const std::list<InitAlternative> & initAlts ) : expr( expr ), initAlts( initAlts ) {} 670 UntypedInitExpr::UntypedInitExpr( const UntypedInitExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ), initAlts( other.initAlts ) {} 671 UntypedInitExpr::~UntypedInitExpr() { 672 delete expr; 673 } 674 675 void UntypedInitExpr::print( std::ostream & os, int indent ) const { 676 os << "Untyped Init Expression" << std::endl << std::string( indent+2, ' ' ); 677 expr->print( os, indent+2 ); 678 if ( ! initAlts.empty() ) { 679 for ( const InitAlternative & alt : initAlts ) { 680 os << std::string( indent+2, ' ' ) << "InitAlternative: "; 681 alt.type->print( os, indent+2 ); 682 alt.designation->print( os, indent+2 ); 683 } 684 } 685 } 686 687 InitExpr::InitExpr( Expression * expr, Designation * designation ) : expr( expr ), designation( designation ) { 688 set_result( expr->get_result()->clone() ); 689 } 690 InitExpr::InitExpr( const InitExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ), designation( maybeClone( other.designation) ) {} 691 InitExpr::~InitExpr() { 692 delete expr; 693 delete designation; 694 } 695 696 void InitExpr::print( std::ostream & os, int indent ) const { 697 os << "Init Expression" << std::endl << std::string( indent+2, ' ' ); 698 expr->print( os, indent+2 ); 699 os << std::string( indent+2, ' ' ) << "with designation: "; 700 designation->print( os, indent+2 ); 701 } 702 703 659 704 std::ostream & operator<<( std::ostream & out, const Expression * expr ) { 660 705 if ( expr ) { -
src/SynTree/Expression.h
rfea3faa rb826e6b 744 744 }; 745 745 746 struct InitAlternative { 747 public: 748 Type * type = nullptr; 749 Designation * designation = nullptr; 750 InitAlternative( Type * type, Designation * designation ); 751 InitAlternative( const InitAlternative & other ); 752 InitAlternative & operator=( const Initializer & other ) = delete; // at the moment this isn't used, and I don't want to implement it 753 ~InitAlternative(); 754 }; 755 756 class UntypedInitExpr : public Expression { 757 public: 758 UntypedInitExpr( Expression * expr, const std::list<InitAlternative> & initAlts ); 759 UntypedInitExpr( const UntypedInitExpr & other ); 760 ~UntypedInitExpr(); 761 762 Expression * get_expr() const { return expr; } 763 UntypedInitExpr * set_expr( Expression * newValue ) { expr = newValue; return this; } 764 765 std::list<InitAlternative> & get_initAlts() { return initAlts; } 766 767 virtual UntypedInitExpr * clone() const { return new UntypedInitExpr( * this ); } 768 virtual void accept( Visitor & v ) { v.visit( this ); } 769 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 770 virtual void print( std::ostream & os, int indent = 0 ) const; 771 private: 772 Expression * expr; 773 std::list<InitAlternative> initAlts; 774 }; 775 776 class InitExpr : public Expression { 777 public: 778 InitExpr( Expression * expr, Designation * designation ); 779 InitExpr( const InitExpr & other ); 780 ~InitExpr(); 781 782 Expression * get_expr() const { return expr; } 783 InitExpr * set_expr( Expression * newValue ) { expr = newValue; return this; } 784 785 Designation * get_designation() const { return designation; } 786 InitExpr * set_designation( Designation * newValue ) { designation = newValue; return this; } 787 788 virtual InitExpr * clone() const { return new InitExpr( * this ); } 789 virtual void accept( Visitor & v ) { v.visit( this ); } 790 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 791 virtual void print( std::ostream & os, int indent = 0 ) const; 792 private: 793 Expression * expr; 794 Designation * designation; 795 }; 796 797 746 798 std::ostream & operator<<( std::ostream & out, const Expression * expr ); 747 799 -
src/SynTree/Initializer.cc
rfea3faa rb826e6b 19 19 #include "Common/utility.h" 20 20 21 Designation::Designation( const std::list< Expression * > & designators ) : designators( designators ) {} 22 Designation::Designation( const Designation & other ) : BaseSyntaxNode( other ) { 23 // std::cerr << "cloning designation" << std::endl; 24 cloneAll( other.designators, designators ); 25 // std::cerr << "finished cloning designation" << std::endl; 26 } 27 28 Designation::~Designation() { 29 // std::cerr << "destroying designation" << std::endl; 30 deleteAll( designators ); 31 // std::cerr << "finished destroying designation" << std::endl; 32 } 33 34 void Designation::print( std::ostream &os, int indent ) const { 35 if ( ! designators.empty() ) { 36 os << std::string(indent + 2, ' ' ) << "designated by: " << std::endl; 37 for ( std::list < Expression * >::const_iterator i = designators.begin(); i != designators.end(); i++ ) { 38 os << std::string(indent + 4, ' ' ); 39 ( *i )->print(os, indent + 4 ); 40 } 41 os << std::endl; 42 } // if 43 } 44 21 45 Initializer::Initializer( bool maybeConstructed ) : maybeConstructed( maybeConstructed ) {} 22 46 Initializer::Initializer( const Initializer & other ) : BaseSyntaxNode( other ), maybeConstructed( other.maybeConstructed ) { 23 47 } 24 25 26 48 Initializer::~Initializer() {} 27 49 28 std::string Initializer::designator_name( Expression *des ) { 29 if ( NameExpr *n = dynamic_cast<NameExpr *>(des) ) 30 return n->get_name(); 31 else 32 throw 0; 33 } 34 35 // void Initializer::print( __attribute__((unused)) std::ostream &os, __attribute__((unused)) int indent ) {} 36 37 SingleInit::SingleInit( Expression *v, const std::list< Expression *> &_designators, bool maybeConstructed ) : Initializer( maybeConstructed ), value ( v ), designators( _designators ) { 50 SingleInit::SingleInit( Expression *v, bool maybeConstructed ) : Initializer( maybeConstructed ), value ( v ) { 38 51 } 39 52 40 53 SingleInit::SingleInit( const SingleInit &other ) : Initializer(other), value ( maybeClone( other.value ) ) { 41 cloneAll(other.designators, designators );42 54 } 43 55 44 56 SingleInit::~SingleInit() { 45 57 delete value; 46 deleteAll(designators);47 58 } 48 59 49 void SingleInit::print( std::ostream &os, int indent ) {50 os << std:: endl << std::string(indent, ' ' ) << "Simple Initializer: " << std::endl;60 void SingleInit::print( std::ostream &os, int indent ) const { 61 os << std::string(indent, ' ' ) << "Simple Initializer: " << std::endl; 51 62 os << std::string(indent+4, ' ' ); 52 63 value->print( os, indent+4 ); 53 54 if ( ! designators.empty() ) {55 os << std::endl << std::string(indent + 2, ' ' ) << "designated by: " << std::endl;56 for ( std::list < Expression * >::iterator i = designators.begin(); i != designators.end(); i++ ) {57 os << std::string(indent + 4, ' ' );58 ( *i )->print(os, indent + 4 );59 }60 } // if61 64 } 62 65 63 ListInit::ListInit( const std::list<Initializer*> &_initializers, const std::list<Expression *> &_designators, bool maybeConstructed ) 64 : Initializer( maybeConstructed ), initializers( _initializers ), designators( _designators ) { 66 67 ListInit::ListInit( const std::list<Initializer*> &inits, const std::list<Designation *> &des, bool maybeConstructed ) 68 : Initializer( maybeConstructed ), initializers( inits ), designations( des ) { 69 // handle the common case where a ListInit is created without designations by making a list of empty designations with the same length as the initializer 70 if ( designations.empty() ) { 71 for ( auto & i : initializers ) { 72 (void)i; 73 designations.push_back( new Designation( {} ) ); 74 } 75 } 76 assertf( initializers.size() == designations.size(), "Created ListInit with mismatching initializers (%d) and designations (%d)", initializers.size(), designations.size() ); 65 77 } 66 78 67 79 ListInit::ListInit( const ListInit & other ) : Initializer( other ) { 68 80 cloneAll( other.initializers, initializers ); 69 cloneAll( other.designat ors, designators );81 cloneAll( other.designations, designations ); 70 82 } 71 72 83 73 84 ListInit::~ListInit() { 74 85 deleteAll( initializers ); 75 deleteAll( designat ors );86 deleteAll( designations ); 76 87 } 77 88 78 void ListInit::print( std::ostream &os, int indent ) { 79 os << std::endl << std::string(indent, ' ') << "Compound initializer: "; 80 if ( ! designators.empty() ) { 81 os << std::string(indent + 2, ' ' ) << "designated by: ["; 82 for ( std::list < Expression * >::iterator i = designators.begin(); 83 i != designators.end(); i++ ) { 84 ( *i )->print(os, indent + 4 ); 85 } // for 89 void ListInit::print( std::ostream &os, int indent ) const { 90 os << std::string(indent, ' ') << "Compound initializer: " << std::endl; 91 for ( Designation * d : designations ) { 92 d->print( os, indent + 2 ); 93 } 86 94 87 os << std::string(indent + 2, ' ' ) << "]"; 88 } // if 89 90 for ( std::list<Initializer *>::iterator i = initializers.begin(); i != initializers.end(); i++ ) 91 (*i)->print( os, indent + 2 ); 95 for ( const Initializer * init : initializers ) { 96 init->print( os, indent + 2 ); 97 os << std::endl; 98 } 92 99 } 93 100 … … 103 110 } 104 111 105 void ConstructorInit::print( std::ostream &os, int indent ) {112 void ConstructorInit::print( std::ostream &os, int indent ) const { 106 113 os << std::endl << std::string(indent, ' ') << "Constructor initializer: " << std::endl; 107 114 if ( ctor ) { … … 124 131 } 125 132 126 std::ostream & operator<<( std::ostream & out, Initializer * init ) { 127 init->print( out ); 133 std::ostream & operator<<( std::ostream & out, const Initializer * init ) { 134 if ( init ) { 135 init->print( out ); 136 } else { 137 out << "nullptr"; 138 } 139 return out; 140 } 141 142 std::ostream & operator<<( std::ostream & out, const Designation * des ) { 143 if ( des ) { 144 des->print( out ); 145 } else { 146 out << "nullptr"; 147 } 128 148 return out; 129 149 } -
src/SynTree/Initializer.h
rfea3faa rb826e6b 25 25 #include "Visitor.h" 26 26 27 const std::list<Expression*> noDesignators; 27 // Designation: list of designator (NameExpr, VariableExpr, and ConstantExpr) expressions that specify an object being initialized. 28 class Designation : public BaseSyntaxNode { 29 public: 30 Designation( const std::list< Expression * > & designators ); 31 Designation( const Designation & other ); 32 virtual ~Designation(); 33 34 std::list< Expression * > & get_designators() { return designators; } 35 36 virtual Designation * clone() const { return new Designation( *this ); }; 37 virtual void accept( Visitor &v ) { v.visit( this ); } 38 virtual Designation * acceptMutator( Mutator &m ) { return m.mutate( this ); } 39 virtual void print( std::ostream &os, int indent = 0 ) const; 40 private: 41 std::list< Expression * > designators; 42 }; 43 44 const std::list<Designation *> noDesignators; 28 45 29 46 // Initializer: base class for object initializers (provide default values) 30 47 class Initializer : public BaseSyntaxNode { 31 48 public: 32 // Initializer( std::string _name = std::string(""), int _pos = 0 );33 49 Initializer( bool maybeConstructed ); 34 50 Initializer( const Initializer & other ); 35 51 virtual ~Initializer(); 36 37 static std::string designator_name( Expression *designator );38 39 // void set_name( std::string newValue ) { name = newValue; }40 // std::string get_name() const { return name; }41 42 // void set_pos( int newValue ) { pos = newValue; }43 // int get_pos() const { return pos; }44 virtual void set_designators( std::list<Expression *> & ) { assert(false); }45 virtual std::list<Expression *> &get_designators() {46 assert(false);47 std::list<Expression *> *ret = 0; return *ret; // never reached48 }49 52 50 53 bool get_maybeConstructed() { return maybeConstructed; } … … 53 56 virtual void accept( Visitor &v ) = 0; 54 57 virtual Initializer *acceptMutator( Mutator &m ) = 0; 55 virtual void print( std::ostream &os, int indent = 0 ) = 0;58 virtual void print( std::ostream &os, int indent = 0 ) const = 0; 56 59 private: 57 // std::string name;58 // int pos;59 60 bool maybeConstructed; 60 61 }; … … 63 64 class SingleInit : public Initializer { 64 65 public: 65 SingleInit( Expression *value, const std::list< Expression *> &designators = std::list< Expression * >(),bool maybeConstructed = false );66 SingleInit( Expression *value, bool maybeConstructed = false ); 66 67 SingleInit( const SingleInit &other ); 67 68 virtual ~SingleInit(); … … 70 71 void set_value( Expression *newValue ) { value = newValue; } 71 72 72 std::list<Expression *> &get_designators() { return designators; }73 void set_designators( std::list<Expression *> &newValue ) { designators = newValue; }74 75 73 virtual SingleInit *clone() const { return new SingleInit( *this); } 76 74 virtual void accept( Visitor &v ) { v.visit( this ); } 77 75 virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); } 78 virtual void print( std::ostream &os, int indent = 0 ) ;76 virtual void print( std::ostream &os, int indent = 0 ) const; 79 77 private: 80 78 //Constant *value; 81 79 Expression *value; // has to be a compile-time constant 82 std::list< Expression * > designators;83 80 }; 84 81 … … 88 85 public: 89 86 ListInit( const std::list<Initializer*> &initializers, 90 const std::list< Expression *> &designators = std::list< Expression * >(), bool maybeConstructed = false );87 const std::list<Designation *> &designators = {}, bool maybeConstructed = false ); 91 88 ListInit( const ListInit & other ); 92 89 virtual ~ListInit(); 93 90 94 void set_designators( std::list<Expression *> &newValue ) { designators = newValue; } 95 std::list<Expression *> &get_designators() { return designators; } 96 void set_initializers( std::list<Initializer*> &newValue ) { initializers = newValue; } 97 std::list<Initializer*> &get_initializers() { return initializers; } 91 std::list<Designation *> & get_designations() { return designations; } 92 std::list<Initializer *> & get_initializers() { return initializers; } 98 93 99 94 typedef std::list<Initializer*>::iterator iterator; 95 typedef std::list<Initializer*>::const_iterator const_iterator; 100 96 iterator begin() { return initializers.begin(); } 101 97 iterator end() { return initializers.end(); } 98 const_iterator begin() const { return initializers.begin(); } 99 const_iterator end() const { return initializers.end(); } 102 100 103 101 virtual ListInit *clone() const { return new ListInit( *this ); } 104 102 virtual void accept( Visitor &v ) { v.visit( this ); } 105 103 virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); } 106 virtual void print( std::ostream &os, int indent = 0 ) ;104 virtual void print( std::ostream &os, int indent = 0 ) const; 107 105 private: 108 std::list<Initializer *> initializers; // order *is* important109 std::list< Expression *> designators;106 std::list<Initializer *> initializers; // order *is* important 107 std::list<Designation *> designations; // order/length is consistent with initializers 110 108 }; 111 109 … … 130 128 virtual void accept( Visitor &v ) { v.visit( this ); } 131 129 virtual Initializer *acceptMutator( Mutator &m ) { return m.mutate( this ); } 132 virtual void print( std::ostream &os, int indent = 0 ) ;130 virtual void print( std::ostream &os, int indent = 0 ) const; 133 131 134 132 private: … … 140 138 }; 141 139 142 std::ostream & operator<<( std::ostream & out, Initializer * init ); 140 std::ostream & operator<<( std::ostream & out, const Initializer * init ); 141 std::ostream & operator<<( std::ostream & out, const Designation * des ); 143 142 144 143 #endif // INITIALIZER_H -
src/SynTree/Mutator.cc
rfea3faa rb826e6b 433 433 } 434 434 435 Expression *Mutator::mutate( UntypedInitExpr * initExpr ) { 436 initExpr->set_env( maybeMutate( initExpr->get_env(), *this ) ); 437 initExpr->set_result( maybeMutate( initExpr->get_result(), *this ) ); 438 initExpr->set_expr( maybeMutate( initExpr->get_expr(), *this ) ); 439 // not currently mutating initAlts, but this doesn't matter since this node is only used in the resolver. 440 return initExpr; 441 } 442 443 Expression *Mutator::mutate( InitExpr * initExpr ) { 444 initExpr->set_env( maybeMutate( initExpr->get_env(), *this ) ); 445 initExpr->set_result( maybeMutate( initExpr->get_result(), *this ) ); 446 initExpr->set_expr( maybeMutate( initExpr->get_expr(), *this ) ); 447 initExpr->set_designation( maybeMutate( initExpr->get_designation(), *this ) ); 448 return initExpr; 449 } 450 435 451 436 452 Type *Mutator::mutate( VoidType *voidType ) { … … 499 515 mutateAll( tupleType->get_forall(), *this ); 500 516 mutateAll( tupleType->get_types(), *this ); 517 mutateAll( tupleType->get_members(), *this ); 501 518 return tupleType; 502 519 } … … 535 552 536 553 554 Designation *Mutator::mutate( Designation * designation ) { 555 mutateAll( designation->get_designators(), *this ); 556 return designation; 557 } 558 537 559 Initializer *Mutator::mutate( SingleInit *singleInit ) { 538 560 singleInit->set_value( singleInit->get_value()->acceptMutator( *this ) ); … … 541 563 542 564 Initializer *Mutator::mutate( ListInit *listInit ) { 543 mutateAll( listInit->get_designat ors(), *this );565 mutateAll( listInit->get_designations(), *this ); 544 566 mutateAll( listInit->get_initializers(), *this ); 545 567 return listInit; -
src/SynTree/Mutator.h
rfea3faa rb826e6b 85 85 virtual Expression* mutate( StmtExpr * stmtExpr ); 86 86 virtual Expression* mutate( UniqueExpr * uniqueExpr ); 87 virtual Expression* mutate( UntypedInitExpr * initExpr ); 88 virtual Expression* mutate( InitExpr * initExpr ); 87 89 88 90 virtual Type* mutate( VoidType *basicType ); … … 103 105 virtual Type* mutate( OneType *oneType ); 104 106 107 virtual Designation* mutate( Designation *designation ); 105 108 virtual Initializer* mutate( SingleInit *singleInit ); 106 109 virtual Initializer* mutate( ListInit *listInit ); -
src/SynTree/SynTree.h
rfea3faa rb826e6b 93 93 class StmtExpr; 94 94 class UniqueExpr; 95 class UntypedInitExpr; 96 class InitExpr; 95 97 96 98 class Type; … … 113 115 class OneType; 114 116 117 class Designation; 115 118 class Initializer; 116 119 class SingleInit; -
src/SynTree/TupleType.cc
rfea3faa rb826e6b 14 14 // 15 15 16 #include "Declaration.h" 17 #include "Initializer.h" 16 18 #include "Type.h" 17 19 #include "Common/utility.h" 20 #include "Parser/LinkageSpec.h" 18 21 19 22 TupleType::TupleType( const Type::Qualifiers &tq, const std::list< Type * > & types, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), types( types ) { 23 for ( Type * t : *this ) { 24 // xxx - this is very awkward. TupleTypes should contain objects so that members can be named, but if they don't have an initializer node then 25 // they end up getting constructors, which end up being inserted causing problems. This happens because the object decls have to be visited so that 26 // their types are kept in sync with the types list here. Ultimately, the types list here should be eliminated and perhaps replaced with a list-view 27 // of the object types list, but I digress. The temporary solution here is to make a ListInit with maybeConstructed = false, that way even when the 28 // object is visited, it is never constructed. Ultimately, a better solution might be either: 29 // a) to separate TupleType from its declarations, into TupleDecl and Tuple{Inst?}Type, ala StructDecl and StructInstType 30 // b) separate initializer nodes better, e.g. add a MaybeConstructed node that is replaced by genInit, rather than what currently exists in a bool 31 members.push_back( new ObjectDecl( "" , Type::StorageClasses(), LinkageSpec::Cforall, nullptr, t->clone(), new ListInit( {}, {}, false ) ) ); 32 } 20 33 } 21 34 22 35 TupleType::TupleType( const TupleType& other ) : Type( other ) { 23 36 cloneAll( other.types, types ); 37 cloneAll( other.members, members ); 24 38 } 25 39 26 40 TupleType::~TupleType() { 27 41 deleteAll( types ); 42 deleteAll( members ); 28 43 } 29 44 -
src/SynTree/Type.h
rfea3faa rb826e6b 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : T hu Mar 23 16:16:36201713 // Update Count : 1 4911 // Last Modified By : Andrew Beach 12 // Last Modified On : Tus Jul 18 10:06:00 2017 13 // Update Count : 150 14 14 // 15 15 … … 172 172 }; 173 173 174 extern Type::Qualifiers emptyQualifiers; // no qualifiers on constants174 extern Type::Qualifiers noQualifiers; // no qualifiers on constants 175 175 176 176 class VoidType : public Type { … … 481 481 class TupleType : public Type { 482 482 public: 483 TupleType( const Type::Qualifiers & tq, const std::list< Type * > & types = std::list< Type * >(), const std::list< Attribute * > & attributes = std::list< Attribute * >() );483 TupleType( const Type::Qualifiers & tq, const std::list< Type * > & types, const std::list< Attribute * > & attributes = std::list< Attribute * >() ); 484 484 TupleType( const TupleType& ); 485 485 virtual ~TupleType(); … … 488 488 typedef value_type::iterator iterator; 489 489 490 std::list<Type *>& get_types() { return types; }490 std::list<Type *> & get_types() { return types; } 491 491 virtual unsigned size() const { return types.size(); }; 492 493 // For now, this is entirely synthetic -- tuple types always have unnamed members. 494 // Eventually, we may allow named tuples, in which case members should subsume types 495 std::list<Declaration *> & get_members() { return members; } 492 496 493 497 iterator begin() { return types.begin(); } … … 506 510 virtual void print( std::ostream & os, int indent = 0 ) const; 507 511 private: 508 std::list<Type*> types; 512 std::list<Type *> types; 513 std::list<Declaration *> members; 509 514 }; 510 515 -
src/SynTree/VarExprReplacer.cc
rfea3faa rb826e6b 14 14 // 15 15 16 #include "Declaration.h" 16 17 #include "Expression.h" 17 18 #include "VarExprReplacer.h" 18 19 19 VarExprReplacer::VarExprReplacer( const DeclMap & declMap ) : declMap( declMap) {}20 VarExprReplacer::VarExprReplacer( const DeclMap & declMap, bool debug ) : declMap( declMap ), debug( debug ) {} 20 21 21 22 // replace variable with new node from decl map 22 23 void VarExprReplacer::visit( VariableExpr * varExpr ) { 23 // xxx - assertions and parameters aren't accounted for in this... (i.e. they aren't inserted into the map when it's made, only DeclStmts are) 24 if ( declMap.count( varExpr->get_var() ) ) { 25 varExpr->set_var( declMap.at( varExpr->get_var() ) ); 26 } 24 // xxx - assertions and parameters aren't accounted for in this... (i.e. they aren't inserted into the map when it's made, only DeclStmts are) 25 if ( declMap.count( varExpr->get_var() ) ) { 26 if ( debug ) { 27 std::cerr << "replacing variable reference: " << (void*)varExpr->get_var() << " " << varExpr->get_var() << " with " << (void*)declMap.at( varExpr->get_var() ) << " " << declMap.at( varExpr->get_var() ) << std::endl; 28 } 29 varExpr->set_var( declMap.at( varExpr->get_var() ) ); 30 } 27 31 } -
src/SynTree/VarExprReplacer.h
rfea3faa rb826e6b 27 27 private: 28 28 const DeclMap & declMap; 29 bool debug; 29 30 public: 30 VarExprReplacer( const DeclMap & declMap );31 VarExprReplacer( const DeclMap & declMap, bool debug = false ); 31 32 32 33 // replace variable with new node from decl map -
src/SynTree/Visitor.cc
rfea3faa rb826e6b 340 340 } 341 341 342 void Visitor::visit( UntypedInitExpr * initExpr ) { 343 maybeAccept( initExpr->get_result(), *this ); 344 maybeAccept( initExpr->get_expr(), *this ); 345 // not currently visiting initAlts, but this doesn't matter since this node is only used in the resolver. 346 } 347 348 void Visitor::visit( InitExpr * initExpr ) { 349 maybeAccept( initExpr->get_result(), *this ); 350 maybeAccept( initExpr->get_expr(), *this ); 351 maybeAccept( initExpr->get_designation(), *this ); 352 } 353 342 354 343 355 void Visitor::visit( VoidType *voidType ) { … … 395 407 acceptAll( tupleType->get_forall(), *this ); 396 408 acceptAll( tupleType->get_types(), *this ); 409 acceptAll( tupleType->get_members(), *this ); 397 410 } 398 411 … … 424 437 } 425 438 439 void Visitor::visit( Designation * designation ) { 440 acceptAll( designation->get_designators(), *this ); 441 } 426 442 427 443 void Visitor::visit( SingleInit *singleInit ) { … … 430 446 431 447 void Visitor::visit( ListInit *listInit ) { 432 acceptAll( listInit->get_designat ors(), *this );448 acceptAll( listInit->get_designations(), *this ); 433 449 acceptAll( listInit->get_initializers(), *this ); 434 450 } -
src/SynTree/Visitor.h
rfea3faa rb826e6b 88 88 virtual void visit( StmtExpr * stmtExpr ); 89 89 virtual void visit( UniqueExpr * uniqueExpr ); 90 virtual void visit( UntypedInitExpr * initExpr ); 91 virtual void visit( InitExpr * initExpr ); 90 92 91 93 virtual void visit( VoidType *basicType ); … … 106 108 virtual void visit( OneType *oneType ); 107 109 110 virtual void visit( Designation *designation ); 108 111 virtual void visit( SingleInit *singleInit ); 109 112 virtual void visit( ListInit *listInit ); -
src/Tuples/TupleExpansion.cc
rfea3faa rb826e6b 192 192 } 193 193 ObjectDecl * finished = new ObjectDecl( toString( "_unq", id, "_finished_" ), Type::StorageClasses(), LinkageSpec::Cforall, nullptr, new BasicType( Type::Qualifiers(), BasicType::Bool ), 194 new SingleInit( new ConstantExpr( Constant::from_int( 0 ) ) , noDesignators) );194 new SingleInit( new ConstantExpr( Constant::from_int( 0 ) ) ) ); 195 195 addDeclaration( finished ); 196 196 // (finished ? _unq_expr_N : (_unq_expr_N = <unqExpr->get_expr()>, finished = 1, _unq_expr_N)) … … 310 310 Type * makeTupleType( const std::list< Expression * > & exprs ) { 311 311 // produce the TupleType which aggregates the types of the exprs 312 TupleType *tupleType = new TupleType( Type::Qualifiers( Type::Const | Type::Volatile | Type::Restrict | Type::Lvalue | Type::Atomic | Type::Mutex ) );313 Type::Qualifiers &qualifiers = tupleType->get_qualifiers();312 std::list< Type * > types; 313 Type::Qualifiers qualifiers( Type::Const | Type::Volatile | Type::Restrict | Type::Lvalue | Type::Atomic | Type::Mutex ); 314 314 for ( Expression * expr : exprs ) { 315 315 assert( expr->get_result() ); 316 316 if ( expr->get_result()->isVoid() ) { 317 317 // if the type of any expr is void, the type of the entire tuple is void 318 delete tupleType;319 318 return new VoidType( Type::Qualifiers() ); 320 319 } 321 320 Type * type = expr->get_result()->clone(); 322 t upleType->get_types().push_back( type );321 types.push_back( type ); 323 322 // the qualifiers on the tuple type are the qualifiers that exist on all component types 324 323 qualifiers &= type->get_qualifiers(); 325 324 } // for 326 325 if ( exprs.empty() ) qualifiers = Type::Qualifiers(); 327 return tupleType;326 return new TupleType( qualifiers, types ); 328 327 } 329 328 -
src/benchmark/CorCtxSwitch.c
rfea3faa rb826e6b 31 31 32 32 StartTime = Time(); 33 // for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {34 // resume( this_coroutine() );35 // // resume( &s );36 // }37 33 resumer( &s, NoOfTimes ); 38 34 EndTime = Time(); -
src/benchmark/Makefile.am
rfea3faa rb826e6b 20 20 CC = @CFA_BINDIR@/@CFA_NAME@ 21 21 22 noinst_PROGRAMS = bench ctxswitch-coroutine ctxswitch-thread22 noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) ctxswitch-thread$(EXEEXT) sched-int$(EXEEXT) monitor$(EXEEXT) csv-data$(EXEEXT) 23 23 24 bench :24 bench$(EXEEXT) : 25 25 @for ccflags in "-debug" "-nodebug"; do \ 26 26 echo ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -lrt bench.c;\ … … 30 30 rm -f ./a.out ; 31 31 32 ctxswitch-coroutine :32 ctxswitch-coroutine$(EXEEXT): 33 33 ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 CorCtxSwitch.c 34 34 @for number in 1 2 3 4 5 6 7 8 9 10; do \ … … 37 37 @rm -f ./a.out 38 38 39 ctxswitch-thread :39 ctxswitch-thread$(EXEEXT): 40 40 ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c 41 41 @for number in 1 2 3 4 5 6 7 8 9 10; do \ … … 44 44 @rm -f ./a.out 45 45 46 sched-int :46 sched-int$(EXEEXT): 47 47 ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 SchedInt.c 48 48 @for number in 1 2 3 4 5 6 7 8 9 10; do \ … … 51 51 @rm -f ./a.out 52 52 53 monitor :53 monitor$(EXEEXT): 54 54 ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 Monitor.c 55 55 @for number in 1 2 3 4 5 6 7 8 9 10; do \ … … 58 58 @rm -f ./a.out 59 59 60 csv-data :60 csv-data$(EXEEXT): 61 61 @${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=10000000 csv-data.c 62 62 @./a.out -
src/benchmark/Makefile.in
rfea3faa rb826e6b 1 # Makefile.in generated by automake 1.1 1.3from Makefile.am.1 # Makefile.in generated by automake 1.15 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 6 # Foundation, Inc. 4 # Copyright (C) 1994-2014 Free Software Foundation, Inc. 5 7 6 # This Makefile.in is free software; the Free Software Foundation 8 7 # gives unlimited permission to copy and/or distribute it, … … 20 19 21 20 VPATH = @srcdir@ 21 am__is_gnu_make = { \ 22 if test -z '$(MAKELEVEL)'; then \ 23 false; \ 24 elif test -n '$(MAKE_HOST)'; then \ 25 true; \ 26 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ 27 true; \ 28 else \ 29 false; \ 30 fi; \ 31 } 32 am__make_running_with_option = \ 33 case $${target_option-} in \ 34 ?) ;; \ 35 *) echo "am__make_running_with_option: internal error: invalid" \ 36 "target option '$${target_option-}' specified" >&2; \ 37 exit 1;; \ 38 esac; \ 39 has_opt=no; \ 40 sane_makeflags=$$MAKEFLAGS; \ 41 if $(am__is_gnu_make); then \ 42 sane_makeflags=$$MFLAGS; \ 43 else \ 44 case $$MAKEFLAGS in \ 45 *\\[\ \ ]*) \ 46 bs=\\; \ 47 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ 48 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ 49 esac; \ 50 fi; \ 51 skip_next=no; \ 52 strip_trailopt () \ 53 { \ 54 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ 55 }; \ 56 for flg in $$sane_makeflags; do \ 57 test $$skip_next = yes && { skip_next=no; continue; }; \ 58 case $$flg in \ 59 *=*|--*) continue;; \ 60 -*I) strip_trailopt 'I'; skip_next=yes;; \ 61 -*I?*) strip_trailopt 'I';; \ 62 -*O) strip_trailopt 'O'; skip_next=yes;; \ 63 -*O?*) strip_trailopt 'O';; \ 64 -*l) strip_trailopt 'l'; skip_next=yes;; \ 65 -*l?*) strip_trailopt 'l';; \ 66 -[dEDm]) skip_next=yes;; \ 67 -[JT]) skip_next=yes;; \ 68 esac; \ 69 case $$flg in \ 70 *$$target_option*) has_opt=yes; break;; \ 71 esac; \ 72 done; \ 73 test $$has_opt = yes 74 am__make_dryrun = (target_option=n; $(am__make_running_with_option)) 75 am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 22 76 pkgdatadir = $(datadir)/@PACKAGE@ 23 77 pkgincludedir = $(includedir)/@PACKAGE@ … … 38 92 build_triplet = @build@ 39 93 host_triplet = @host@ 40 noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) \41 ctxswitch-thread$(EXEEXT)42 94 subdir = src/benchmark 43 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in44 95 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 45 96 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 46 97 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 47 98 $(ACLOCAL_M4) 99 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) 48 100 mkinstalldirs = $(install_sh) -d 49 101 CONFIG_HEADER = $(top_builddir)/config.h … … 54 106 bench_OBJECTS = bench.$(OBJEXT) 55 107 bench_LDADD = $(LDADD) 108 csv_data_SOURCES = csv-data.c 109 csv_data_OBJECTS = csv-data.$(OBJEXT) 110 csv_data_LDADD = $(LDADD) 56 111 ctxswitch_coroutine_SOURCES = ctxswitch-coroutine.c 57 112 ctxswitch_coroutine_OBJECTS = ctxswitch-coroutine.$(OBJEXT) … … 60 115 ctxswitch_thread_OBJECTS = ctxswitch-thread.$(OBJEXT) 61 116 ctxswitch_thread_LDADD = $(LDADD) 117 monitor_SOURCES = monitor.c 118 monitor_OBJECTS = monitor.$(OBJEXT) 119 monitor_LDADD = $(LDADD) 120 sched_int_SOURCES = sched-int.c 121 sched_int_OBJECTS = sched-int.$(OBJEXT) 122 sched_int_LDADD = $(LDADD) 123 AM_V_P = $(am__v_P_@AM_V@) 124 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) 125 am__v_P_0 = false 126 am__v_P_1 = : 127 AM_V_GEN = $(am__v_GEN_@AM_V@) 128 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 129 am__v_GEN_0 = @echo " GEN " $@; 130 am__v_GEN_1 = 131 AM_V_at = $(am__v_at_@AM_V@) 132 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 133 am__v_at_0 = @ 134 am__v_at_1 = 62 135 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) 63 136 depcomp = $(SHELL) $(top_srcdir)/automake/depcomp … … 68 141 AM_V_CC = $(am__v_CC_@AM_V@) 69 142 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) 70 am__v_CC_0 = @echo " CC " $@; 71 AM_V_at = $(am__v_at_@AM_V@) 72 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 73 am__v_at_0 = @ 143 am__v_CC_0 = @echo " CC " $@; 144 am__v_CC_1 = 74 145 CCLD = $(CC) 75 146 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 76 147 AM_V_CCLD = $(am__v_CCLD_@AM_V@) 77 148 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) 78 am__v_CCLD_0 = @echo " CCLD " $@; 79 AM_V_GEN = $(am__v_GEN_@AM_V@) 80 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 81 am__v_GEN_0 = @echo " GEN " $@; 82 SOURCES = bench.c ctxswitch-coroutine.c ctxswitch-thread.c 83 DIST_SOURCES = bench.c ctxswitch-coroutine.c ctxswitch-thread.c 149 am__v_CCLD_0 = @echo " CCLD " $@; 150 am__v_CCLD_1 = 151 SOURCES = bench.c csv-data.c ctxswitch-coroutine.c ctxswitch-thread.c \ 152 monitor.c sched-int.c 153 DIST_SOURCES = bench.c csv-data.c ctxswitch-coroutine.c \ 154 ctxswitch-thread.c monitor.c sched-int.c 155 am__can_run_installinfo = \ 156 case $$AM_UPDATE_INFO_DIR in \ 157 n|no|NO) false;; \ 158 *) (install-info --version) >/dev/null 2>&1;; \ 159 esac 160 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) 161 # Read a list of newline-separated strings from the standard input, 162 # and print each of them once, without duplicates. Input order is 163 # *not* preserved. 164 am__uniquify_input = $(AWK) '\ 165 BEGIN { nonempty = 0; } \ 166 { items[$$0] = 1; nonempty = 1; } \ 167 END { if (nonempty) { for (i in items) print i; }; } \ 168 ' 169 # Make sure the list of sources is unique. This is necessary because, 170 # e.g., the same source file might be shared among _SOURCES variables 171 # for different programs/libraries. 172 am__define_uniq_tagged_files = \ 173 list='$(am__tagged_files)'; \ 174 unique=`for i in $$list; do \ 175 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 176 done | $(am__uniquify_input)` 84 177 ETAGS = etags 85 178 CTAGS = ctags 179 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp 86 180 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 87 181 ACLOCAL = @ACLOCAL@ … … 198 292 program_transform_name = @program_transform_name@ 199 293 psdir = @psdir@ 294 runstatedir = @runstatedir@ 200 295 sbindir = @sbindir@ 201 296 sharedstatedir = @sharedstatedir@ … … 207 302 top_srcdir = @top_srcdir@ 208 303 AM_CFLAGS = -g -Wall -Wno-unused-function -O2 304 noinst_PROGRAMS = bench$(EXEEXT) ctxswitch-coroutine$(EXEEXT) ctxswitch-thread$(EXEEXT) sched-int$(EXEEXT) monitor$(EXEEXT) csv-data$(EXEEXT) 209 305 all: all-am 210 306 … … 223 319 $(am__cd) $(top_srcdir) && \ 224 320 $(AUTOMAKE) --foreign src/benchmark/Makefile 225 .PRECIOUS: Makefile226 321 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 227 322 @case '$?' in \ … … 252 347 253 348 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bench.Po@am__quote@ 349 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv-data.Po@am__quote@ 254 350 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctxswitch-coroutine.Po@am__quote@ 255 351 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctxswitch-thread.Po@am__quote@ 352 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/monitor.Po@am__quote@ 353 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched-int.Po@am__quote@ 256 354 257 355 .c.o: 258 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< 259 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po 356 @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ 357 @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ 358 @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po 260 359 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 261 360 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 262 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<361 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< 263 362 264 363 .c.obj: 265 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` 266 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po 364 @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ 365 @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ 366 @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po 267 367 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 268 368 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 269 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` 270 271 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 272 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 273 unique=`for i in $$list; do \ 274 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 275 done | \ 276 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 277 END { if (nonempty) { for (i in files) print i; }; }'`; \ 278 mkid -fID $$unique 279 tags: TAGS 280 281 TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 282 $(TAGS_FILES) $(LISP) 369 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 370 371 ID: $(am__tagged_files) 372 $(am__define_uniq_tagged_files); mkid -fID $$unique 373 tags: tags-am 374 TAGS: tags 375 376 tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 283 377 set x; \ 284 378 here=`pwd`; \ 285 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 286 unique=`for i in $$list; do \ 287 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 288 done | \ 289 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 290 END { if (nonempty) { for (i in files) print i; }; }'`; \ 379 $(am__define_uniq_tagged_files); \ 291 380 shift; \ 292 381 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ … … 300 389 fi; \ 301 390 fi 302 ctags: CTAGS 303 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 304 $(TAGS_FILES) $(LISP) 305 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 306 unique=`for i in $$list; do \ 307 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 308 done | \ 309 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 310 END { if (nonempty) { for (i in files) print i; }; }'`; \ 391 ctags: ctags-am 392 393 CTAGS: ctags 394 ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 395 $(am__define_uniq_tagged_files); \ 311 396 test -z "$(CTAGS_ARGS)$$unique" \ 312 397 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ … … 317 402 && $(am__cd) $(top_srcdir) \ 318 403 && gtags -i $(GTAGS_ARGS) "$$here" 404 cscopelist: cscopelist-am 405 406 cscopelist-am: $(am__tagged_files) 407 list='$(am__tagged_files)'; \ 408 case "$(srcdir)" in \ 409 [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ 410 *) sdir=$(subdir)/$(srcdir) ;; \ 411 esac; \ 412 for i in $$list; do \ 413 if test -f "$$i"; then \ 414 echo "$(subdir)/$$i"; \ 415 else \ 416 echo "$$sdir/$$i"; \ 417 fi; \ 418 done >> $(top_builddir)/cscope.files 319 419 320 420 distclean-tags: … … 456 556 .MAKE: install-am install-strip 457 557 458 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \459 clean-noinstPROGRAMS c tags distclean distclean-compile\460 distclean- generic distclean-tags distdir dvi dvi-am html\461 html-am info info-am install install-am install-data\462 install-data -am install-dvi install-dvi-am install-exec\463 install-exec -am install-html install-html-am install-info\464 install-info -am install-man install-pdf install-pdf-am\465 install-p s install-ps-am install-strip installcheck\466 installcheck -am installdirs maintainer-clean \558 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ 559 clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ 560 distclean-compile distclean-generic distclean-tags distdir dvi \ 561 dvi-am html html-am info info-am install install-am \ 562 install-data install-data-am install-dvi install-dvi-am \ 563 install-exec install-exec-am install-html install-html-am \ 564 install-info install-info-am install-man install-pdf \ 565 install-pdf-am install-ps install-ps-am install-strip \ 566 installcheck installcheck-am installdirs maintainer-clean \ 467 567 maintainer-clean-generic mostlyclean mostlyclean-compile \ 468 mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \568 mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ 469 569 uninstall-am 470 570 471 472 bench : 571 .PRECIOUS: Makefile 572 573 574 bench$(EXEEXT) : 473 575 @for ccflags in "-debug" "-nodebug"; do \ 474 576 echo ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -lrt bench.c;\ … … 478 580 rm -f ./a.out ; 479 581 480 ctxswitch-coroutine :582 ctxswitch-coroutine$(EXEEXT): 481 583 ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 CorCtxSwitch.c 482 584 @for number in 1 2 3 4 5 6 7 8 9 10; do \ … … 485 587 @rm -f ./a.out 486 588 487 ctxswitch-thread :589 ctxswitch-thread$(EXEEXT): 488 590 ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c 489 591 @for number in 1 2 3 4 5 6 7 8 9 10; do \ … … 492 594 @rm -f ./a.out 493 595 494 sched-int :596 sched-int$(EXEEXT): 495 597 ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 SchedInt.c 496 598 @for number in 1 2 3 4 5 6 7 8 9 10; do \ … … 499 601 @rm -f ./a.out 500 602 501 monitor :603 monitor$(EXEEXT): 502 604 ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 Monitor.c 503 605 @for number in 1 2 3 4 5 6 7 8 9 10; do \ … … 506 608 @rm -f ./a.out 507 609 508 csv-data :610 csv-data$(EXEEXT): 509 611 @${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=10000000 csv-data.c 510 612 @./a.out -
src/benchmark/bench.h
rfea3faa rb826e6b 26 26 #define N 10000000 27 27 #endif 28 29 unsigned int default_preemption() { 30 return 0; 31 } -
src/benchmark/create_pthrd.c
rfea3faa rb826e6b 14 14 n = atoi(argv[1]); 15 15 } 16 printf(" %lu\n", n);16 printf("create %lu pthreads ... ", n); 17 17 18 18 for (size_t i = 0; i < n; i++) { 19 pthread_attr_t attr; 20 if (pthread_attr_init(&attr) < 0) { 19 pthread_t thread; 20 if (pthread_create(&thread, NULL, foo, NULL) < 0) { 21 perror( "failure" ); 21 22 return 1; 22 23 } 23 if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) < 0) { 24 return 1; 25 } 26 pthread_t thread; 27 if (pthread_create(&thread, &attr, foo, NULL) < 0) { 24 25 if (pthread_join( thread, NULL) < 0) { 26 perror( "failure" ); 28 27 return 1; 29 28 } 30 29 } 31 pthread_exit(NULL); 32 return 0; 30 printf("finish\n"); 33 31 } -
src/benchmark/csv-data.c
rfea3faa rb826e6b 25 25 } 26 26 27 #ifndef N28 #define N 10000000029 #endif30 31 27 //----------------------------------------------------------------------------- 32 28 // coroutine context switch … … 38 34 39 35 StartTime = Time(); 40 // for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {41 // resume( this_coroutine() );42 // // resume( &s );43 // }44 36 resumer( &s, NoOfTimes ); 45 37 EndTime = Time(); … … 104 96 mon_t mon1; 105 97 106 condition cond1a; 98 condition cond1a; 107 99 condition cond1b; 108 100 … … 152 144 mon_t mon2; 153 145 154 condition cond2a; 146 condition cond2a; 155 147 condition cond2b; 156 148 -
src/driver/Makefile.in
rfea3faa rb826e6b 1 # Makefile.in generated by automake 1.1 1.3from Makefile.am.1 # Makefile.in generated by automake 1.15 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 6 # Foundation, Inc. 4 # Copyright (C) 1994-2014 Free Software Foundation, Inc. 5 7 6 # This Makefile.in is free software; the Free Software Foundation 8 7 # gives unlimited permission to copy and/or distribute it, … … 20 19 21 20 VPATH = @srcdir@ 21 am__is_gnu_make = { \ 22 if test -z '$(MAKELEVEL)'; then \ 23 false; \ 24 elif test -n '$(MAKE_HOST)'; then \ 25 true; \ 26 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ 27 true; \ 28 else \ 29 false; \ 30 fi; \ 31 } 32 am__make_running_with_option = \ 33 case $${target_option-} in \ 34 ?) ;; \ 35 *) echo "am__make_running_with_option: internal error: invalid" \ 36 "target option '$${target_option-}' specified" >&2; \ 37 exit 1;; \ 38 esac; \ 39 has_opt=no; \ 40 sane_makeflags=$$MAKEFLAGS; \ 41 if $(am__is_gnu_make); then \ 42 sane_makeflags=$$MFLAGS; \ 43 else \ 44 case $$MAKEFLAGS in \ 45 *\\[\ \ ]*) \ 46 bs=\\; \ 47 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ 48 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ 49 esac; \ 50 fi; \ 51 skip_next=no; \ 52 strip_trailopt () \ 53 { \ 54 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ 55 }; \ 56 for flg in $$sane_makeflags; do \ 57 test $$skip_next = yes && { skip_next=no; continue; }; \ 58 case $$flg in \ 59 *=*|--*) continue;; \ 60 -*I) strip_trailopt 'I'; skip_next=yes;; \ 61 -*I?*) strip_trailopt 'I';; \ 62 -*O) strip_trailopt 'O'; skip_next=yes;; \ 63 -*O?*) strip_trailopt 'O';; \ 64 -*l) strip_trailopt 'l'; skip_next=yes;; \ 65 -*l?*) strip_trailopt 'l';; \ 66 -[dEDm]) skip_next=yes;; \ 67 -[JT]) skip_next=yes;; \ 68 esac; \ 69 case $$flg in \ 70 *$$target_option*) has_opt=yes; break;; \ 71 esac; \ 72 done; \ 73 test $$has_opt = yes 74 am__make_dryrun = (target_option=n; $(am__make_running_with_option)) 75 am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 22 76 pkgdatadir = $(datadir)/@PACKAGE@ 23 77 pkgincludedir = $(includedir)/@PACKAGE@ … … 44 98 cc1lib_PROGRAMS = cc1$(EXEEXT) 45 99 subdir = src/driver 46 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in47 100 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 48 101 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 49 102 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 50 103 $(ACLOCAL_M4) 104 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) 51 105 mkinstalldirs = $(install_sh) -d 52 106 CONFIG_HEADER = $(top_builddir)/config.h … … 61 115 cfa_OBJECTS = $(am_cfa_OBJECTS) 62 116 cfa_LDADD = $(LDADD) 117 AM_V_P = $(am__v_P_@AM_V@) 118 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) 119 am__v_P_0 = false 120 am__v_P_1 = : 121 AM_V_GEN = $(am__v_GEN_@AM_V@) 122 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 123 am__v_GEN_0 = @echo " GEN " $@; 124 am__v_GEN_1 = 125 AM_V_at = $(am__v_at_@AM_V@) 126 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 127 am__v_at_0 = @ 128 am__v_at_1 = 63 129 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) 64 130 depcomp = $(SHELL) $(top_srcdir)/automake/depcomp … … 69 135 AM_V_CXX = $(am__v_CXX_@AM_V@) 70 136 am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) 71 am__v_CXX_0 = @echo " CXX " $@; 72 AM_V_at = $(am__v_at_@AM_V@) 73 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 74 am__v_at_0 = @ 137 am__v_CXX_0 = @echo " CXX " $@; 138 am__v_CXX_1 = 75 139 CXXLD = $(CXX) 76 140 CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ … … 78 142 AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) 79 143 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) 80 am__v_CXXLD_0 = @echo " CXXLD " $@; 81 AM_V_GEN = $(am__v_GEN_@AM_V@) 82 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 83 am__v_GEN_0 = @echo " GEN " $@; 144 am__v_CXXLD_0 = @echo " CXXLD " $@; 145 am__v_CXXLD_1 = 84 146 SOURCES = $(cc1_SOURCES) $(cfa_SOURCES) 85 147 DIST_SOURCES = $(cc1_SOURCES) $(cfa_SOURCES) 148 am__can_run_installinfo = \ 149 case $$AM_UPDATE_INFO_DIR in \ 150 n|no|NO) false;; \ 151 *) (install-info --version) >/dev/null 2>&1;; \ 152 esac 153 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) 154 # Read a list of newline-separated strings from the standard input, 155 # and print each of them once, without duplicates. Input order is 156 # *not* preserved. 157 am__uniquify_input = $(AWK) '\ 158 BEGIN { nonempty = 0; } \ 159 { items[$$0] = 1; nonempty = 1; } \ 160 END { if (nonempty) { for (i in items) print i; }; } \ 161 ' 162 # Make sure the list of sources is unique. This is necessary because, 163 # e.g., the same source file might be shared among _SOURCES variables 164 # for different programs/libraries. 165 am__define_uniq_tagged_files = \ 166 list='$(am__tagged_files)'; \ 167 unique=`for i in $$list; do \ 168 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 169 done | $(am__uniquify_input)` 86 170 ETAGS = etags 87 171 CTAGS = ctags 172 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp 88 173 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 89 174 ACLOCAL = @ACLOCAL@ … … 198 283 program_transform_name = @program_transform_name@ 199 284 psdir = @psdir@ 285 runstatedir = @runstatedir@ 200 286 sbindir = @sbindir@ 201 287 sharedstatedir = @sharedstatedir@ … … 232 318 $(am__cd) $(top_srcdir) && \ 233 319 $(AUTOMAKE) --foreign src/driver/Makefile 234 .PRECIOUS: Makefile235 320 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 236 321 @case '$?' in \ … … 252 337 install-cc1libPROGRAMS: $(cc1lib_PROGRAMS) 253 338 @$(NORMAL_INSTALL) 254 test -z "$(cc1libdir)" || $(MKDIR_P) "$(DESTDIR)$(cc1libdir)"255 339 @list='$(cc1lib_PROGRAMS)'; test -n "$(cc1libdir)" || list=; \ 340 if test -n "$$list"; then \ 341 echo " $(MKDIR_P) '$(DESTDIR)$(cc1libdir)'"; \ 342 $(MKDIR_P) "$(DESTDIR)$(cc1libdir)" || exit 1; \ 343 fi; \ 256 344 for p in $$list; do echo "$$p $$p"; done | \ 257 345 sed 's/$(EXEEXT)$$//' | \ 258 while read p p1; do if test -f $$p ;\259 then echo "$$p"; echo "$$p"; else :; fi; \346 while read p p1; do if test -f $$p \ 347 ; then echo "$$p"; echo "$$p"; else :; fi; \ 260 348 done | \ 261 sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ 349 sed -e 'p;s,.*/,,;n;h' \ 350 -e 's|.*|.|' \ 262 351 -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ 263 352 sed 'N;N;N;s,\n, ,g' | \ … … 280 369 files=`for p in $$list; do echo "$$p"; done | \ 281 370 sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ 282 -e 's/$$/$(EXEEXT)/' `; \ 371 -e 's/$$/$(EXEEXT)/' \ 372 `; \ 283 373 test -n "$$list" || exit 0; \ 284 374 echo " ( cd '$(DESTDIR)$(cc1libdir)' && rm -f" $$files ")"; \ … … 290 380 clean-noinstPROGRAMS: 291 381 -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) 382 292 383 cc1$(EXEEXT): $(cc1_OBJECTS) $(cc1_DEPENDENCIES) $(EXTRA_cc1_DEPENDENCIES) 293 384 @rm -f cc1$(EXEEXT) 294 385 $(AM_V_CXXLD)$(CXXLINK) $(cc1_OBJECTS) $(cc1_LDADD) $(LIBS) 386 295 387 cfa$(EXEEXT): $(cfa_OBJECTS) $(cfa_DEPENDENCIES) $(EXTRA_cfa_DEPENDENCIES) 296 388 @rm -f cfa$(EXEEXT) … … 307 399 308 400 .cc.o: 309 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< 310 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po 401 @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ 402 @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ 403 @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po 311 404 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 312 405 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ … … 314 407 315 408 .cc.obj: 316 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` 317 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po 409 @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ 410 @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ 411 @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po 318 412 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 319 413 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 320 414 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 321 415 322 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 323 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 324 unique=`for i in $$list; do \ 325 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 326 done | \ 327 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 328 END { if (nonempty) { for (i in files) print i; }; }'`; \ 329 mkid -fID $$unique 330 tags: TAGS 331 332 TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 333 $(TAGS_FILES) $(LISP) 416 ID: $(am__tagged_files) 417 $(am__define_uniq_tagged_files); mkid -fID $$unique 418 tags: tags-am 419 TAGS: tags 420 421 tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 334 422 set x; \ 335 423 here=`pwd`; \ 336 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 337 unique=`for i in $$list; do \ 338 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 339 done | \ 340 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 341 END { if (nonempty) { for (i in files) print i; }; }'`; \ 424 $(am__define_uniq_tagged_files); \ 342 425 shift; \ 343 426 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ … … 351 434 fi; \ 352 435 fi 353 ctags: CTAGS 354 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 355 $(TAGS_FILES) $(LISP) 356 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 357 unique=`for i in $$list; do \ 358 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 359 done | \ 360 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 361 END { if (nonempty) { for (i in files) print i; }; }'`; \ 436 ctags: ctags-am 437 438 CTAGS: ctags 439 ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 440 $(am__define_uniq_tagged_files); \ 362 441 test -z "$(CTAGS_ARGS)$$unique" \ 363 442 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ … … 368 447 && $(am__cd) $(top_srcdir) \ 369 448 && gtags -i $(GTAGS_ARGS) "$$here" 449 cscopelist: cscopelist-am 450 451 cscopelist-am: $(am__tagged_files) 452 list='$(am__tagged_files)'; \ 453 case "$(srcdir)" in \ 454 [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ 455 *) sdir=$(subdir)/$(srcdir) ;; \ 456 esac; \ 457 for i in $$list; do \ 458 if test -f "$$i"; then \ 459 echo "$(subdir)/$$i"; \ 460 else \ 461 echo "$$sdir/$$i"; \ 462 fi; \ 463 done >> $(top_builddir)/cscope.files 370 464 371 465 distclean-tags: … … 514 608 .MAKE: install-am install-exec-am install-strip uninstall-am 515 609 516 .PHONY: CTAGS GTAGS all all-am check check-am clean \ 517 clean-cc1libPROGRAMS clean-generic clean-noinstPROGRAMS ctags \ 518 distclean distclean-compile distclean-generic distclean-tags \ 519 distdir dvi dvi-am html html-am info info-am install \ 520 install-am install-cc1libPROGRAMS install-data install-data-am \ 521 install-dvi install-dvi-am install-exec install-exec-am \ 522 install-exec-hook install-html install-html-am install-info \ 523 install-info-am install-man install-pdf install-pdf-am \ 524 install-ps install-ps-am install-strip installcheck \ 525 installcheck-am installdirs maintainer-clean \ 526 maintainer-clean-generic mostlyclean mostlyclean-compile \ 527 mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ 528 uninstall-am uninstall-cc1libPROGRAMS uninstall-hook 610 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ 611 clean-cc1libPROGRAMS clean-generic clean-noinstPROGRAMS \ 612 cscopelist-am ctags ctags-am distclean distclean-compile \ 613 distclean-generic distclean-tags distdir dvi dvi-am html \ 614 html-am info info-am install install-am install-cc1libPROGRAMS \ 615 install-data install-data-am install-dvi install-dvi-am \ 616 install-exec install-exec-am install-exec-hook install-html \ 617 install-html-am install-info install-info-am install-man \ 618 install-pdf install-pdf-am install-ps install-ps-am \ 619 install-strip installcheck installcheck-am installdirs \ 620 maintainer-clean maintainer-clean-generic mostlyclean \ 621 mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ 622 tags tags-am uninstall uninstall-am uninstall-cc1libPROGRAMS \ 623 uninstall-hook 624 625 .PRECIOUS: Makefile 529 626 530 627 -
src/examples/Makefile.in
rfea3faa rb826e6b 1 # Makefile.in generated by automake 1.1 1.3from Makefile.am.1 # Makefile.in generated by automake 1.15 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 6 # Foundation, Inc. 4 # Copyright (C) 1994-2014 Free Software Foundation, Inc. 5 7 6 # This Makefile.in is free software; the Free Software Foundation 8 7 # gives unlimited permission to copy and/or distribute it, … … 20 19 21 20 VPATH = @srcdir@ 21 am__is_gnu_make = { \ 22 if test -z '$(MAKELEVEL)'; then \ 23 false; \ 24 elif test -n '$(MAKE_HOST)'; then \ 25 true; \ 26 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ 27 true; \ 28 else \ 29 false; \ 30 fi; \ 31 } 32 am__make_running_with_option = \ 33 case $${target_option-} in \ 34 ?) ;; \ 35 *) echo "am__make_running_with_option: internal error: invalid" \ 36 "target option '$${target_option-}' specified" >&2; \ 37 exit 1;; \ 38 esac; \ 39 has_opt=no; \ 40 sane_makeflags=$$MAKEFLAGS; \ 41 if $(am__is_gnu_make); then \ 42 sane_makeflags=$$MFLAGS; \ 43 else \ 44 case $$MAKEFLAGS in \ 45 *\\[\ \ ]*) \ 46 bs=\\; \ 47 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ 48 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ 49 esac; \ 50 fi; \ 51 skip_next=no; \ 52 strip_trailopt () \ 53 { \ 54 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ 55 }; \ 56 for flg in $$sane_makeflags; do \ 57 test $$skip_next = yes && { skip_next=no; continue; }; \ 58 case $$flg in \ 59 *=*|--*) continue;; \ 60 -*I) strip_trailopt 'I'; skip_next=yes;; \ 61 -*I?*) strip_trailopt 'I';; \ 62 -*O) strip_trailopt 'O'; skip_next=yes;; \ 63 -*O?*) strip_trailopt 'O';; \ 64 -*l) strip_trailopt 'l'; skip_next=yes;; \ 65 -*l?*) strip_trailopt 'l';; \ 66 -[dEDm]) skip_next=yes;; \ 67 -[JT]) skip_next=yes;; \ 68 esac; \ 69 case $$flg in \ 70 *$$target_option*) has_opt=yes; break;; \ 71 esac; \ 72 done; \ 73 test $$has_opt = yes 74 am__make_dryrun = (target_option=n; $(am__make_running_with_option)) 75 am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 22 76 pkgdatadir = $(datadir)/@PACKAGE@ 23 77 pkgincludedir = $(includedir)/@PACKAGE@ … … 41 95 avl_test$(EXEEXT) Bench$(EXEEXT) 42 96 subdir = src/examples 43 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in44 97 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 45 98 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 46 99 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 47 100 $(ACLOCAL_M4) 101 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) 48 102 mkinstalldirs = $(install_sh) -d 49 103 CONFIG_HEADER = $(top_builddir)/config.h … … 54 108 Bench_OBJECTS = Bench.$(OBJEXT) 55 109 Bench_LDADD = $(LDADD) 56 am_avl_test_OBJECTS = avl_test.$(OBJEXT) avl0.$(OBJEXT) avl1.$(OBJEXT) \ 57 avl2.$(OBJEXT) avl3.$(OBJEXT) avl4.$(OBJEXT) \ 58 avl-private.$(OBJEXT) 110 am__dirstamp = $(am__leading_dot)dirstamp 111 am_avl_test_OBJECTS = avltree/avl_test.$(OBJEXT) \ 112 avltree/avl0.$(OBJEXT) avltree/avl1.$(OBJEXT) \ 113 avltree/avl2.$(OBJEXT) avltree/avl3.$(OBJEXT) \ 114 avltree/avl4.$(OBJEXT) avltree/avl-private.$(OBJEXT) 59 115 avl_test_OBJECTS = $(am_avl_test_OBJECTS) 60 116 avl_test_LDADD = $(LDADD) … … 66 122 vector_test_OBJECTS = $(am_vector_test_OBJECTS) 67 123 vector_test_LDADD = $(LDADD) 124 AM_V_P = $(am__v_P_@AM_V@) 125 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) 126 am__v_P_0 = false 127 am__v_P_1 = : 128 AM_V_GEN = $(am__v_GEN_@AM_V@) 129 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 130 am__v_GEN_0 = @echo " GEN " $@; 131 am__v_GEN_1 = 132 AM_V_at = $(am__v_at_@AM_V@) 133 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 134 am__v_at_0 = @ 135 am__v_at_1 = 68 136 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) 69 137 depcomp = $(SHELL) $(top_srcdir)/automake/depcomp 70 138 am__depfiles_maybe = depfiles 71 139 am__mv = mv -f 72 AM_V_lt = $(am__v_lt_@AM_V@)73 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)74 am__v_lt_0 = --silent75 140 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 76 141 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) 77 142 AM_V_CC = $(am__v_CC_@AM_V@) 78 143 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) 79 am__v_CC_0 = @echo " CC " $@; 80 AM_V_at = $(am__v_at_@AM_V@) 81 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 82 am__v_at_0 = @ 144 am__v_CC_0 = @echo " CC " $@; 145 am__v_CC_1 = 83 146 CCLD = $(CC) 84 147 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 85 148 AM_V_CCLD = $(am__v_CCLD_@AM_V@) 86 149 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) 87 am__v_CCLD_0 = @echo " CCLD " $@; 88 AM_V_GEN = $(am__v_GEN_@AM_V@) 89 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 90 am__v_GEN_0 = @echo " GEN " $@; 150 am__v_CCLD_0 = @echo " CCLD " $@; 151 am__v_CCLD_1 = 91 152 SOURCES = Bench.c $(avl_test_SOURCES) $(fstream_test_SOURCES) \ 92 153 $(vector_test_SOURCES) 93 154 DIST_SOURCES = Bench.c $(avl_test_SOURCES) $(fstream_test_SOURCES) \ 94 155 $(vector_test_SOURCES) 156 am__can_run_installinfo = \ 157 case $$AM_UPDATE_INFO_DIR in \ 158 n|no|NO) false;; \ 159 *) (install-info --version) >/dev/null 2>&1;; \ 160 esac 161 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) 162 # Read a list of newline-separated strings from the standard input, 163 # and print each of them once, without duplicates. Input order is 164 # *not* preserved. 165 am__uniquify_input = $(AWK) '\ 166 BEGIN { nonempty = 0; } \ 167 { items[$$0] = 1; nonempty = 1; } \ 168 END { if (nonempty) { for (i in items) print i; }; } \ 169 ' 170 # Make sure the list of sources is unique. This is necessary because, 171 # e.g., the same source file might be shared among _SOURCES variables 172 # for different programs/libraries. 173 am__define_uniq_tagged_files = \ 174 list='$(am__tagged_files)'; \ 175 unique=`for i in $$list; do \ 176 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 177 done | $(am__uniquify_input)` 95 178 ETAGS = etags 96 179 CTAGS = ctags 180 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp 97 181 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 98 182 ACLOCAL = @ACLOCAL@ … … 209 293 program_transform_name = @program_transform_name@ 210 294 psdir = @psdir@ 295 runstatedir = @runstatedir@ 211 296 sbindir = @sbindir@ 212 297 sharedstatedir = @sharedstatedir@ … … 237 322 $(am__cd) $(top_srcdir) && \ 238 323 $(AUTOMAKE) --foreign src/examples/Makefile 239 .PRECIOUS: Makefile240 324 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 241 325 @case '$?' in \ … … 258 342 clean-noinstPROGRAMS: 259 343 -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) 344 avltree/$(am__dirstamp): 345 @$(MKDIR_P) avltree 346 @: > avltree/$(am__dirstamp) 347 avltree/$(DEPDIR)/$(am__dirstamp): 348 @$(MKDIR_P) avltree/$(DEPDIR) 349 @: > avltree/$(DEPDIR)/$(am__dirstamp) 350 avltree/avl_test.$(OBJEXT): avltree/$(am__dirstamp) \ 351 avltree/$(DEPDIR)/$(am__dirstamp) 352 avltree/avl0.$(OBJEXT): avltree/$(am__dirstamp) \ 353 avltree/$(DEPDIR)/$(am__dirstamp) 354 avltree/avl1.$(OBJEXT): avltree/$(am__dirstamp) \ 355 avltree/$(DEPDIR)/$(am__dirstamp) 356 avltree/avl2.$(OBJEXT): avltree/$(am__dirstamp) \ 357 avltree/$(DEPDIR)/$(am__dirstamp) 358 avltree/avl3.$(OBJEXT): avltree/$(am__dirstamp) \ 359 avltree/$(DEPDIR)/$(am__dirstamp) 360 avltree/avl4.$(OBJEXT): avltree/$(am__dirstamp) \ 361 avltree/$(DEPDIR)/$(am__dirstamp) 362 avltree/avl-private.$(OBJEXT): avltree/$(am__dirstamp) \ 363 avltree/$(DEPDIR)/$(am__dirstamp) 364 260 365 avl_test$(EXEEXT): $(avl_test_OBJECTS) $(avl_test_DEPENDENCIES) $(EXTRA_avl_test_DEPENDENCIES) 261 366 @rm -f avl_test$(EXEEXT) 262 367 $(AM_V_CCLD)$(LINK) $(avl_test_OBJECTS) $(avl_test_LDADD) $(LIBS) 368 263 369 fstream_test$(EXEEXT): $(fstream_test_OBJECTS) $(fstream_test_DEPENDENCIES) $(EXTRA_fstream_test_DEPENDENCIES) 264 370 @rm -f fstream_test$(EXEEXT) 265 371 $(AM_V_CCLD)$(LINK) $(fstream_test_OBJECTS) $(fstream_test_LDADD) $(LIBS) 372 266 373 vector_test$(EXEEXT): $(vector_test_OBJECTS) $(vector_test_DEPENDENCIES) $(EXTRA_vector_test_DEPENDENCIES) 267 374 @rm -f vector_test$(EXEEXT) … … 270 377 mostlyclean-compile: 271 378 -rm -f *.$(OBJEXT) 379 -rm -f avltree/*.$(OBJEXT) 272 380 273 381 distclean-compile: … … 276 384 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Bench.Po@am__quote@ 277 385 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@ 278 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl-private.Po@am__quote@279 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl0.Po@am__quote@280 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl1.Po@am__quote@281 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl2.Po@am__quote@282 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl3.Po@am__quote@283 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl4.Po@am__quote@284 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avl_test.Po@am__quote@285 386 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstream_test.Po@am__quote@ 286 387 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_int.Po@am__quote@ 287 388 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector_test.Po@am__quote@ 389 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl-private.Po@am__quote@ 390 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl0.Po@am__quote@ 391 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl1.Po@am__quote@ 392 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl2.Po@am__quote@ 393 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl3.Po@am__quote@ 394 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl4.Po@am__quote@ 395 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test.Po@am__quote@ 288 396 289 397 .c.o: 290 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< 291 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po 398 @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ 399 @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ 400 @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po 292 401 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 293 402 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 294 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<403 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< 295 404 296 405 .c.obj: 297 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` 298 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po 406 @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ 407 @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ 408 @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po 299 409 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 300 410 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 301 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` 302 303 avl_test.o: avltree/avl_test.c 304 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl_test.o -MD -MP -MF $(DEPDIR)/avl_test.Tpo -c -o avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c 305 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl_test.Tpo $(DEPDIR)/avl_test.Po 306 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl_test.c' object='avl_test.o' libtool=no @AMDEPBACKSLASH@ 307 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 308 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c 309 310 avl_test.obj: avltree/avl_test.c 311 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl_test.obj -MD -MP -MF $(DEPDIR)/avl_test.Tpo -c -o avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi` 312 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl_test.Tpo $(DEPDIR)/avl_test.Po 313 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl_test.c' object='avl_test.obj' libtool=no @AMDEPBACKSLASH@ 314 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 315 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi` 316 317 avl0.o: avltree/avl0.c 318 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl0.o -MD -MP -MF $(DEPDIR)/avl0.Tpo -c -o avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c 319 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl0.Tpo $(DEPDIR)/avl0.Po 320 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl0.c' object='avl0.o' libtool=no @AMDEPBACKSLASH@ 321 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 322 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c 323 324 avl0.obj: avltree/avl0.c 325 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl0.obj -MD -MP -MF $(DEPDIR)/avl0.Tpo -c -o avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi` 326 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl0.Tpo $(DEPDIR)/avl0.Po 327 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl0.c' object='avl0.obj' libtool=no @AMDEPBACKSLASH@ 328 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 329 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi` 330 331 avl1.o: avltree/avl1.c 332 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl1.o -MD -MP -MF $(DEPDIR)/avl1.Tpo -c -o avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c 333 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl1.Tpo $(DEPDIR)/avl1.Po 334 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl1.c' object='avl1.o' libtool=no @AMDEPBACKSLASH@ 335 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 336 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c 337 338 avl1.obj: avltree/avl1.c 339 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl1.obj -MD -MP -MF $(DEPDIR)/avl1.Tpo -c -o avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi` 340 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl1.Tpo $(DEPDIR)/avl1.Po 341 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl1.c' object='avl1.obj' libtool=no @AMDEPBACKSLASH@ 342 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 343 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi` 344 345 avl2.o: avltree/avl2.c 346 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl2.o -MD -MP -MF $(DEPDIR)/avl2.Tpo -c -o avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c 347 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl2.Tpo $(DEPDIR)/avl2.Po 348 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl2.c' object='avl2.o' libtool=no @AMDEPBACKSLASH@ 349 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 350 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c 351 352 avl2.obj: avltree/avl2.c 353 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl2.obj -MD -MP -MF $(DEPDIR)/avl2.Tpo -c -o avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi` 354 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl2.Tpo $(DEPDIR)/avl2.Po 355 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl2.c' object='avl2.obj' libtool=no @AMDEPBACKSLASH@ 356 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 357 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi` 358 359 avl3.o: avltree/avl3.c 360 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl3.o -MD -MP -MF $(DEPDIR)/avl3.Tpo -c -o avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c 361 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl3.Tpo $(DEPDIR)/avl3.Po 362 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl3.c' object='avl3.o' libtool=no @AMDEPBACKSLASH@ 363 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 364 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c 365 366 avl3.obj: avltree/avl3.c 367 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl3.obj -MD -MP -MF $(DEPDIR)/avl3.Tpo -c -o avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi` 368 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl3.Tpo $(DEPDIR)/avl3.Po 369 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl3.c' object='avl3.obj' libtool=no @AMDEPBACKSLASH@ 370 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 371 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi` 372 373 avl4.o: avltree/avl4.c 374 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl4.o -MD -MP -MF $(DEPDIR)/avl4.Tpo -c -o avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c 375 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl4.Tpo $(DEPDIR)/avl4.Po 376 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl4.c' object='avl4.o' libtool=no @AMDEPBACKSLASH@ 377 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 378 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c 379 380 avl4.obj: avltree/avl4.c 381 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl4.obj -MD -MP -MF $(DEPDIR)/avl4.Tpo -c -o avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi` 382 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl4.Tpo $(DEPDIR)/avl4.Po 383 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl4.c' object='avl4.obj' libtool=no @AMDEPBACKSLASH@ 384 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 385 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi` 386 387 avl-private.o: avltree/avl-private.c 388 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl-private.o -MD -MP -MF $(DEPDIR)/avl-private.Tpo -c -o avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c 389 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl-private.Tpo $(DEPDIR)/avl-private.Po 390 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl-private.c' object='avl-private.o' libtool=no @AMDEPBACKSLASH@ 391 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 392 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c 393 394 avl-private.obj: avltree/avl-private.c 395 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl-private.obj -MD -MP -MF $(DEPDIR)/avl-private.Tpo -c -o avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi` 396 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl-private.Tpo $(DEPDIR)/avl-private.Po 397 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl-private.c' object='avl-private.obj' libtool=no @AMDEPBACKSLASH@ 398 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 399 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi` 400 401 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 402 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 403 unique=`for i in $$list; do \ 404 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 405 done | \ 406 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 407 END { if (nonempty) { for (i in files) print i; }; }'`; \ 408 mkid -fID $$unique 409 tags: TAGS 410 411 TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 412 $(TAGS_FILES) $(LISP) 411 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 412 413 ID: $(am__tagged_files) 414 $(am__define_uniq_tagged_files); mkid -fID $$unique 415 tags: tags-am 416 TAGS: tags 417 418 tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 413 419 set x; \ 414 420 here=`pwd`; \ 415 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 416 unique=`for i in $$list; do \ 417 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 418 done | \ 419 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 420 END { if (nonempty) { for (i in files) print i; }; }'`; \ 421 $(am__define_uniq_tagged_files); \ 421 422 shift; \ 422 423 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ … … 430 431 fi; \ 431 432 fi 432 ctags: CTAGS 433 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 434 $(TAGS_FILES) $(LISP) 435 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 436 unique=`for i in $$list; do \ 437 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 438 done | \ 439 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 440 END { if (nonempty) { for (i in files) print i; }; }'`; \ 433 ctags: ctags-am 434 435 CTAGS: ctags 436 ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 437 $(am__define_uniq_tagged_files); \ 441 438 test -z "$(CTAGS_ARGS)$$unique" \ 442 439 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ … … 447 444 && $(am__cd) $(top_srcdir) \ 448 445 && gtags -i $(GTAGS_ARGS) "$$here" 446 cscopelist: cscopelist-am 447 448 cscopelist-am: $(am__tagged_files) 449 list='$(am__tagged_files)'; \ 450 case "$(srcdir)" in \ 451 [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ 452 *) sdir=$(subdir)/$(srcdir) ;; \ 453 esac; \ 454 for i in $$list; do \ 455 if test -f "$$i"; then \ 456 echo "$(subdir)/$$i"; \ 457 else \ 458 echo "$$sdir/$$i"; \ 459 fi; \ 460 done >> $(top_builddir)/cscope.files 449 461 450 462 distclean-tags: … … 511 523 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) 512 524 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) 525 -rm -f avltree/$(DEPDIR)/$(am__dirstamp) 526 -rm -f avltree/$(am__dirstamp) 513 527 514 528 maintainer-clean-generic: … … 520 534 521 535 distclean: distclean-am 522 -rm -rf ./$(DEPDIR) 536 -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) 523 537 -rm -f Makefile 524 538 distclean-am: clean-am distclean-compile distclean-generic \ … … 566 580 567 581 maintainer-clean: maintainer-clean-am 568 -rm -rf ./$(DEPDIR) 582 -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) 569 583 -rm -f Makefile 570 584 maintainer-clean-am: distclean-am maintainer-clean-generic … … 586 600 .MAKE: install-am install-strip 587 601 588 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \589 clean-noinstPROGRAMS c tags distclean distclean-compile\590 distclean- generic distclean-tags distdir dvi dvi-am html\591 html-am info info-am install install-am install-data\592 install-data -am install-dvi install-dvi-am install-exec\593 install-exec -am install-html install-html-am install-info\594 install-info -am install-man install-pdf install-pdf-am\595 install-p s install-ps-am install-strip installcheck\596 installcheck -am installdirs maintainer-clean \602 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ 603 clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ 604 distclean-compile distclean-generic distclean-tags distdir dvi \ 605 dvi-am html html-am info info-am install install-am \ 606 install-data install-data-am install-dvi install-dvi-am \ 607 install-exec install-exec-am install-html install-html-am \ 608 install-info install-info-am install-man install-pdf \ 609 install-pdf-am install-ps install-ps-am install-strip \ 610 installcheck installcheck-am installdirs maintainer-clean \ 597 611 maintainer-clean-generic mostlyclean mostlyclean-compile \ 598 mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \612 mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ 599 613 uninstall-am 614 615 .PRECIOUS: Makefile 600 616 601 617 -
src/include/assert.h
rfea3faa rb826e6b 15 15 16 16 #pragma once 17 // Pragmas for header cleanup tool 18 // IWYU pragma: private, include <cassert> 17 19 18 20 #include_next <assert.h> -
src/libcfa/Makefile.am
rfea3faa rb826e6b 10 10 ## Author : Peter A. Buhr 11 11 ## Created On : Sun May 31 08:54:01 2015 12 ## Last Modified By : Peter A. Buhr13 ## Last Modified On : Sun May 14 21:04:21201714 ## Update Count : 21 412 ## Last Modified By : Andrew Beach 13 ## Last Modified On : Fri Jun 14 17:00:00 2017 14 ## Update Count : 216 15 15 ############################################################################### 16 16 17 17 # create object files in directory with source files 18 18 AUTOMAKE_OPTIONS = subdir-objects 19 ARFLAGS = cr 19 20 20 21 libdir = ${CFA_LIBDIR} … … 50 51 51 52 libobjs = ${headers:=.o} 52 libsrc = libcfa-prelude.c interpose.c libhdr/libdebug.c ${headers:=.c} 53 libsrc = libcfa-prelude.c interpose.c libhdr/libdebug.c ${headers:=.c} \ 54 exception.c typeobject.c 53 55 54 56 # not all platforms support concurrency, add option do disable it … … 64 66 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $< 65 67 68 libcfa_a-exception.o : exception.c 69 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $< 70 71 libcfa_a-typeobject.o : typeobject.c 72 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $< 73 66 74 concurrency/libcfa_d_a-invoke.o : concurrency/invoke.c 75 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $< 76 77 libcfa_d_a-exception.o : exception.c 78 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $< 79 80 libcfa_d_a-typeobject.o : typeobject.c 67 81 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $< 68 82 -
src/libcfa/Makefile.in
rfea3faa rb826e6b 1 # Makefile.in generated by automake 1.1 1.3from Makefile.am.1 # Makefile.in generated by automake 1.15 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 6 # Foundation, Inc. 4 # Copyright (C) 1994-2014 Free Software Foundation, Inc. 5 7 6 # This Makefile.in is free software; the Free Software Foundation 8 7 # gives unlimited permission to copy and/or distribute it, … … 21 20 22 21 VPATH = @srcdir@ 22 am__is_gnu_make = { \ 23 if test -z '$(MAKELEVEL)'; then \ 24 false; \ 25 elif test -n '$(MAKE_HOST)'; then \ 26 true; \ 27 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ 28 true; \ 29 else \ 30 false; \ 31 fi; \ 32 } 33 am__make_running_with_option = \ 34 case $${target_option-} in \ 35 ?) ;; \ 36 *) echo "am__make_running_with_option: internal error: invalid" \ 37 "target option '$${target_option-}' specified" >&2; \ 38 exit 1;; \ 39 esac; \ 40 has_opt=no; \ 41 sane_makeflags=$$MAKEFLAGS; \ 42 if $(am__is_gnu_make); then \ 43 sane_makeflags=$$MFLAGS; \ 44 else \ 45 case $$MAKEFLAGS in \ 46 *\\[\ \ ]*) \ 47 bs=\\; \ 48 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ 49 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ 50 esac; \ 51 fi; \ 52 skip_next=no; \ 53 strip_trailopt () \ 54 { \ 55 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ 56 }; \ 57 for flg in $$sane_makeflags; do \ 58 test $$skip_next = yes && { skip_next=no; continue; }; \ 59 case $$flg in \ 60 *=*|--*) continue;; \ 61 -*I) strip_trailopt 'I'; skip_next=yes;; \ 62 -*I?*) strip_trailopt 'I';; \ 63 -*O) strip_trailopt 'O'; skip_next=yes;; \ 64 -*O?*) strip_trailopt 'O';; \ 65 -*l) strip_trailopt 'l'; skip_next=yes;; \ 66 -*l?*) strip_trailopt 'l';; \ 67 -[dEDm]) skip_next=yes;; \ 68 -[JT]) skip_next=yes;; \ 69 esac; \ 70 case $$flg in \ 71 *$$target_option*) has_opt=yes; break;; \ 72 esac; \ 73 done; \ 74 test $$has_opt = yes 75 am__make_dryrun = (target_option=n; $(am__make_running_with_option)) 76 am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 23 77 pkgdatadir = $(datadir)/@PACKAGE@ 24 78 pkgincludedir = $(includedir)/@PACKAGE@ … … 48 102 @BUILD_CONCURRENCY_TRUE@am__append_4 = concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/preemption.c 49 103 subdir = src/libcfa 50 DIST_COMMON = $(am__nobase_cfa_include_HEADERS_DIST) \51 $(srcdir)/Makefile.am $(srcdir)/Makefile.in52 104 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 53 105 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 54 106 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 55 107 $(ACLOCAL_M4) 108 DIST_COMMON = $(srcdir)/Makefile.am \ 109 $(am__nobase_cfa_include_HEADERS_DIST) $(am__DIST_COMMON) 56 110 mkinstalldirs = $(install_sh) -d 57 111 CONFIG_HEADER = $(top_builddir)/config.h … … 88 142 LIBRARIES = $(lib_LIBRARIES) 89 143 AR = ar 90 ARFLAGS = cru91 144 AM_V_AR = $(am__v_AR_@AM_V@) 92 145 am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) 93 am__v_AR_0 = @echo " AR " $@; 94 AM_V_at = $(am__v_at_@AM_V@) 95 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 96 am__v_at_0 = @ 146 am__v_AR_0 = @echo " AR " $@; 147 am__v_AR_1 = 97 148 libcfa_d_a_AR = $(AR) $(ARFLAGS) 98 149 libcfa_d_a_LIBADD = … … 102 153 containers/pair.c containers/result.c containers/vector.c \ 103 154 concurrency/coroutine.c concurrency/thread.c \ 104 concurrency/kernel.c concurrency/monitor.c \ 105 concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \ 106 concurrency/invoke.c concurrency/preemption.c 155 concurrency/kernel.c concurrency/monitor.c exception.c \ 156 typeobject.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \ 157 concurrency/alarm.c concurrency/invoke.c \ 158 concurrency/preemption.c 107 159 am__dirstamp = $(am__leading_dot)dirstamp 108 160 @BUILD_CONCURRENCY_TRUE@am__objects_1 = concurrency/libcfa_d_a-coroutine.$(OBJEXT) \ … … 126 178 libcfa_d_a-interpose.$(OBJEXT) \ 127 179 libhdr/libcfa_d_a-libdebug.$(OBJEXT) $(am__objects_2) \ 180 libcfa_d_a-exception.$(OBJEXT) libcfa_d_a-typeobject.$(OBJEXT) \ 128 181 $(am__objects_3) 129 182 am_libcfa_d_a_OBJECTS = $(am__objects_4) … … 136 189 containers/pair.c containers/result.c containers/vector.c \ 137 190 concurrency/coroutine.c concurrency/thread.c \ 138 concurrency/kernel.c concurrency/monitor.c \ 139 concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \ 140 concurrency/invoke.c concurrency/preemption.c 191 concurrency/kernel.c concurrency/monitor.c exception.c \ 192 typeobject.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \ 193 concurrency/alarm.c concurrency/invoke.c \ 194 concurrency/preemption.c 141 195 @BUILD_CONCURRENCY_TRUE@am__objects_5 = concurrency/libcfa_a-coroutine.$(OBJEXT) \ 142 196 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-thread.$(OBJEXT) \ … … 158 212 libcfa_a-interpose.$(OBJEXT) \ 159 213 libhdr/libcfa_a-libdebug.$(OBJEXT) $(am__objects_6) \ 214 libcfa_a-exception.$(OBJEXT) libcfa_a-typeobject.$(OBJEXT) \ 160 215 $(am__objects_7) 161 216 am_libcfa_a_OBJECTS = $(am__objects_8) 162 217 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS) 218 AM_V_P = $(am__v_P_@AM_V@) 219 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) 220 am__v_P_0 = false 221 am__v_P_1 = : 222 AM_V_GEN = $(am__v_GEN_@AM_V@) 223 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 224 am__v_GEN_0 = @echo " GEN " $@; 225 am__v_GEN_1 = 226 AM_V_at = $(am__v_at_@AM_V@) 227 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 228 am__v_at_0 = @ 229 am__v_at_1 = 163 230 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) 164 231 depcomp = $(SHELL) $(top_srcdir)/automake/depcomp … … 169 236 AM_V_CPPAS = $(am__v_CPPAS_@AM_V@) 170 237 am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@) 171 am__v_CPPAS_0 = @echo " CPPAS " $@; 238 am__v_CPPAS_0 = @echo " CPPAS " $@; 239 am__v_CPPAS_1 = 172 240 AM_V_lt = $(am__v_lt_@AM_V@) 173 241 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) 174 242 am__v_lt_0 = --silent 243 am__v_lt_1 = 175 244 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 176 245 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) 177 246 AM_V_CC = $(am__v_CC_@AM_V@) 178 247 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) 179 am__v_CC_0 = @echo " CC " $@; 248 am__v_CC_0 = @echo " CC " $@; 249 am__v_CC_1 = 180 250 CCLD = $(CC) 181 251 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 182 252 AM_V_CCLD = $(am__v_CCLD_@AM_V@) 183 253 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) 184 am__v_CCLD_0 = @echo " CCLD " $@; 185 AM_V_GEN = $(am__v_GEN_@AM_V@) 186 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 187 am__v_GEN_0 = @echo " GEN " $@; 254 am__v_CCLD_0 = @echo " CCLD " $@; 255 am__v_CCLD_1 = 188 256 SOURCES = $(libcfa_d_a_SOURCES) $(libcfa_a_SOURCES) 189 257 DIST_SOURCES = $(am__libcfa_d_a_SOURCES_DIST) \ 190 258 $(am__libcfa_a_SOURCES_DIST) 259 am__can_run_installinfo = \ 260 case $$AM_UPDATE_INFO_DIR in \ 261 n|no|NO) false;; \ 262 *) (install-info --version) >/dev/null 2>&1;; \ 263 esac 191 264 am__nobase_cfa_include_HEADERS_DIST = assert fstream iostream iterator \ 192 265 limits math rational stdlib containers/maybe containers/pair \ … … 195 268 ${shell echo stdhdr/*} gmp concurrency/invoke.h 196 269 HEADERS = $(nobase_cfa_include_HEADERS) 270 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) 271 # Read a list of newline-separated strings from the standard input, 272 # and print each of them once, without duplicates. Input order is 273 # *not* preserved. 274 am__uniquify_input = $(AWK) '\ 275 BEGIN { nonempty = 0; } \ 276 { items[$$0] = 1; nonempty = 1; } \ 277 END { if (nonempty) { for (i in items) print i; }; } \ 278 ' 279 # Make sure the list of sources is unique. This is necessary because, 280 # e.g., the same source file might be shared among _SOURCES variables 281 # for different programs/libraries. 282 am__define_uniq_tagged_files = \ 283 list='$(am__tagged_files)'; \ 284 unique=`for i in $$list; do \ 285 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 286 done | $(am__uniquify_input)` 197 287 ETAGS = etags 198 288 CTAGS = ctags 289 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp 199 290 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 200 291 ACLOCAL = @ACLOCAL@ … … 309 400 program_transform_name = @program_transform_name@ 310 401 psdir = @psdir@ 402 runstatedir = @runstatedir@ 311 403 sbindir = @sbindir@ 312 404 sharedstatedir = @sharedstatedir@ … … 320 412 # create object files in directory with source files 321 413 AUTOMAKE_OPTIONS = subdir-objects 414 ARFLAGS = cr 322 415 lib_LIBRARIES = $(am__append_1) $(am__append_2) 323 416 EXTRA_FLAGS = -g -Wall -Werror -Wno-unused-function -I${abs_top_srcdir}/src/libcfa/libhdr -imacros libcfa-prelude.c @CFA_FLAGS@ … … 328 421 libobjs = ${headers:=.o} 329 422 libsrc = libcfa-prelude.c interpose.c libhdr/libdebug.c ${headers:=.c} \ 330 $(am__append_4)423 exception.c typeobject.c $(am__append_4) 331 424 libcfa_a_SOURCES = ${libsrc} 332 425 libcfa_a_CFLAGS = -nodebug -O2 … … 353 446 $(am__cd) $(top_srcdir) && \ 354 447 $(AUTOMAKE) --foreign src/libcfa/Makefile 355 .PRECIOUS: Makefile356 448 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 357 449 @case '$?' in \ … … 373 465 install-libLIBRARIES: $(lib_LIBRARIES) 374 466 @$(NORMAL_INSTALL) 375 test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"376 467 @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ 377 468 list2=; for p in $$list; do \ … … 381 472 done; \ 382 473 test -z "$$list2" || { \ 474 echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ 475 $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ 383 476 echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ 384 477 $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } … … 448 541 concurrency/$(am__dirstamp) \ 449 542 concurrency/$(DEPDIR)/$(am__dirstamp) 543 450 544 libcfa-d.a: $(libcfa_d_a_OBJECTS) $(libcfa_d_a_DEPENDENCIES) $(EXTRA_libcfa_d_a_DEPENDENCIES) 451 545 $(AM_V_at)-rm -f libcfa-d.a … … 477 571 concurrency/$(am__dirstamp) \ 478 572 concurrency/$(DEPDIR)/$(am__dirstamp) 573 479 574 libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES) 480 575 $(AM_V_at)-rm -f libcfa.a … … 484 579 mostlyclean-compile: 485 580 -rm -f *.$(OBJEXT) 486 -rm -f concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT) 487 -rm -f concurrency/libcfa_a-alarm.$(OBJEXT) 488 -rm -f concurrency/libcfa_a-coroutine.$(OBJEXT) 489 -rm -f concurrency/libcfa_a-invoke.$(OBJEXT) 490 -rm -f concurrency/libcfa_a-kernel.$(OBJEXT) 491 -rm -f concurrency/libcfa_a-monitor.$(OBJEXT) 492 -rm -f concurrency/libcfa_a-preemption.$(OBJEXT) 493 -rm -f concurrency/libcfa_a-thread.$(OBJEXT) 494 -rm -f concurrency/libcfa_d_a-alarm.$(OBJEXT) 495 -rm -f concurrency/libcfa_d_a-coroutine.$(OBJEXT) 496 -rm -f concurrency/libcfa_d_a-invoke.$(OBJEXT) 497 -rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT) 498 -rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT) 499 -rm -f concurrency/libcfa_d_a-preemption.$(OBJEXT) 500 -rm -f concurrency/libcfa_d_a-thread.$(OBJEXT) 501 -rm -f containers/libcfa_a-maybe.$(OBJEXT) 502 -rm -f containers/libcfa_a-pair.$(OBJEXT) 503 -rm -f containers/libcfa_a-result.$(OBJEXT) 504 -rm -f containers/libcfa_a-vector.$(OBJEXT) 505 -rm -f containers/libcfa_d_a-maybe.$(OBJEXT) 506 -rm -f containers/libcfa_d_a-pair.$(OBJEXT) 507 -rm -f containers/libcfa_d_a-result.$(OBJEXT) 508 -rm -f containers/libcfa_d_a-vector.$(OBJEXT) 509 -rm -f libhdr/libcfa_a-libdebug.$(OBJEXT) 510 -rm -f libhdr/libcfa_d_a-libdebug.$(OBJEXT) 581 -rm -f concurrency/*.$(OBJEXT) 582 -rm -f containers/*.$(OBJEXT) 583 -rm -f libhdr/*.$(OBJEXT) 511 584 512 585 distclean-compile: … … 514 587 515 588 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-assert.Po@am__quote@ 589 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-exception.Po@am__quote@ 516 590 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-fstream.Po@am__quote@ 517 591 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-interpose.Po@am__quote@ … … 523 597 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-rational.Po@am__quote@ 524 598 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-stdlib.Po@am__quote@ 599 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_a-typeobject.Po@am__quote@ 525 600 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-assert.Po@am__quote@ 601 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-exception.Po@am__quote@ 526 602 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-fstream.Po@am__quote@ 527 603 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-interpose.Po@am__quote@ … … 533 609 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-rational.Po@am__quote@ 534 610 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-stdlib.Po@am__quote@ 611 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcfa_d_a-typeobject.Po@am__quote@ 535 612 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/CtxSwitch-@MACHINE_TYPE@.Po@am__quote@ 536 613 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-alarm.Po@am__quote@ … … 850 927 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi` 851 928 929 libcfa_d_a-exception.obj: exception.c 930 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-exception.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-exception.Tpo -c -o libcfa_d_a-exception.obj `if test -f 'exception.c'; then $(CYGPATH_W) 'exception.c'; else $(CYGPATH_W) '$(srcdir)/exception.c'; fi` 931 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-exception.Tpo $(DEPDIR)/libcfa_d_a-exception.Po 932 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='exception.c' object='libcfa_d_a-exception.obj' libtool=no @AMDEPBACKSLASH@ 933 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 934 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-exception.obj `if test -f 'exception.c'; then $(CYGPATH_W) 'exception.c'; else $(CYGPATH_W) '$(srcdir)/exception.c'; fi` 935 936 libcfa_d_a-typeobject.obj: typeobject.c 937 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-typeobject.obj -MD -MP -MF $(DEPDIR)/libcfa_d_a-typeobject.Tpo -c -o libcfa_d_a-typeobject.obj `if test -f 'typeobject.c'; then $(CYGPATH_W) 'typeobject.c'; else $(CYGPATH_W) '$(srcdir)/typeobject.c'; fi` 938 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_d_a-typeobject.Tpo $(DEPDIR)/libcfa_d_a-typeobject.Po 939 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='typeobject.c' object='libcfa_d_a-typeobject.obj' libtool=no @AMDEPBACKSLASH@ 940 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 941 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o libcfa_d_a-typeobject.obj `if test -f 'typeobject.c'; then $(CYGPATH_W) 'typeobject.c'; else $(CYGPATH_W) '$(srcdir)/typeobject.c'; fi` 942 852 943 concurrency/libcfa_d_a-alarm.o: concurrency/alarm.c 853 944 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-alarm.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-alarm.Tpo -c -o concurrency/libcfa_d_a-alarm.o `test -f 'concurrency/alarm.c' || echo '$(srcdir)/'`concurrency/alarm.c … … 1144 1235 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi` 1145 1236 1237 libcfa_a-exception.obj: exception.c 1238 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-exception.obj -MD -MP -MF $(DEPDIR)/libcfa_a-exception.Tpo -c -o libcfa_a-exception.obj `if test -f 'exception.c'; then $(CYGPATH_W) 'exception.c'; else $(CYGPATH_W) '$(srcdir)/exception.c'; fi` 1239 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-exception.Tpo $(DEPDIR)/libcfa_a-exception.Po 1240 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='exception.c' object='libcfa_a-exception.obj' libtool=no @AMDEPBACKSLASH@ 1241 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1242 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-exception.obj `if test -f 'exception.c'; then $(CYGPATH_W) 'exception.c'; else $(CYGPATH_W) '$(srcdir)/exception.c'; fi` 1243 1244 libcfa_a-typeobject.obj: typeobject.c 1245 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT libcfa_a-typeobject.obj -MD -MP -MF $(DEPDIR)/libcfa_a-typeobject.Tpo -c -o libcfa_a-typeobject.obj `if test -f 'typeobject.c'; then $(CYGPATH_W) 'typeobject.c'; else $(CYGPATH_W) '$(srcdir)/typeobject.c'; fi` 1246 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcfa_a-typeobject.Tpo $(DEPDIR)/libcfa_a-typeobject.Po 1247 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='typeobject.c' object='libcfa_a-typeobject.obj' libtool=no @AMDEPBACKSLASH@ 1248 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1249 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o libcfa_a-typeobject.obj `if test -f 'typeobject.c'; then $(CYGPATH_W) 'typeobject.c'; else $(CYGPATH_W) '$(srcdir)/typeobject.c'; fi` 1250 1146 1251 concurrency/libcfa_a-alarm.o: concurrency/alarm.c 1147 1252 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-alarm.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-alarm.Tpo -c -o concurrency/libcfa_a-alarm.o `test -f 'concurrency/alarm.c' || echo '$(srcdir)/'`concurrency/alarm.c … … 1180 1285 install-nobase_cfa_includeHEADERS: $(nobase_cfa_include_HEADERS) 1181 1286 @$(NORMAL_INSTALL) 1182 test -z "$(cfa_includedir)" || $(MKDIR_P) "$(DESTDIR)$(cfa_includedir)"1183 1287 @list='$(nobase_cfa_include_HEADERS)'; test -n "$(cfa_includedir)" || list=; \ 1288 if test -n "$$list"; then \ 1289 echo " $(MKDIR_P) '$(DESTDIR)$(cfa_includedir)'"; \ 1290 $(MKDIR_P) "$(DESTDIR)$(cfa_includedir)" || exit 1; \ 1291 fi; \ 1184 1292 $(am__nobase_list) | while read dir files; do \ 1185 1293 xfiles=; for file in $$files; do \ … … 1188 1296 test -z "$$xfiles" || { \ 1189 1297 test "x$$dir" = x. || { \ 1190 echo " $(MKDIR_P) '$(DESTDIR)$(cfa_includedir)/$$dir'"; \1298 echo " $(MKDIR_P) '$(DESTDIR)$(cfa_includedir)/$$dir'"; \ 1191 1299 $(MKDIR_P) "$(DESTDIR)$(cfa_includedir)/$$dir"; }; \ 1192 1300 echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(cfa_includedir)/$$dir'"; \ … … 1200 1308 dir='$(DESTDIR)$(cfa_includedir)'; $(am__uninstall_files_from_dir) 1201 1309 1202 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 1203 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 1204 unique=`for i in $$list; do \ 1205 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 1206 done | \ 1207 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 1208 END { if (nonempty) { for (i in files) print i; }; }'`; \ 1209 mkid -fID $$unique 1210 tags: TAGS 1211 1212 TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 1213 $(TAGS_FILES) $(LISP) 1310 ID: $(am__tagged_files) 1311 $(am__define_uniq_tagged_files); mkid -fID $$unique 1312 tags: tags-am 1313 TAGS: tags 1314 1315 tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 1214 1316 set x; \ 1215 1317 here=`pwd`; \ 1216 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 1217 unique=`for i in $$list; do \ 1218 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 1219 done | \ 1220 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 1221 END { if (nonempty) { for (i in files) print i; }; }'`; \ 1318 $(am__define_uniq_tagged_files); \ 1222 1319 shift; \ 1223 1320 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ … … 1231 1328 fi; \ 1232 1329 fi 1233 ctags: CTAGS 1234 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 1235 $(TAGS_FILES) $(LISP) 1236 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 1237 unique=`for i in $$list; do \ 1238 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 1239 done | \ 1240 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 1241 END { if (nonempty) { for (i in files) print i; }; }'`; \ 1330 ctags: ctags-am 1331 1332 CTAGS: ctags 1333 ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 1334 $(am__define_uniq_tagged_files); \ 1242 1335 test -z "$(CTAGS_ARGS)$$unique" \ 1243 1336 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ … … 1248 1341 && $(am__cd) $(top_srcdir) \ 1249 1342 && gtags -i $(GTAGS_ARGS) "$$here" 1343 cscopelist: cscopelist-am 1344 1345 cscopelist-am: $(am__tagged_files) 1346 list='$(am__tagged_files)'; \ 1347 case "$(srcdir)" in \ 1348 [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ 1349 *) sdir=$(subdir)/$(srcdir) ;; \ 1350 esac; \ 1351 for i in $$list; do \ 1352 if test -f "$$i"; then \ 1353 echo "$(subdir)/$$i"; \ 1354 else \ 1355 echo "$$sdir/$$i"; \ 1356 fi; \ 1357 done >> $(top_builddir)/cscope.files 1250 1358 1251 1359 distclean-tags: … … 1399 1507 .MAKE: install-am install-strip 1400 1508 1401 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \1402 clean-libLIBRARIES c tags distclean distclean-compile\1403 distclean- generic distclean-tags distdir dvi dvi-am html\1404 html-am info info-am install install-am install-data\1405 install-data -am install-dvi install-dvi-am install-exec\1406 install-exec -am install-html install-html-am install-info\1407 install-info -am install-libLIBRARIES install-man \1509 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ 1510 clean-libLIBRARIES cscopelist-am ctags ctags-am distclean \ 1511 distclean-compile distclean-generic distclean-tags distdir dvi \ 1512 dvi-am html html-am info info-am install install-am \ 1513 install-data install-data-am install-dvi install-dvi-am \ 1514 install-exec install-exec-am install-html install-html-am \ 1515 install-info install-info-am install-libLIBRARIES install-man \ 1408 1516 install-nobase_cfa_includeHEADERS install-pdf install-pdf-am \ 1409 1517 install-ps install-ps-am install-strip installcheck \ … … 1411 1519 maintainer-clean-generic maintainer-clean-local mostlyclean \ 1412 1520 mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ 1413 tags uninstall uninstall-am uninstall-libLIBRARIES \1521 tags tags-am uninstall uninstall-am uninstall-libLIBRARIES \ 1414 1522 uninstall-nobase_cfa_includeHEADERS 1523 1524 .PRECIOUS: Makefile 1415 1525 1416 1526 … … 1428 1538 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $< 1429 1539 1540 libcfa_a-exception.o : exception.c 1541 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $< 1542 1543 libcfa_a-typeobject.o : typeobject.c 1544 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $< 1545 1430 1546 concurrency/libcfa_d_a-invoke.o : concurrency/invoke.c 1547 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $< 1548 1549 libcfa_d_a-exception.o : exception.c 1550 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $< 1551 1552 libcfa_d_a-typeobject.o : typeobject.c 1431 1553 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $< 1432 1554 -
src/libcfa/concurrency/CtxSwitch-i386.S
rfea3faa rb826e6b 98 98 ret 99 99 100 .text101 .align 2102 .globl CtxGet103 CtxGet:104 movl %esp,SP_OFFSET(%eax)105 movl %ebp,FP_OFFSET(%eax)106 107 ret108 109 100 // Local Variables: // 110 101 // compile-command: "make install" // -
src/libcfa/concurrency/CtxSwitch-x86_64.S
rfea3faa rb826e6b 1 // -*- Mode: Asm -*- 1 // -*- Mode: Asm -*- 2 2 // 3 3 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo … … 18 18 // Free Software Foundation; either version 2.1 of the License, or (at your 19 19 // option) any later version. 20 // 20 // 21 21 // This library is distributed in the hope that it will be useful, but WITHOUT 22 22 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 23 23 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 24 24 // for more details. 25 // 25 // 26 26 // You should have received a copy of the GNU Lesser General Public License 27 27 // along with this library. 28 // 28 // 29 29 30 30 // This context switch routine depends on the fact that the stack of a new … … 93 93 .globl CtxInvokeStub 94 94 CtxInvokeStub: 95 movq %rbx, %rdi 95 movq %rbx, %rdi 96 96 jmp *%r12 97 98 .text99 .align 2100 .globl CtxGet101 CtxGet:102 movq %rsp,SP_OFFSET(%rdi)103 movq %rbp,FP_OFFSET(%rdi)104 105 ret106 97 107 98 // Local Variables: // -
src/libcfa/concurrency/alarm.c
rfea3faa rb826e6b 16 16 17 17 extern "C" { 18 #include <errno.h> 19 #include <stdio.h> 20 #include <string.h> 18 21 #include <time.h> 22 #include <unistd.h> 19 23 #include <sys/time.h> 20 24 } 25 26 #include "libhdr.h" 21 27 22 28 #include "alarm.h" … … 25 31 26 32 //============================================================================================= 33 // time type 34 //============================================================================================= 35 36 #define one_second 1_000_000_000ul 37 #define one_milisecond 1_000_000ul 38 #define one_microsecond 1_000ul 39 #define one_nanosecond 1ul 40 41 __cfa_time_t zero_time = { 0 }; 42 43 void ?{}( __cfa_time_t * this ) { this->val = 0; } 44 void ?{}( __cfa_time_t * this, zero_t zero ) { this->val = 0; } 45 46 void ?{}( itimerval * this, __cfa_time_t * alarm ) { 47 this->it_value.tv_sec = alarm->val / one_second; // seconds 48 this->it_value.tv_usec = max( (alarm->val % one_second) / one_microsecond, 1000 ); // microseconds 49 this->it_interval.tv_sec = 0; 50 this->it_interval.tv_usec = 0; 51 } 52 53 54 void ?{}( __cfa_time_t * this, timespec * curr ) { 55 uint64_t secs = curr->tv_sec; 56 uint64_t nsecs = curr->tv_nsec; 57 this->val = (secs * one_second) + nsecs; 58 } 59 60 __cfa_time_t ?=?( __cfa_time_t * this, zero_t rhs ) { 61 this->val = 0; 62 return *this; 63 } 64 65 __cfa_time_t from_s ( uint64_t val ) { __cfa_time_t ret; ret.val = val * 1_000_000_000ul; return ret; } 66 __cfa_time_t from_ms( uint64_t val ) { __cfa_time_t ret; ret.val = val * 1_000_000ul; return ret; } 67 __cfa_time_t from_us( uint64_t val ) { __cfa_time_t ret; ret.val = val * 1_000ul; return ret; } 68 __cfa_time_t from_ns( uint64_t val ) { __cfa_time_t ret; ret.val = val * 1ul; return ret; } 69 70 //============================================================================================= 27 71 // Clock logic 28 72 //============================================================================================= … … 31 75 timespec curr; 32 76 clock_gettime( CLOCK_REALTIME, &curr ); 33 return ( (__cfa_time_t)curr.tv_sec * TIMEGRAN) + curr.tv_nsec;77 return (__cfa_time_t){ &curr }; 34 78 } 35 79 36 80 void __kernel_set_timer( __cfa_time_t alarm ) { 37 itimerval val; 38 val.it_value.tv_sec = alarm / TIMEGRAN; // seconds 39 val.it_value.tv_usec = (alarm % TIMEGRAN) / ( TIMEGRAN / 1_000_000L ); // microseconds 40 val.it_interval.tv_sec = 0; 41 val.it_interval.tv_usec = 0; 81 itimerval val = { &alarm }; 42 82 setitimer( ITIMER_REAL, &val, NULL ); 43 83 } … … 47 87 //============================================================================================= 48 88 49 void ?{}( alarm_node_t * this, thread_desc * thrd, __cfa_time_t alarm = 0, __cfa_time_t period = 0) {89 void ?{}( alarm_node_t * this, thread_desc * thrd, __cfa_time_t alarm = zero_time, __cfa_time_t period = zero_time ) { 50 90 this->thrd = thrd; 51 91 this->alarm = alarm; … … 56 96 } 57 97 58 void ?{}( alarm_node_t * this, processor * proc, __cfa_time_t alarm = 0, __cfa_time_t period = 0) {98 void ?{}( alarm_node_t * this, processor * proc, __cfa_time_t alarm = zero_time, __cfa_time_t period = zero_time ) { 59 99 this->proc = proc; 60 100 this->alarm = alarm; … … 71 111 } 72 112 113 LIB_DEBUG_DO( bool validate( alarm_list_t * this ) { 114 alarm_node_t ** it = &this->head; 115 while( (*it) ) { 116 it = &(*it)->next; 117 } 118 119 return it == this->tail; 120 }) 121 73 122 static inline void insert_at( alarm_list_t * this, alarm_node_t * n, __alarm_it_t p ) { 74 assert( !n->next );123 verify( !n->next ); 75 124 if( p == this->tail ) { 76 125 this->tail = &n->next; … … 80 129 } 81 130 *p = n; 131 132 verify( validate( this ) ); 82 133 } 83 134 … … 89 140 90 141 insert_at( this, n, it ); 142 143 verify( validate( this ) ); 91 144 } 92 145 … … 100 153 head->next = NULL; 101 154 } 155 verify( validate( this ) ); 102 156 return head; 103 157 } … … 105 159 static inline void remove_at( alarm_list_t * this, alarm_node_t * n, __alarm_it_t it ) { 106 160 verify( it ); 107 verify( (*it) ->next== n );108 109 (*it) ->next= n->next;161 verify( (*it) == n ); 162 163 (*it) = n->next; 110 164 if( !n-> next ) { 111 165 this->tail = it; 112 166 } 113 167 n->next = NULL; 168 169 verify( validate( this ) ); 114 170 } 115 171 116 172 static inline void remove( alarm_list_t * this, alarm_node_t * n ) { 117 173 alarm_node_t ** it = &this->head; 118 while( (*it) && (*it) ->next!= n ) {174 while( (*it) && (*it) != n ) { 119 175 it = &(*it)->next; 120 176 } 121 177 178 verify( validate( this ) ); 179 122 180 if( *it ) { remove_at( this, n, it ); } 181 182 verify( validate( this ) ); 123 183 } 124 184 125 185 void register_self( alarm_node_t * this ) { 186 alarm_list_t * alarms = &event_kernel->alarms; 187 126 188 disable_interrupts(); 127 assert( !systemProcessor->pending_alarm ); 128 lock( &systemProcessor->alarm_lock ); 189 lock( &event_kernel->lock DEBUG_CTX2 ); 129 190 { 130 insert( &systemProcessor->alarms, this ); 131 if( systemProcessor->pending_alarm ) { 132 tick_preemption(); 191 verify( validate( alarms ) ); 192 bool first = !alarms->head; 193 194 insert( alarms, this ); 195 if( first ) { 196 __kernel_set_timer( alarms->head->alarm - __kernel_get_time() ); 133 197 } 134 198 } 135 unlock( & systemProcessor->alarm_lock );199 unlock( &event_kernel->lock ); 136 200 this->set = true; 137 enable_interrupts( );201 enable_interrupts( DEBUG_CTX ); 138 202 } 139 203 140 204 void unregister_self( alarm_node_t * this ) { 141 205 disable_interrupts(); 142 lock( &systemProcessor->alarm_lock ); 143 remove( &systemProcessor->alarms, this ); 144 unlock( &systemProcessor->alarm_lock ); 145 disable_interrupts(); 206 lock( &event_kernel->lock DEBUG_CTX2 ); 207 { 208 verify( validate( &event_kernel->alarms ) ); 209 remove( &event_kernel->alarms, this ); 210 } 211 unlock( &event_kernel->lock ); 212 enable_interrupts( DEBUG_CTX ); 146 213 this->set = false; 147 214 } -
src/libcfa/concurrency/alarm.h
rfea3faa rb826e6b 19 19 20 20 #include <stdbool.h> 21 #include <stdint.h> 21 22 22 23 #include "assert" 23 24 typedef unsigned long int __cfa_time_t;25 24 26 25 struct thread_desc; 27 26 struct processor; 28 27 28 struct timespec; 29 struct itimerval; 30 31 //============================================================================================= 32 // time type 33 //============================================================================================= 34 35 struct __cfa_time_t { 36 uint64_t val; 37 }; 38 39 // ctors 40 void ?{}( __cfa_time_t * this ); 41 void ?{}( __cfa_time_t * this, zero_t zero ); 42 void ?{}( __cfa_time_t * this, timespec * curr ); 43 void ?{}( itimerval * this, __cfa_time_t * alarm ); 44 45 __cfa_time_t ?=?( __cfa_time_t * this, zero_t rhs ); 46 47 // logical ops 48 static inline bool ?==?( __cfa_time_t lhs, __cfa_time_t rhs ) { return lhs.val == rhs.val; } 49 static inline bool ?!=?( __cfa_time_t lhs, __cfa_time_t rhs ) { return lhs.val != rhs.val; } 50 static inline bool ?>? ( __cfa_time_t lhs, __cfa_time_t rhs ) { return lhs.val > rhs.val; } 51 static inline bool ?<? ( __cfa_time_t lhs, __cfa_time_t rhs ) { return lhs.val < rhs.val; } 52 static inline bool ?>=?( __cfa_time_t lhs, __cfa_time_t rhs ) { return lhs.val >= rhs.val; } 53 static inline bool ?<=?( __cfa_time_t lhs, __cfa_time_t rhs ) { return lhs.val <= rhs.val; } 54 55 static inline bool ?==?( __cfa_time_t lhs, zero_t rhs ) { return lhs.val == rhs; } 56 static inline bool ?!=?( __cfa_time_t lhs, zero_t rhs ) { return lhs.val != rhs; } 57 static inline bool ?>? ( __cfa_time_t lhs, zero_t rhs ) { return lhs.val > rhs; } 58 static inline bool ?<? ( __cfa_time_t lhs, zero_t rhs ) { return lhs.val < rhs; } 59 static inline bool ?>=?( __cfa_time_t lhs, zero_t rhs ) { return lhs.val >= rhs; } 60 static inline bool ?<=?( __cfa_time_t lhs, zero_t rhs ) { return lhs.val <= rhs; } 61 62 // addition/substract 63 static inline __cfa_time_t ?+?( __cfa_time_t lhs, __cfa_time_t rhs ) { 64 __cfa_time_t ret; 65 ret.val = lhs.val + rhs.val; 66 return ret; 67 } 68 69 static inline __cfa_time_t ?-?( __cfa_time_t lhs, __cfa_time_t rhs ) { 70 __cfa_time_t ret; 71 ret.val = lhs.val - rhs.val; 72 return ret; 73 } 74 75 __cfa_time_t from_s ( uint64_t ); 76 __cfa_time_t from_ms( uint64_t ); 77 __cfa_time_t from_us( uint64_t ); 78 __cfa_time_t from_ns( uint64_t ); 79 80 extern __cfa_time_t zero_time; 81 29 82 //============================================================================================= 30 83 // Clock logic 31 84 //============================================================================================= 32 33 #define TIMEGRAN 1_000_000_000L // nanosecond granularity, except for timeval34 85 35 86 __cfa_time_t __kernel_get_time(); … … 56 107 typedef alarm_node_t ** __alarm_it_t; 57 108 58 void ?{}( alarm_node_t * this, thread_desc * thrd, __cfa_time_t alarm = 0, __cfa_time_t period = 0);59 void ?{}( alarm_node_t * this, processor * proc, __cfa_time_t alarm = 0, __cfa_time_t period = 0);109 void ?{}( alarm_node_t * this, thread_desc * thrd, __cfa_time_t alarm = zero_time, __cfa_time_t period = zero_time ); 110 void ?{}( alarm_node_t * this, processor * proc, __cfa_time_t alarm = zero_time, __cfa_time_t period = zero_time ); 60 111 void ^?{}( alarm_node_t * this ); 61 112 -
src/libcfa/concurrency/coroutine
rfea3faa rb826e6b 63 63 64 64 // Get current coroutine 65 coroutine_desc * this_coroutine(void);65 extern volatile thread_local coroutine_desc * this_coroutine; 66 66 67 67 // Private wrappers for context switch and stack creation … … 71 71 // Suspend implementation inlined for performance 72 72 static inline void suspend() { 73 coroutine_desc * src = this_coroutine (); // optimization73 coroutine_desc * src = this_coroutine; // optimization 74 74 75 75 assertf( src->last != 0, … … 88 88 forall(dtype T | is_coroutine(T)) 89 89 static inline void resume(T * cor) { 90 coroutine_desc * src = this_coroutine (); // optimization90 coroutine_desc * src = this_coroutine; // optimization 91 91 coroutine_desc * dst = get_coroutine(cor); 92 92 … … 112 112 113 113 static inline void resume(coroutine_desc * dst) { 114 coroutine_desc * src = this_coroutine (); // optimization114 coroutine_desc * src = this_coroutine; // optimization 115 115 116 116 // not resuming self ? -
src/libcfa/concurrency/coroutine.c
rfea3faa rb826e6b 32 32 #include "invoke.h" 33 33 34 extern thread_local processor * this_processor;34 extern volatile thread_local processor * this_processor; 35 35 36 36 //----------------------------------------------------------------------------- … … 44 44 // Coroutine ctors and dtors 45 45 void ?{}(coStack_t* this) { 46 this->size = 10240; // size of stack46 this->size = 65000; // size of stack 47 47 this->storage = NULL; // pointer to stack 48 48 this->limit = NULL; // stack grows towards stack limit … … 50 50 this->context = NULL; // address of cfa_context_t 51 51 this->top = NULL; // address of top of storage 52 this->userStack = false; 52 this->userStack = false; 53 53 } 54 54 … … 106 106 107 107 // set state of current coroutine to inactive 108 src->state = Inactive;108 src->state = src->state == Halted ? Halted : Inactive; 109 109 110 110 // set new coroutine that task is executing 111 this_ processor->current_coroutine = dst;111 this_coroutine = dst; 112 112 113 113 // context switch to specified coroutine 114 assert( src->stack.context ); 114 115 CtxSwitch( src->stack.context, dst->stack.context ); 115 // when CtxSwitch returns we are back in the src coroutine 116 // when CtxSwitch returns we are back in the src coroutine 116 117 117 118 // set state of new coroutine to active … … 131 132 this->size = libCeiling( storageSize, 16 ); 132 133 // use malloc/memalign because "new" raises an exception for out-of-memory 133 134 134 135 // assume malloc has 8 byte alignment so add 8 to allow rounding up to 16 byte alignment 135 136 LIB_DEBUG_DO( this->storage = memalign( pageSize, cxtSize + this->size + pageSize ) ); -
src/libcfa/concurrency/invoke.c
rfea3faa rb826e6b 29 29 30 30 extern void __suspend_internal(void); 31 extern void __leave_monitor_desc( struct monitor_desc * this ); 31 extern void __leave_thread_monitor( struct thread_desc * this ); 32 extern void disable_interrupts(); 33 extern void enable_interrupts( DEBUG_CTX_PARAM ); 32 34 33 35 void CtxInvokeCoroutine( 34 void (*main)(void *), 35 struct coroutine_desc *(*get_coroutine)(void *), 36 void (*main)(void *), 37 struct coroutine_desc *(*get_coroutine)(void *), 36 38 void *this 37 39 ) { … … 56 58 57 59 void CtxInvokeThread( 58 void (*dtor)(void *), 59 void (*main)(void *), 60 struct thread_desc *(*get_thread)(void *), 60 void (*dtor)(void *), 61 void (*main)(void *), 62 struct thread_desc *(*get_thread)(void *), 61 63 void *this 62 64 ) { 65 // First suspend, once the thread arrives here, 66 // the function pointer to main can be invalidated without risk 63 67 __suspend_internal(); 64 68 69 // Fetch the thread handle from the user defined thread structure 65 70 struct thread_desc* thrd = get_thread( this ); 66 struct coroutine_desc* cor = &thrd->cor;67 struct monitor_desc* mon = &thrd->mon;68 cor->state = Active;69 71 70 // LIB_DEBUG_PRINTF("Invoke Thread : invoking main %p (args %p)\n", main, this); 72 // Officially start the thread by enabling preemption 73 enable_interrupts( DEBUG_CTX ); 74 75 // Call the main of the thread 71 76 main( this ); 72 77 73 __leave_monitor_desc( mon ); 74 78 // To exit a thread we must : 79 // 1 - Mark it as halted 80 // 2 - Leave its monitor 81 // 3 - Disable the interupts 82 // 4 - Final suspend 83 // The order of these 4 operations is very important 75 84 //Final suspend, should never return 76 __ suspend_internal();85 __leave_thread_monitor( thrd ); 77 86 abortf("Resumed dead thread"); 78 87 } … … 80 89 81 90 void CtxStart( 82 void (*main)(void *), 83 struct coroutine_desc *(*get_coroutine)(void *), 84 void *this, 91 void (*main)(void *), 92 struct coroutine_desc *(*get_coroutine)(void *), 93 void *this, 85 94 void (*invoke)(void *) 86 95 ) { … … 108 117 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->rturn = invoke; 109 118 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->mxcr = 0x1F80; //Vol. 2A 3-520 110 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F; //Vol. 1 8-7 119 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F; //Vol. 1 8-7 111 120 112 121 #elif defined( __x86_64__ ) … … 128 137 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[1] = invoke; 129 138 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->mxcr = 0x1F80; //Vol. 2A 3-520 130 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F; //Vol. 1 8-7 139 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F; //Vol. 1 8-7 131 140 #else 132 141 #error Only __i386__ and __x86_64__ is supported for threads in cfa -
src/libcfa/concurrency/invoke.h
rfea3faa rb826e6b 31 31 struct spinlock { 32 32 volatile int lock; 33 #ifdef __CFA_DEBUG__ 34 const char * prev_name; 35 void* prev_thrd; 36 #endif 33 37 }; 34 38 … … 83 87 struct __thread_queue_t entry_queue; // queue of threads that are blocked waiting for the monitor 84 88 struct __condition_stack_t signal_stack; // stack of conditions to run next once we exit the monitor 85 struct monitor_desc * stack_owner; // if bulk acquiring was used we need to synchronize signals with an other monitor86 89 unsigned int recursion; // monitor routines can be called recursively, we need to keep track of that 87 90 }; … … 99 102 #ifndef _INVOKE_PRIVATE_H_ 100 103 #define _INVOKE_PRIVATE_H_ 101 104 102 105 struct machine_context_t { 103 106 void *SP; … … 109 112 extern void CtxInvokeStub( void ); 110 113 void CtxSwitch( void * from, void * to ) asm ("CtxSwitch"); 111 void CtxGet( void * this ) asm ("CtxGet"); 114 115 #if defined( __x86_64__ ) 116 #define CtxGet( ctx ) __asm__ ( \ 117 "movq %%rsp,%0\n" \ 118 "movq %%rbp,%1\n" \ 119 : "=rm" (ctx.SP), "=rm" (ctx.FP) ) 120 #elif defined( __i386__ ) 121 #define CtxGet( ctx ) __asm__ ( \ 122 "movl %%esp,%0\n" \ 123 "movl %%ebp,%1\n" \ 124 : "=rm" (ctx.SP), "=rm" (ctx.FP) ) 125 #endif 112 126 113 127 #endif //_INVOKE_PRIVATE_H_ -
src/libcfa/concurrency/kernel
rfea3faa rb826e6b 28 28 //----------------------------------------------------------------------------- 29 29 // Locks 30 bool try_lock( spinlock * ); 31 void lock( spinlock * ); 32 void unlock( spinlock * ); 30 void lock ( spinlock * DEBUG_CTX_PARAM2 ); // Lock the spinlock, spin if already acquired 31 void lock_yield( spinlock * DEBUG_CTX_PARAM2 ); // Lock the spinlock, yield repeatedly if already acquired 32 bool try_lock ( spinlock * DEBUG_CTX_PARAM2 ); // Lock the spinlock, return false if already acquired 33 void unlock ( spinlock * ); // Unlock the spinlock 33 34 34 struct s ignal_once {35 volatile bool cond;36 struct spinlock lock;37 struct __thread_queue_t blocked;35 struct semaphore { 36 spinlock lock; 37 int count; 38 __thread_queue_t waiting; 38 39 }; 39 40 40 void ?{}(signal_once * this); 41 void ^?{}(signal_once * this); 41 void ?{}(semaphore * this, int count = 1); 42 void ^?{}(semaphore * this); 43 void P(semaphore * this); 44 void V(semaphore * this); 42 45 43 void wait( signal_once * );44 void signal( signal_once * );45 46 46 47 //----------------------------------------------------------------------------- 47 48 // Cluster 48 49 struct cluster { 49 __thread_queue_t ready_queue; 50 spinlock lock; 50 spinlock ready_queue_lock; // Ready queue locks 51 __thread_queue_t ready_queue; // Ready queue for threads 52 unsigned long long int preemption; // Preemption rate on this cluster 51 53 }; 52 54 … … 68 70 unsigned short thrd_count; 69 71 }; 70 static inline void ?{}(FinishAction * this) { 72 static inline void ?{}(FinishAction * this) { 71 73 this->action_code = No_Action; 72 74 this->thrd = NULL; … … 75 77 static inline void ^?{}(FinishAction * this) {} 76 78 79 // Processor 80 // Wrapper around kernel threads 77 81 struct processor { 78 struct processorCtx_t * runner; 79 cluster * cltr; 80 coroutine_desc * current_coroutine; 81 thread_desc * current_thread; 82 pthread_t kernel_thread; 83 84 signal_once terminated; 85 volatile bool is_terminated; 82 // Main state 83 struct processorCtx_t * runner; // Coroutine ctx who does keeps the state of the processor 84 cluster * cltr; // Cluster from which to get threads 85 pthread_t kernel_thread; // Handle to pthreads 86 86 87 struct FinishAction finish; 87 // Termination 88 volatile bool do_terminate; // Set to true to notify the processor should terminate 89 semaphore terminated; // Termination synchronisation 88 90 89 struct alarm_node_t * preemption_alarm;90 unsigned int preemption;91 // RunThread data 92 struct FinishAction finish; // Action to do after a thread is ran 91 93 92 unsigned short disable_preempt_count; 94 // Preemption data 95 struct alarm_node_t * preemption_alarm; // Node which is added in the discrete event simulaiton 96 bool pending_preemption; // If true, a preemption was triggered in an unsafe region, the processor must preempt as soon as possible 93 97 94 bool pending_preemption; 98 #ifdef __CFA_DEBUG__ 99 char * last_enable; // Last function to enable preemption on this processor 100 #endif 95 101 }; 96 102 -
src/libcfa/concurrency/kernel.c
rfea3faa rb826e6b 15 15 // 16 16 17 #include "startup.h" 18 19 //Start and stop routine for the kernel, declared first to make sure they run first 20 void kernel_startup(void) __attribute__(( constructor( STARTUP_PRIORITY_KERNEL ) )); 21 void kernel_shutdown(void) __attribute__(( destructor ( STARTUP_PRIORITY_KERNEL ) )); 22 23 //Header 24 #include "kernel_private.h" 17 #include "libhdr.h" 25 18 26 19 //C Includes … … 35 28 36 29 //CFA Includes 37 #include " libhdr.h"30 #include "kernel_private.h" 38 31 #include "preemption.h" 32 #include "startup.h" 39 33 40 34 //Private includes … … 42 36 #include "invoke.h" 43 37 38 //Start and stop routine for the kernel, declared first to make sure they run first 39 void kernel_startup(void) __attribute__(( constructor( STARTUP_PRIORITY_KERNEL ) )); 40 void kernel_shutdown(void) __attribute__(( destructor ( STARTUP_PRIORITY_KERNEL ) )); 41 44 42 //----------------------------------------------------------------------------- 45 43 // Kernel storage 46 #define KERNEL_STORAGE(T,X) static char X##_storage[sizeof(T)] 47 48 KERNEL_STORAGE(processorCtx_t, systemProcessorCtx); 49 KERNEL_STORAGE(cluster, systemCluster); 50 KERNEL_STORAGE(system_proc_t, systemProcessor); 51 KERNEL_STORAGE(thread_desc, mainThread); 52 KERNEL_STORAGE(machine_context_t, mainThread_context); 53 54 cluster * systemCluster; 55 system_proc_t * systemProcessor; 44 KERNEL_STORAGE(cluster, mainCluster); 45 KERNEL_STORAGE(processor, mainProcessor); 46 KERNEL_STORAGE(processorCtx_t, mainProcessorCtx); 47 KERNEL_STORAGE(thread_desc, mainThread); 48 KERNEL_STORAGE(machine_context_t, mainThreadCtx); 49 50 cluster * mainCluster; 51 processor * mainProcessor; 56 52 thread_desc * mainThread; 57 53 … … 59 55 // Global state 60 56 61 thread_local processor * this_processor; 62 63 coroutine_desc * this_coroutine(void) { 64 return this_processor->current_coroutine; 65 } 66 67 thread_desc * this_thread(void) { 68 return this_processor->current_thread; 69 } 57 volatile thread_local coroutine_desc * this_coroutine; 58 volatile thread_local thread_desc * this_thread; 59 volatile thread_local processor * this_processor; 60 61 volatile thread_local bool preemption_in_progress = 0; 62 volatile thread_local unsigned short disable_preempt_count = 1; 70 63 71 64 //----------------------------------------------------------------------------- 72 65 // Main thread construction 73 66 struct current_stack_info_t { 74 machine_context_t ctx; 67 machine_context_t ctx; 75 68 unsigned int size; // size of stack 76 69 void *base; // base of stack … … 82 75 83 76 void ?{}( current_stack_info_t * this ) { 84 CtxGet( &this->ctx );77 CtxGet( this->ctx ); 85 78 this->base = this->ctx.FP; 86 79 this->storage = this->ctx.SP; … … 91 84 92 85 this->limit = (void *)(((intptr_t)this->base) - this->size); 93 this->context = & mainThread_context_storage;86 this->context = &storage_mainThreadCtx; 94 87 this->top = this->base; 95 88 } … … 106 99 107 100 void ?{}( coroutine_desc * this, current_stack_info_t * info) { 108 (&this->stack){ info }; 101 (&this->stack){ info }; 109 102 this->name = "Main Thread"; 110 103 this->errno_ = 0; … … 131 124 132 125 void ?{}(processor * this) { 133 this{ systemCluster };126 this{ mainCluster }; 134 127 } 135 128 136 129 void ?{}(processor * this, cluster * cltr) { 137 130 this->cltr = cltr; 138 this->current_coroutine = NULL; 139 this->current_thread = NULL; 140 (&this->terminated){}; 141 this->is_terminated = false; 131 (&this->terminated){ 0 }; 132 this->do_terminate = false; 142 133 this->preemption_alarm = NULL; 143 this->preemption = default_preemption();144 this->disable_preempt_count = 1; //Start with interrupts disabled145 134 this->pending_preemption = false; 146 135 … … 150 139 void ?{}(processor * this, cluster * cltr, processorCtx_t * runner) { 151 140 this->cltr = cltr; 152 this->current_coroutine = NULL; 153 this->current_thread = NULL; 154 (&this->terminated){}; 155 this->is_terminated = false; 156 this->disable_preempt_count = 0; 141 (&this->terminated){ 0 }; 142 this->do_terminate = false; 143 this->preemption_alarm = NULL; 157 144 this->pending_preemption = false; 145 this->kernel_thread = pthread_self(); 158 146 159 147 this->runner = runner; 160 LIB_DEBUG_PRINT_SAFE("Kernel : constructing processor context %p\n", runner);148 LIB_DEBUG_PRINT_SAFE("Kernel : constructing main processor context %p\n", runner); 161 149 runner{ this }; 162 150 } 163 151 164 void ?{}(system_proc_t * this, cluster * cltr, processorCtx_t * runner) {165 (&this->alarms){};166 (&this->alarm_lock){};167 this->pending_alarm = false;168 169 (&this->proc){ cltr, runner };170 }171 172 152 void ^?{}(processor * this) { 173 if( ! this-> is_terminated) {153 if( ! this->do_terminate ) { 174 154 LIB_DEBUG_PRINT_SAFE("Kernel : core %p signaling termination\n", this); 175 this->is_terminated = true; 176 wait( &this->terminated ); 155 this->do_terminate = true; 156 P( &this->terminated ); 157 pthread_join( this->kernel_thread, NULL ); 177 158 } 178 159 } … … 180 161 void ?{}(cluster * this) { 181 162 ( &this->ready_queue ){}; 182 ( &this->lock ){}; 163 ( &this->ready_queue_lock ){}; 164 165 this->preemption = default_preemption(); 183 166 } 184 167 185 168 void ^?{}(cluster * this) { 186 169 187 170 } 188 171 … … 203 186 204 187 thread_desc * readyThread = NULL; 205 for( unsigned int spin_count = 0; ! this-> is_terminated; spin_count++ )188 for( unsigned int spin_count = 0; ! this->do_terminate; spin_count++ ) 206 189 { 207 190 readyThread = nextThread( this->cltr ); … … 209 192 if(readyThread) 210 193 { 194 verify( disable_preempt_count > 0 ); 195 211 196 runThread(this, readyThread); 197 198 verify( disable_preempt_count > 0 ); 212 199 213 200 //Some actions need to be taken from the kernel … … 225 212 } 226 213 227 signal( &this->terminated ); 214 V( &this->terminated ); 215 228 216 LIB_DEBUG_PRINT_SAFE("Kernel : core %p terminated\n", this); 229 217 } 230 218 231 // runThread runs a thread by context switching 232 // from the processor coroutine to the target thread 219 // runThread runs a thread by context switching 220 // from the processor coroutine to the target thread 233 221 void runThread(processor * this, thread_desc * dst) { 234 222 coroutine_desc * proc_cor = get_coroutine(this->runner); 235 223 coroutine_desc * thrd_cor = get_coroutine(dst); 236 224 237 225 //Reset the terminating actions here 238 226 this->finish.action_code = No_Action; 239 227 240 228 //Update global state 241 this ->current_thread = dst;229 this_thread = dst; 242 230 243 231 // Context Switch to the thread … … 246 234 } 247 235 248 // Once a thread has finished running, some of 236 // Once a thread has finished running, some of 249 237 // its final actions must be executed from the kernel 250 238 void finishRunning(processor * this) { … … 256 244 } 257 245 else if( this->finish.action_code == Release_Schedule ) { 258 unlock( this->finish.lock ); 246 unlock( this->finish.lock ); 259 247 ScheduleThread( this->finish.thrd ); 260 248 } … … 289 277 processor * proc = (processor *) arg; 290 278 this_processor = proc; 279 this_coroutine = NULL; 280 this_thread = NULL; 281 disable_preempt_count = 1; 291 282 // SKULLDUGGERY: We want to create a context for the processor coroutine 292 283 // which is needed for the 2-step context switch. However, there is no reason 293 // to waste the perfectly valid stack create by pthread. 284 // to waste the perfectly valid stack create by pthread. 294 285 current_stack_info_t info; 295 286 machine_context_t ctx; … … 300 291 301 292 //Set global state 302 proc->current_coroutine = &proc->runner->__cor;303 proc->current_thread = NULL;293 this_coroutine = &proc->runner->__cor; 294 this_thread = NULL; 304 295 305 296 //We now have a proper context from which to schedule threads 306 297 LIB_DEBUG_PRINT_SAFE("Kernel : core %p created (%p, %p)\n", proc, proc->runner, &ctx); 307 298 308 // SKULLDUGGERY: Since the coroutine doesn't have its own stack, we can't 309 // resume it to start it like it normally would, it will just context switch 310 // back to here. Instead directly call the main since we already are on the 299 // SKULLDUGGERY: Since the coroutine doesn't have its own stack, we can't 300 // resume it to start it like it normally would, it will just context switch 301 // back to here. Instead directly call the main since we already are on the 311 302 // appropriate stack. 312 303 proc_cor_storage.__cor.state = Active; … … 315 306 316 307 // Main routine of the core returned, the core is now fully terminated 317 LIB_DEBUG_PRINT_SAFE("Kernel : core %p main ended (%p)\n", proc, proc->runner); 308 LIB_DEBUG_PRINT_SAFE("Kernel : core %p main ended (%p)\n", proc, proc->runner); 318 309 319 310 return NULL; … … 322 313 void start(processor * this) { 323 314 LIB_DEBUG_PRINT_SAFE("Kernel : Starting core %p\n", this); 324 315 325 316 pthread_create( &this->kernel_thread, NULL, CtxInvokeProcessor, (void*)this ); 326 317 327 LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this); 318 LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this); 328 319 } 329 320 … … 331 322 // Scheduler routines 332 323 void ScheduleThread( thread_desc * thrd ) { 333 if( !thrd ) return; 324 // if( !thrd ) return; 325 assert( thrd ); 326 assert( thrd->cor.state != Halted ); 327 328 verify( disable_preempt_count > 0 ); 334 329 335 330 verifyf( thrd->next == NULL, "Expected null got %p", thrd->next ); 336 337 lock( &systemProcessor->proc.cltr->lock ); 338 append( &systemProcessor->proc.cltr->ready_queue, thrd ); 339 unlock( &systemProcessor->proc.cltr->lock ); 331 332 lock( &this_processor->cltr->ready_queue_lock DEBUG_CTX2 ); 333 append( &this_processor->cltr->ready_queue, thrd ); 334 unlock( &this_processor->cltr->ready_queue_lock ); 335 336 verify( disable_preempt_count > 0 ); 340 337 } 341 338 342 339 thread_desc * nextThread(cluster * this) { 343 lock( &this->lock ); 340 verify( disable_preempt_count > 0 ); 341 lock( &this->ready_queue_lock DEBUG_CTX2 ); 344 342 thread_desc * head = pop_head( &this->ready_queue ); 345 unlock( &this->lock ); 343 unlock( &this->ready_queue_lock ); 344 verify( disable_preempt_count > 0 ); 346 345 return head; 347 346 } 348 347 349 void ScheduleInternal() { 350 suspend(); 351 } 352 353 void ScheduleInternal( spinlock * lock ) { 348 void BlockInternal() { 349 disable_interrupts(); 350 verify( disable_preempt_count > 0 ); 351 suspend(); 352 verify( disable_preempt_count > 0 ); 353 enable_interrupts( DEBUG_CTX ); 354 } 355 356 void BlockInternal( spinlock * lock ) { 357 disable_interrupts(); 354 358 this_processor->finish.action_code = Release; 355 359 this_processor->finish.lock = lock; 356 suspend(); 357 } 358 359 void ScheduleInternal( thread_desc * thrd ) { 360 361 verify( disable_preempt_count > 0 ); 362 suspend(); 363 verify( disable_preempt_count > 0 ); 364 365 enable_interrupts( DEBUG_CTX ); 366 } 367 368 void BlockInternal( thread_desc * thrd ) { 369 disable_interrupts(); 370 assert( thrd->cor.state != Halted ); 360 371 this_processor->finish.action_code = Schedule; 361 372 this_processor->finish.thrd = thrd; 362 suspend(); 363 } 364 365 void ScheduleInternal( spinlock * lock, thread_desc * thrd ) { 373 374 verify( disable_preempt_count > 0 ); 375 suspend(); 376 verify( disable_preempt_count > 0 ); 377 378 enable_interrupts( DEBUG_CTX ); 379 } 380 381 void BlockInternal( spinlock * lock, thread_desc * thrd ) { 382 disable_interrupts(); 366 383 this_processor->finish.action_code = Release_Schedule; 367 384 this_processor->finish.lock = lock; 368 385 this_processor->finish.thrd = thrd; 369 suspend(); 370 } 371 372 void ScheduleInternal(spinlock ** locks, unsigned short count) { 386 387 verify( disable_preempt_count > 0 ); 388 suspend(); 389 verify( disable_preempt_count > 0 ); 390 391 enable_interrupts( DEBUG_CTX ); 392 } 393 394 void BlockInternal(spinlock ** locks, unsigned short count) { 395 disable_interrupts(); 373 396 this_processor->finish.action_code = Release_Multi; 374 397 this_processor->finish.locks = locks; 375 398 this_processor->finish.lock_count = count; 376 suspend(); 377 } 378 379 void ScheduleInternal(spinlock ** locks, unsigned short lock_count, thread_desc ** thrds, unsigned short thrd_count) { 399 400 verify( disable_preempt_count > 0 ); 401 suspend(); 402 verify( disable_preempt_count > 0 ); 403 404 enable_interrupts( DEBUG_CTX ); 405 } 406 407 void BlockInternal(spinlock ** locks, unsigned short lock_count, thread_desc ** thrds, unsigned short thrd_count) { 408 disable_interrupts(); 380 409 this_processor->finish.action_code = Release_Multi_Schedule; 381 410 this_processor->finish.locks = locks; … … 383 412 this_processor->finish.thrds = thrds; 384 413 this_processor->finish.thrd_count = thrd_count; 414 415 verify( disable_preempt_count > 0 ); 416 suspend(); 417 verify( disable_preempt_count > 0 ); 418 419 enable_interrupts( DEBUG_CTX ); 420 } 421 422 void LeaveThread(spinlock * lock, thread_desc * thrd) { 423 verify( disable_preempt_count > 0 ); 424 this_processor->finish.action_code = thrd ? Release_Schedule : Release; 425 this_processor->finish.lock = lock; 426 this_processor->finish.thrd = thrd; 427 385 428 suspend(); 386 429 } … … 392 435 // Kernel boot procedures 393 436 void kernel_startup(void) { 394 LIB_DEBUG_PRINT_SAFE("Kernel : Starting\n"); 437 LIB_DEBUG_PRINT_SAFE("Kernel : Starting\n"); 395 438 396 439 // Start by initializing the main thread 397 // SKULLDUGGERY: the mainThread steals the process main thread 398 // which will then be scheduled by the systemProcessor normally399 mainThread = (thread_desc *)& mainThread_storage;440 // SKULLDUGGERY: the mainThread steals the process main thread 441 // which will then be scheduled by the mainProcessor normally 442 mainThread = (thread_desc *)&storage_mainThread; 400 443 current_stack_info_t info; 401 444 mainThread{ &info }; … … 403 446 LIB_DEBUG_PRINT_SAFE("Kernel : Main thread ready\n"); 404 447 448 // Initialize the main cluster 449 mainCluster = (cluster *)&storage_mainCluster; 450 mainCluster{}; 451 452 LIB_DEBUG_PRINT_SAFE("Kernel : main cluster ready\n"); 453 454 // Initialize the main processor and the main processor ctx 455 // (the coroutine that contains the processing control flow) 456 mainProcessor = (processor *)&storage_mainProcessor; 457 mainProcessor{ mainCluster, (processorCtx_t *)&storage_mainProcessorCtx }; 458 459 //initialize the global state variables 460 this_processor = mainProcessor; 461 this_thread = mainThread; 462 this_coroutine = &mainThread->cor; 463 405 464 // Enable preemption 406 465 kernel_start_preemption(); 407 466 408 // Initialize the system cluster 409 systemCluster = (cluster *)&systemCluster_storage; 410 systemCluster{}; 411 412 LIB_DEBUG_PRINT_SAFE("Kernel : System cluster ready\n"); 413 414 // Initialize the system processor and the system processor ctx 415 // (the coroutine that contains the processing control flow) 416 systemProcessor = (system_proc_t *)&systemProcessor_storage; 417 systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtx_storage }; 418 419 // Add the main thread to the ready queue 420 // once resume is called on systemProcessor->runner the mainThread needs to be scheduled like any normal thread 467 // Add the main thread to the ready queue 468 // once resume is called on mainProcessor->runner the mainThread needs to be scheduled like any normal thread 421 469 ScheduleThread(mainThread); 422 470 423 //initialize the global state variables 424 this_processor = &systemProcessor->proc; 425 this_processor->current_thread = mainThread; 426 this_processor->current_coroutine = &mainThread->cor; 427 428 // SKULLDUGGERY: Force a context switch to the system processor to set the main thread's context to the current UNIX 471 // SKULLDUGGERY: Force a context switch to the main processor to set the main thread's context to the current UNIX 429 472 // context. Hence, the main thread does not begin through CtxInvokeThread, like all other threads. The trick here is that 430 // mainThread is on the ready queue when this call is made. 431 resume( systemProcessor->proc.runner );473 // mainThread is on the ready queue when this call is made. 474 resume( mainProcessor->runner ); 432 475 433 476 … … 435 478 // THE SYSTEM IS NOW COMPLETELY RUNNING 436 479 LIB_DEBUG_PRINT_SAFE("Kernel : Started\n--------------------------------------------------\n\n"); 480 481 enable_interrupts( DEBUG_CTX ); 437 482 } 438 483 … … 440 485 LIB_DEBUG_PRINT_SAFE("\n--------------------------------------------------\nKernel : Shutting down\n"); 441 486 442 // SKULLDUGGERY: Notify the systemProcessor it needs to terminates. 487 disable_interrupts(); 488 489 // SKULLDUGGERY: Notify the mainProcessor it needs to terminates. 443 490 // When its coroutine terminates, it return control to the mainThread 444 491 // which is currently here 445 systemProcessor->proc.is_terminated= true;492 mainProcessor->do_terminate = true; 446 493 suspend(); 447 494 448 495 // THE SYSTEM IS NOW COMPLETELY STOPPED 449 496 450 // Destroy the system processor and its context in reverse order of construction 497 // Disable preemption 498 kernel_stop_preemption(); 499 500 // Destroy the main processor and its context in reverse order of construction 451 501 // These were manually constructed so we need manually destroy them 452 ^( systemProcessor->proc.runner){};453 ^( systemProcessor){};502 ^(mainProcessor->runner){}; 503 ^(mainProcessor){}; 454 504 455 505 // Final step, destroy the main thread since it is no longer needed … … 457 507 ^(mainThread){}; 458 508 459 LIB_DEBUG_PRINT_SAFE("Kernel : Shutdown complete\n"); 509 LIB_DEBUG_PRINT_SAFE("Kernel : Shutdown complete\n"); 460 510 } 461 511 … … 467 517 // abort cannot be recursively entered by the same or different processors because all signal handlers return when 468 518 // the globalAbort flag is true. 469 lock( &kernel_abort_lock );519 lock( &kernel_abort_lock DEBUG_CTX2 ); 470 520 471 521 // first task to abort ? … … 473 523 kernel_abort_called = true; 474 524 unlock( &kernel_abort_lock ); 475 } 525 } 476 526 else { 477 527 unlock( &kernel_abort_lock ); 478 528 479 529 sigset_t mask; 480 530 sigemptyset( &mask ); … … 482 532 sigaddset( &mask, SIGUSR1 ); // block SIGUSR1 signals 483 533 sigsuspend( &mask ); // block the processor to prevent further damage during abort 484 _exit( EXIT_FAILURE ); // if processor unblocks before it is killed, terminate it 485 } 486 487 return this_thread ();534 _exit( EXIT_FAILURE ); // if processor unblocks before it is killed, terminate it 535 } 536 537 return this_thread; 488 538 } 489 539 … … 494 544 __lib_debug_write( STDERR_FILENO, abort_text, len ); 495 545 496 if ( thrd != this_coroutine ()) {497 len = snprintf( abort_text, abort_text_size, " in coroutine %.256s (%p).\n", this_coroutine ()->name, this_coroutine());546 if ( thrd != this_coroutine ) { 547 len = snprintf( abort_text, abort_text_size, " in coroutine %.256s (%p).\n", this_coroutine->name, this_coroutine ); 498 548 __lib_debug_write( STDERR_FILENO, abort_text, len ); 499 } 549 } 500 550 else { 501 551 __lib_debug_write( STDERR_FILENO, ".\n", 2 ); … … 505 555 extern "C" { 506 556 void __lib_debug_acquire() { 507 lock( &kernel_debug_lock);557 lock( &kernel_debug_lock DEBUG_CTX2 ); 508 558 } 509 559 510 560 void __lib_debug_release() { 511 unlock( &kernel_debug_lock);561 unlock( &kernel_debug_lock ); 512 562 } 513 563 } … … 525 575 } 526 576 527 bool try_lock( spinlock * this ) {577 bool try_lock( spinlock * this DEBUG_CTX_PARAM2 ) { 528 578 return this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0; 529 579 } 530 580 531 void lock( spinlock * this ) {581 void lock( spinlock * this DEBUG_CTX_PARAM2 ) { 532 582 for ( unsigned int i = 1;; i += 1 ) { 533 if ( this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0 ) break; 534 } 535 } 583 if ( this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0 ) { break; } 584 } 585 LIB_DEBUG_DO( 586 this->prev_name = caller; 587 this->prev_thrd = this_thread; 588 ) 589 } 590 591 void lock_yield( spinlock * this DEBUG_CTX_PARAM2 ) { 592 for ( unsigned int i = 1;; i += 1 ) { 593 if ( this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0 ) { break; } 594 yield(); 595 } 596 LIB_DEBUG_DO( 597 this->prev_name = caller; 598 this->prev_thrd = this_thread; 599 ) 600 } 601 536 602 537 603 void unlock( spinlock * this ) { … … 539 605 } 540 606 541 void ?{}( signal_once * this ) { 542 this->cond = false; 543 } 544 void ^?{}( signal_once * this ) { 545 546 } 547 548 void wait( signal_once * this ) { 549 lock( &this->lock ); 550 if( !this->cond ) { 551 append( &this->blocked, this_thread() ); 552 ScheduleInternal( &this->lock ); 553 lock( &this->lock ); 554 } 607 void ?{}( semaphore * this, int count = 1 ) { 608 (&this->lock){}; 609 this->count = count; 610 (&this->waiting){}; 611 } 612 void ^?{}(semaphore * this) {} 613 614 void P(semaphore * this) { 615 lock( &this->lock DEBUG_CTX2 ); 616 this->count -= 1; 617 if ( this->count < 0 ) { 618 // queue current task 619 append( &this->waiting, (thread_desc *)this_thread ); 620 621 // atomically release spin lock and block 622 BlockInternal( &this->lock ); 623 } 624 else { 625 unlock( &this->lock ); 626 } 627 } 628 629 void V(semaphore * this) { 630 thread_desc * thrd = NULL; 631 lock( &this->lock DEBUG_CTX2 ); 632 this->count += 1; 633 if ( this->count <= 0 ) { 634 // remove task at head of waiting list 635 thrd = pop_head( &this->waiting ); 636 } 637 555 638 unlock( &this->lock ); 556 } 557 558 void signal( signal_once * this ) { 559 lock( &this->lock ); 560 { 561 this->cond = true; 562 563 thread_desc * it; 564 while( it = pop_head( &this->blocked) ) { 565 ScheduleThread( it ); 566 } 567 } 568 unlock( &this->lock ); 639 640 // make new owner 641 WakeThread( thrd ); 569 642 } 570 643 … … 590 663 } 591 664 head->next = NULL; 592 } 665 } 593 666 return head; 594 667 } … … 609 682 this->top = top->next; 610 683 top->next = NULL; 611 } 684 } 612 685 return top; 613 686 } -
src/libcfa/concurrency/kernel_private.h
rfea3faa rb826e6b 18 18 #define KERNEL_PRIVATE_H 19 19 20 #include "libhdr.h" 21 20 22 #include "kernel" 21 23 #include "thread" … … 23 25 #include "alarm.h" 24 26 25 #include "libhdr.h"26 27 27 28 //----------------------------------------------------------------------------- 28 29 // Scheduler 30 31 extern "C" { 32 void disable_interrupts(); 33 void enable_interrupts_noPoll(); 34 void enable_interrupts( DEBUG_CTX_PARAM ); 35 } 36 29 37 void ScheduleThread( thread_desc * ); 38 static inline void WakeThread( thread_desc * thrd ) { 39 if( !thrd ) return; 40 41 disable_interrupts(); 42 ScheduleThread( thrd ); 43 enable_interrupts( DEBUG_CTX ); 44 } 30 45 thread_desc * nextThread(cluster * this); 31 46 32 void ScheduleInternal(void); 33 void ScheduleInternal(spinlock * lock); 34 void ScheduleInternal(thread_desc * thrd); 35 void ScheduleInternal(spinlock * lock, thread_desc * thrd); 36 void ScheduleInternal(spinlock ** locks, unsigned short count); 37 void ScheduleInternal(spinlock ** locks, unsigned short count, thread_desc ** thrds, unsigned short thrd_count); 47 //Block current thread and release/wake-up the following resources 48 void BlockInternal(void); 49 void BlockInternal(spinlock * lock); 50 void BlockInternal(thread_desc * thrd); 51 void BlockInternal(spinlock * lock, thread_desc * thrd); 52 void BlockInternal(spinlock ** locks, unsigned short count); 53 void BlockInternal(spinlock ** locks, unsigned short count, thread_desc ** thrds, unsigned short thrd_count); 54 void LeaveThread(spinlock * lock, thread_desc * thrd); 38 55 39 56 //----------------------------------------------------------------------------- … … 49 66 void spin(processor * this, unsigned int * spin_count); 50 67 51 struct system_proc_t { 52 processor proc; 53 68 struct event_kernel_t { 54 69 alarm_list_t alarms; 55 spinlock alarm_lock; 56 57 bool pending_alarm; 70 spinlock lock; 58 71 }; 59 72 60 extern cluster * systemCluster; 61 extern system_proc_t * systemProcessor; 62 extern thread_local processor * this_processor; 73 extern event_kernel_t * event_kernel; 63 74 64 static inline void disable_interrupts() { 65 __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, 1, __ATOMIC_SEQ_CST ); 66 assert( prev != (unsigned short) -1 ); 67 } 68 69 static inline void enable_interrupts_noRF() { 70 __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST ); 71 verify( prev != (unsigned short) 0 ); 72 } 73 74 static inline void enable_interrupts() { 75 __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST ); 76 verify( prev != (unsigned short) 0 ); 77 if( prev == 1 && this_processor->pending_preemption ) { 78 ScheduleInternal( this_processor->current_thread ); 79 this_processor->pending_preemption = false; 80 } 81 } 75 extern volatile thread_local processor * this_processor; 76 extern volatile thread_local coroutine_desc * this_coroutine; 77 extern volatile thread_local thread_desc * this_thread; 78 extern volatile thread_local bool preemption_in_progress; 79 extern volatile thread_local unsigned short disable_preempt_count; 82 80 83 81 //----------------------------------------------------------------------------- … … 90 88 extern void ThreadCtxSwitch(coroutine_desc * src, coroutine_desc * dst); 91 89 90 //----------------------------------------------------------------------------- 91 // Utils 92 #define KERNEL_STORAGE(T,X) static char storage_##X[sizeof(T)] 93 92 94 #endif //KERNEL_PRIVATE_H 93 95 -
src/libcfa/concurrency/monitor
rfea3faa rb826e6b 26 26 static inline void ?{}(monitor_desc * this) { 27 27 this->owner = NULL; 28 this->stack_owner = NULL;29 28 this->recursion = 0; 30 29 } -
src/libcfa/concurrency/monitor.c
rfea3faa rb826e6b 19 19 #include <stdlib> 20 20 21 #include "libhdr.h" 21 22 #include "kernel_private.h" 22 #include "libhdr.h"23 23 24 24 //----------------------------------------------------------------------------- … … 44 44 45 45 extern "C" { 46 void __enter_monitor_desc( monitor_desc * this) {47 lock ( &this->lock);48 thread_desc * thrd = this_thread ();49 50 LIB_DEBUG_PRINT_SAFE("%p Entering %p (o: %p, r: %i)\n", thrd, this, this->owner, this->recursion);46 void __enter_monitor_desc( monitor_desc * this ) { 47 lock_yield( &this->lock DEBUG_CTX2 ); 48 thread_desc * thrd = this_thread; 49 50 // LIB_DEBUG_PRINT_SAFE("%p Entering %p (o: %p, r: %i)\n", thrd, this, this->owner, this->recursion); 51 51 52 52 if( !this->owner ) { … … 62 62 //Some one else has the monitor, wait in line for it 63 63 append( &this->entry_queue, thrd ); 64 LIB_DEBUG_PRINT_SAFE("%p Blocking on entry\n", thrd);65 ScheduleInternal( &this->lock );66 67 // ScheduleInternal will unlock spinlock, no need to unlock ourselves68 return; 64 // LIB_DEBUG_PRINT_SAFE("%p Blocking on entry\n", thrd); 65 BlockInternal( &this->lock ); 66 67 //BlockInternal will unlock spinlock, no need to unlock ourselves 68 return; 69 69 } 70 70 … … 75 75 // leave pseudo code : 76 76 // TODO 77 void __leave_monitor_desc( monitor_desc * this) {78 lock ( &this->lock);79 80 LIB_DEBUG_PRINT_SAFE("%p Leaving %p (o: %p, r: %i)\n", thrd, this, this->owner, this->recursion);81 verifyf( this_thread () == this->owner, "Expected owner to be %p, got %p (r: %i)", this_thread(), this->owner, this->recursion );77 void __leave_monitor_desc( monitor_desc * this ) { 78 lock_yield( &this->lock DEBUG_CTX2 ); 79 80 // LIB_DEBUG_PRINT_SAFE("%p Leaving %p (o: %p, r: %i). ", this_thread, this, this->owner, this->recursion); 81 verifyf( this_thread == this->owner, "Expected owner to be %p, got %p (r: %i)", this_thread, this->owner, this->recursion ); 82 82 83 83 //Leaving a recursion level, decrement the counter … … 96 96 unlock( &this->lock ); 97 97 98 LIB_DEBUG_PRINT_SAFE("Next owner is %p\n", new_owner);98 // LIB_DEBUG_PRINT_SAFE("Next owner is %p\n", new_owner); 99 99 100 100 //We need to wake-up the thread 101 ScheduleThread( new_owner ); 101 WakeThread( new_owner ); 102 } 103 104 void __leave_thread_monitor( thread_desc * thrd ) { 105 monitor_desc * this = &thrd->mon; 106 lock_yield( &this->lock DEBUG_CTX2 ); 107 108 disable_interrupts(); 109 110 thrd->cor.state = Halted; 111 112 verifyf( thrd == this->owner, "Expected owner to be %p, got %p (r: %i)", thrd, this->owner, this->recursion ); 113 114 //Leaving a recursion level, decrement the counter 115 this->recursion -= 1; 116 117 //If we haven't left the last level of recursion 118 //it means we don't need to do anything 119 if( this->recursion != 0) { 120 unlock( &this->lock ); 121 return; 122 } 123 124 thread_desc * new_owner = next_thread( this ); 125 126 LeaveThread( &this->lock, new_owner ); 102 127 } 103 128 } … … 121 146 enter( this->m, this->count ); 122 147 123 this->prev_mntrs = this_thread ()->current_monitors;124 this->prev_count = this_thread ()->current_monitor_count;125 126 this_thread ()->current_monitors = m;127 this_thread ()->current_monitor_count = count;148 this->prev_mntrs = this_thread->current_monitors; 149 this->prev_count = this_thread->current_monitor_count; 150 151 this_thread->current_monitors = m; 152 this_thread->current_monitor_count = count; 128 153 } 129 154 … … 131 156 leave( this->m, this->count ); 132 157 133 this_thread ()->current_monitors = this->prev_mntrs;134 this_thread ()->current_monitor_count = this->prev_count;158 this_thread->current_monitors = this->prev_mntrs; 159 this_thread->current_monitor_count = this->prev_count; 135 160 } 136 161 … … 159 184 // Internal scheduling 160 185 void wait( condition * this, uintptr_t user_info = 0 ) { 161 LIB_DEBUG_PRINT_SAFE("Waiting\n");186 // LIB_DEBUG_PRINT_SAFE("Waiting\n"); 162 187 163 188 brand_condition( this ); … … 170 195 unsigned short count = this->monitor_count; 171 196 unsigned int recursions[ count ]; //Save the current recursion levels to restore them later 172 spinlock * locks [ count ]; //We need to pass-in an array of locks to ScheduleInternal173 174 LIB_DEBUG_PRINT_SAFE("count %i\n", count);175 176 __condition_node_t waiter = { this_thread(), count, user_info };197 spinlock * locks [ count ]; //We need to pass-in an array of locks to BlockInternal 198 199 // LIB_DEBUG_PRINT_SAFE("count %i\n", count); 200 201 __condition_node_t waiter = { (thread_desc*)this_thread, count, user_info }; 177 202 178 203 __condition_criterion_t criteria[count]; 179 204 for(int i = 0; i < count; i++) { 180 205 (&criteria[i]){ this->monitors[i], &waiter }; 181 LIB_DEBUG_PRINT_SAFE( "Criterion %p\n", &criteria[i] );206 // LIB_DEBUG_PRINT_SAFE( "Criterion %p\n", &criteria[i] ); 182 207 } 183 208 … … 201 226 } 202 227 203 LIB_DEBUG_PRINT_SAFE("Will unblock: ");228 // LIB_DEBUG_PRINT_SAFE("Will unblock: "); 204 229 for(int i = 0; i < thread_count; i++) { 205 LIB_DEBUG_PRINT_SAFE("%p ", threads[i]);206 } 207 LIB_DEBUG_PRINT_SAFE("\n");230 // LIB_DEBUG_PRINT_SAFE("%p ", threads[i]); 231 } 232 // LIB_DEBUG_PRINT_SAFE("\n"); 208 233 209 234 // Everything is ready to go to sleep 210 ScheduleInternal( locks, count, threads, thread_count );235 BlockInternal( locks, count, threads, thread_count ); 211 236 212 237 … … 222 247 bool signal( condition * this ) { 223 248 if( is_empty( this ) ) { 224 LIB_DEBUG_PRINT_SAFE("Nothing to signal\n");249 // LIB_DEBUG_PRINT_SAFE("Nothing to signal\n"); 225 250 return false; 226 251 } … … 231 256 232 257 unsigned short count = this->monitor_count; 233 258 234 259 //Some more checking in debug 235 260 LIB_DEBUG_DO( 236 thread_desc * this_thrd = this_thread ();261 thread_desc * this_thrd = this_thread; 237 262 if ( this->monitor_count != this_thrd->current_monitor_count ) { 238 263 abortf( "Signal on condition %p made with different number of monitor(s), expected %i got %i", this, this->monitor_count, this_thrd->current_monitor_count ); … … 248 273 //Lock all the monitors 249 274 lock_all( this->monitors, NULL, count ); 250 LIB_DEBUG_PRINT_SAFE("Signalling");275 // LIB_DEBUG_PRINT_SAFE("Signalling"); 251 276 252 277 //Pop the head of the waiting queue … … 256 281 for(int i = 0; i < count; i++) { 257 282 __condition_criterion_t * crit = &node->criteria[i]; 258 LIB_DEBUG_PRINT_SAFE(" %p", crit->target);283 // LIB_DEBUG_PRINT_SAFE(" %p", crit->target); 259 284 assert( !crit->ready ); 260 285 push( &crit->target->signal_stack, crit ); 261 286 } 262 287 263 LIB_DEBUG_PRINT_SAFE("\n");288 // LIB_DEBUG_PRINT_SAFE("\n"); 264 289 265 290 //Release … … 281 306 unsigned short count = this->monitor_count; 282 307 unsigned int recursions[ count ]; //Save the current recursion levels to restore them later 283 spinlock * locks [ count ]; //We need to pass-in an array of locks to ScheduleInternal308 spinlock * locks [ count ]; //We need to pass-in an array of locks to BlockInternal 284 309 285 310 lock_all( this->monitors, locks, count ); 286 311 287 312 //create creteria 288 __condition_node_t waiter = { this_thread(), count, 0 };313 __condition_node_t waiter = { (thread_desc*)this_thread, count, 0 }; 289 314 290 315 __condition_criterion_t criteria[count]; 291 316 for(int i = 0; i < count; i++) { 292 317 (&criteria[i]){ this->monitors[i], &waiter }; 293 LIB_DEBUG_PRINT_SAFE( "Criterion %p\n", &criteria[i] );318 // LIB_DEBUG_PRINT_SAFE( "Criterion %p\n", &criteria[i] ); 294 319 push( &criteria[i].target->signal_stack, &criteria[i] ); 295 320 } … … 309 334 310 335 //Everything is ready to go to sleep 311 ScheduleInternal( locks, count, &signallee, 1 );336 BlockInternal( locks, count, &signallee, 1 ); 312 337 313 338 … … 325 350 326 351 uintptr_t front( condition * this ) { 327 verifyf( !is_empty(this), 352 verifyf( !is_empty(this), 328 353 "Attempt to access user data on an empty condition.\n" 329 354 "Possible cause is not checking if the condition is empty before reading stored data." … … 335 360 // Internal scheduling 336 361 void __accept_internal( unsigned short count, __acceptable_t * acceptables, void (*func)(void) ) { 337 // thread_desc * this = this_thread ();362 // thread_desc * this = this_thread; 338 363 339 364 // unsigned short count = this->current_monitor_count; 340 365 // unsigned int recursions[ count ]; //Save the current recursion levels to restore them later 341 // spinlock * locks [ count ]; //We need to pass-in an array of locks to ScheduleInternal366 // spinlock * locks [ count ]; //We need to pass-in an array of locks to BlockInternal 342 367 343 368 // lock_all( this->current_monitors, locks, count ); … … 348 373 349 374 // // // Everything is ready to go to sleep 350 // // ScheduleInternal( locks, count, threads, thread_count );375 // // BlockInternal( locks, count, threads, thread_count ); 351 376 352 377 … … 393 418 static inline void lock_all( spinlock ** locks, unsigned short count ) { 394 419 for( int i = 0; i < count; i++ ) { 395 lock ( locks[i]);420 lock_yield( locks[i] DEBUG_CTX2 ); 396 421 } 397 422 } … … 400 425 for( int i = 0; i < count; i++ ) { 401 426 spinlock * l = &source[i]->lock; 402 lock ( l);427 lock_yield( l DEBUG_CTX2 ); 403 428 if(locks) locks[i] = l; 404 429 } … … 443 468 for( int i = 0; i < count; i++ ) { 444 469 445 LIB_DEBUG_PRINT_SAFE( "Checking %p for %p\n", &criteria[i], target );470 // LIB_DEBUG_PRINT_SAFE( "Checking %p for %p\n", &criteria[i], target ); 446 471 if( &criteria[i] == target ) { 447 472 criteria[i].ready = true; 448 LIB_DEBUG_PRINT_SAFE( "True\n" );473 // LIB_DEBUG_PRINT_SAFE( "True\n" ); 449 474 } 450 475 … … 452 477 } 453 478 454 LIB_DEBUG_PRINT_SAFE( "Runing %i\n", ready2run );479 // LIB_DEBUG_PRINT_SAFE( "Runing %i\n", ready2run ); 455 480 return ready2run ? node->waiting_thread : NULL; 456 481 } 457 482 458 483 static inline void brand_condition( condition * this ) { 459 thread_desc * thrd = this_thread ();484 thread_desc * thrd = this_thread; 460 485 if( !this->monitors ) { 461 LIB_DEBUG_PRINT_SAFE("Branding\n");486 // LIB_DEBUG_PRINT_SAFE("Branding\n"); 462 487 assertf( thrd->current_monitors != NULL, "No current monitor to brand condition", thrd->current_monitors ); 463 488 this->monitor_count = thrd->current_monitor_count; -
src/libcfa/concurrency/preemption.c
rfea3faa rb826e6b 15 15 // 16 16 17 #include "libhdr.h" 17 18 #include "preemption.h" 18 19 19 20 extern "C" { 21 #include <errno.h> 22 #include <execinfo.h> 23 #define __USE_GNU 20 24 #include <signal.h> 21 } 22 23 #define __CFA_DEFAULT_PREEMPTION__ 10 24 25 #undef __USE_GNU 26 #include <stdio.h> 27 #include <string.h> 28 #include <unistd.h> 29 } 30 31 32 #ifdef __USE_STREAM__ 33 #include "fstream" 34 #endif 35 36 //TODO move to defaults 37 #define __CFA_DEFAULT_PREEMPTION__ 10000 38 39 //TODO move to defaults 25 40 __attribute__((weak)) unsigned int default_preemption() { 26 41 return __CFA_DEFAULT_PREEMPTION__; 27 42 } 28 43 44 // Short hands for signal context information 45 #define __CFA_SIGCXT__ ucontext_t * 46 #define __CFA_SIGPARMS__ __attribute__((unused)) int sig, __attribute__((unused)) siginfo_t *sfp, __attribute__((unused)) __CFA_SIGCXT__ cxt 47 48 // FwdDeclarations : timeout handlers 29 49 static void preempt( processor * this ); 30 50 static void timeout( thread_desc * this ); 31 51 52 // FwdDeclarations : Signal handlers 53 void sigHandler_ctxSwitch( __CFA_SIGPARMS__ ); 54 void sigHandler_segv ( __CFA_SIGPARMS__ ); 55 void sigHandler_abort ( __CFA_SIGPARMS__ ); 56 57 // FwdDeclarations : sigaction wrapper 58 static void __kernel_sigaction( int sig, void (*handler)(__CFA_SIGPARMS__), int flags ); 59 60 // FwdDeclarations : alarm thread main 61 void * alarm_loop( __attribute__((unused)) void * args ); 62 63 // Machine specific register name 64 #ifdef __x86_64__ 65 #define CFA_REG_IP REG_RIP 66 #else 67 #define CFA_REG_IP REG_EIP 68 #endif 69 70 KERNEL_STORAGE(event_kernel_t, event_kernel); // private storage for event kernel 71 event_kernel_t * event_kernel; // kernel public handle to even kernel 72 static pthread_t alarm_thread; // pthread handle to alarm thread 73 74 void ?{}(event_kernel_t * this) { 75 (&this->alarms){}; 76 (&this->lock){}; 77 } 78 32 79 //============================================================================================= 33 80 // Kernel Preemption logic 34 81 //============================================================================================= 35 82 36 void kernel_start_preemption() { 37 38 } 39 83 // Get next expired node 84 static inline alarm_node_t * get_expired( alarm_list_t * alarms, __cfa_time_t currtime ) { 85 if( !alarms->head ) return NULL; // If no alarms return null 86 if( alarms->head->alarm >= currtime ) return NULL; // If alarms head not expired return null 87 return pop(alarms); // Otherwise just pop head 88 } 89 90 // Tick one frame of the Discrete Event Simulation for alarms 40 91 void tick_preemption() { 41 alarm_list_t * alarms = &systemProcessor->alarms; 42 __cfa_time_t currtime = __kernel_get_time(); 43 while( alarms->head && alarms->head->alarm < currtime ) { 44 alarm_node_t * node = pop(alarms); 92 alarm_node_t * node = NULL; // Used in the while loop but cannot be declared in the while condition 93 alarm_list_t * alarms = &event_kernel->alarms; // Local copy for ease of reading 94 __cfa_time_t currtime = __kernel_get_time(); // Check current time once so we everything "happens at once" 95 96 //Loop throught every thing expired 97 while( node = get_expired( alarms, currtime ) ) { 98 99 // Check if this is a kernel 45 100 if( node->kernel_alarm ) { 46 101 preempt( node->proc ); … … 50 105 } 51 106 52 if( node->period > 0 ) { 53 node->alarm += node->period; 54 insert( alarms, node ); 107 // Check if this is a periodic alarm 108 __cfa_time_t period = node->period; 109 if( period > 0 ) { 110 node->alarm = currtime + period; // Alarm is periodic, add currtime to it (used cached current time) 111 insert( alarms, node ); // Reinsert the node for the next time it triggers 55 112 } 56 113 else { 57 node->set = false; 58 } 59 } 60 61 if( alarms->head ) {62 __kernel_set_timer( alarms->head->alarm - currtime );63 }64 } 65 114 node->set = false; // Node is one-shot, just mark it as not pending 115 } 116 } 117 118 // If there are still alarms pending, reset the timer 119 if( alarms->head ) { __kernel_set_timer( alarms->head->alarm - currtime ); } 120 } 121 122 // Update the preemption of a processor and notify interested parties 66 123 void update_preemption( processor * this, __cfa_time_t duration ) { 67 // assert( THREAD_GETMEM( disableInt ) && THREAD_GETMEM( disableIntCnt ) == 1 );68 124 alarm_node_t * alarm = this->preemption_alarm; 69 125 … … 89 145 } 90 146 147 //============================================================================================= 148 // Kernel Signal Tools 149 //============================================================================================= 150 151 LIB_DEBUG_DO( static thread_local void * last_interrupt = 0; ) 152 153 extern "C" { 154 // Disable interrupts by incrementing the counter 155 void disable_interrupts() { 156 __attribute__((unused)) unsigned short new_val = __atomic_add_fetch_2( &disable_preempt_count, 1, __ATOMIC_SEQ_CST ); 157 verify( new_val < 65_000u ); // If this triggers someone is disabling interrupts without enabling them 158 } 159 160 // Enable interrupts by decrementing the counter 161 // If counter reaches 0, execute any pending CtxSwitch 162 void enable_interrupts( DEBUG_CTX_PARAM ) { 163 processor * proc = this_processor; // Cache the processor now since interrupts can start happening after the atomic add 164 thread_desc * thrd = this_thread; // Cache the thread now since interrupts can start happening after the atomic add 165 166 unsigned short prev = __atomic_fetch_add_2( &disable_preempt_count, -1, __ATOMIC_SEQ_CST ); 167 verify( prev != 0u ); // If this triggers someone is enabled already enabled interruptsverify( prev != 0u ); 168 169 // Check if we need to prempt the thread because an interrupt was missed 170 if( prev == 1 && proc->pending_preemption ) { 171 proc->pending_preemption = false; 172 BlockInternal( thrd ); 173 } 174 175 // For debugging purposes : keep track of the last person to enable the interrupts 176 LIB_DEBUG_DO( proc->last_enable = caller; ) 177 } 178 179 // Disable interrupts by incrementint the counter 180 // Don't execute any pending CtxSwitch even if counter reaches 0 181 void enable_interrupts_noPoll() { 182 __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &disable_preempt_count, -1, __ATOMIC_SEQ_CST ); 183 verify( prev != 0u ); // If this triggers someone is enabled already enabled interrupts 184 } 185 } 186 187 // sigprocmask wrapper : unblock a single signal 188 static inline void signal_unblock( int sig ) { 189 sigset_t mask; 190 sigemptyset( &mask ); 191 sigaddset( &mask, sig ); 192 193 if ( pthread_sigmask( SIG_UNBLOCK, &mask, NULL ) == -1 ) { 194 abortf( "internal error, pthread_sigmask" ); 195 } 196 } 197 198 // sigprocmask wrapper : block a single signal 199 static inline void signal_block( int sig ) { 200 sigset_t mask; 201 sigemptyset( &mask ); 202 sigaddset( &mask, sig ); 203 204 if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) { 205 abortf( "internal error, pthread_sigmask" ); 206 } 207 } 208 209 // kill wrapper : signal a processor 210 static void preempt( processor * this ) { 211 pthread_kill( this->kernel_thread, SIGUSR1 ); 212 } 213 214 // reserved for future use 215 static void timeout( thread_desc * this ) { 216 //TODO : implement waking threads 217 } 218 219 220 // Check if a CtxSwitch signal handler shoud defer 221 // If true : preemption is safe 222 // If false : preemption is unsafe and marked as pending 223 static inline bool preemption_ready() { 224 bool ready = disable_preempt_count == 0 && !preemption_in_progress; // Check if preemption is safe 225 this_processor->pending_preemption = !ready; // Adjust the pending flag accordingly 226 return ready; 227 } 228 229 //============================================================================================= 230 // Kernel Signal Startup/Shutdown logic 231 //============================================================================================= 232 233 // Startup routine to activate preemption 234 // Called from kernel_startup 235 void kernel_start_preemption() { 236 LIB_DEBUG_PRINT_SAFE("Kernel : Starting preemption\n"); 237 238 // Start with preemption disabled until ready 239 disable_preempt_count = 1; 240 241 // Initialize the event kernel 242 event_kernel = (event_kernel_t *)&storage_event_kernel; 243 event_kernel{}; 244 245 // Setup proper signal handlers 246 __kernel_sigaction( SIGUSR1, sigHandler_ctxSwitch, SA_SIGINFO ); // CtxSwitch handler 247 // __kernel_sigaction( SIGSEGV, sigHandler_segv , SA_SIGINFO ); // Failure handler 248 // __kernel_sigaction( SIGBUS , sigHandler_segv , SA_SIGINFO ); // Failure handler 249 250 signal_block( SIGALRM ); 251 252 pthread_create( &alarm_thread, NULL, alarm_loop, NULL ); 253 } 254 255 // Shutdown routine to deactivate preemption 256 // Called from kernel_shutdown 257 void kernel_stop_preemption() { 258 LIB_DEBUG_PRINT_SAFE("Kernel : Preemption stopping\n"); 259 260 // Block all signals since we are already shutting down 261 sigset_t mask; 262 sigfillset( &mask ); 263 sigprocmask( SIG_BLOCK, &mask, NULL ); 264 265 // Notify the alarm thread of the shutdown 266 sigval val = { 1 }; 267 pthread_sigqueue( alarm_thread, SIGALRM, val ); 268 269 // Wait for the preemption thread to finish 270 pthread_join( alarm_thread, NULL ); 271 272 // Preemption is now fully stopped 273 274 LIB_DEBUG_PRINT_SAFE("Kernel : Preemption stopped\n"); 275 } 276 277 // Raii ctor/dtor for the preemption_scope 278 // Used by thread to control when they want to receive preemption signals 91 279 void ?{}( preemption_scope * this, processor * proc ) { 92 (&this->alarm){ proc };280 (&this->alarm){ proc, zero_time, zero_time }; 93 281 this->proc = proc; 94 282 this->proc->preemption_alarm = &this->alarm; 95 update_preemption( this->proc, this->proc->preemption ); 283 284 update_preemption( this->proc, from_us(this->proc->cltr->preemption) ); 96 285 } 97 286 98 287 void ^?{}( preemption_scope * this ) { 99 update_preemption( this->proc, 0 ); 100 } 101 102 //============================================================================================= 103 // Kernel Signal logic 104 //============================================================================================= 105 106 static inline bool preemption_ready() { 107 return this_processor->disable_preempt_count == 0; 108 } 109 110 static inline void defer_ctxSwitch() { 111 this_processor->pending_preemption = true; 112 } 113 114 static inline void defer_alarm() { 115 systemProcessor->pending_alarm = true; 116 } 117 118 void sigHandler_ctxSwitch( __attribute__((unused)) int sig ) { 119 if( preemption_ready() ) { 120 ScheduleInternal( this_processor->current_thread ); 121 } 122 else { 123 defer_ctxSwitch(); 124 } 125 } 126 127 void sigHandler_alarm( __attribute__((unused)) int sig ) { 128 if( try_lock( &systemProcessor->alarm_lock ) ) { 129 tick_preemption(); 130 unlock( &systemProcessor->alarm_lock ); 131 } 132 else { 133 defer_alarm(); 134 } 135 } 136 137 static void preempt( processor * this ) { 138 pthread_kill( this->kernel_thread, SIGUSR1 ); 139 } 140 141 static void timeout( thread_desc * this ) { 142 //TODO : implement waking threads 143 } 288 disable_interrupts(); 289 290 update_preemption( this->proc, zero_time ); 291 } 292 293 //============================================================================================= 294 // Kernel Signal Handlers 295 //============================================================================================= 296 297 // Context switch signal handler 298 // Receives SIGUSR1 signal and causes the current thread to yield 299 void sigHandler_ctxSwitch( __CFA_SIGPARMS__ ) { 300 LIB_DEBUG_DO( last_interrupt = (void *)(cxt->uc_mcontext.gregs[CFA_REG_IP]); ) 301 302 // Check if it is safe to preempt here 303 if( !preemption_ready() ) { return; } 304 305 preemption_in_progress = true; // Sync flag : prevent recursive calls to the signal handler 306 signal_unblock( SIGUSR1 ); // We are about to CtxSwitch out of the signal handler, let other handlers in 307 preemption_in_progress = false; // Clear the in progress flag 308 309 // Preemption can occur here 310 311 BlockInternal( (thread_desc*)this_thread ); // Do the actual CtxSwitch 312 } 313 314 // Main of the alarm thread 315 // Waits on SIGALRM and send SIGUSR1 to whom ever needs it 316 void * alarm_loop( __attribute__((unused)) void * args ) { 317 // Block sigalrms to control when they arrive 318 sigset_t mask; 319 sigemptyset( &mask ); 320 sigaddset( &mask, SIGALRM ); 321 322 if ( pthread_sigmask( SIG_BLOCK, &mask, NULL ) == -1 ) { 323 abortf( "internal error, pthread_sigmask" ); 324 } 325 326 // Main loop 327 while( true ) { 328 // Wait for a sigalrm 329 siginfo_t info; 330 int sig = sigwaitinfo( &mask, &info ); 331 332 // If another signal arrived something went wrong 333 assertf(sig == SIGALRM, "Kernel Internal Error, sigwait: Unexpected signal %d (%d : %d)\n", sig, info.si_code, info.si_value.sival_int); 334 335 LIB_DEBUG_PRINT_SAFE("Kernel : Caught alarm from %d with %d\n", info.si_code, info.si_value.sival_int ); 336 // Switch on the code (a.k.a. the sender) to 337 switch( info.si_code ) 338 { 339 // Timers can apparently be marked as sent for the kernel 340 // In either case, tick preemption 341 case SI_TIMER: 342 case SI_KERNEL: 343 LIB_DEBUG_PRINT_SAFE("Kernel : Preemption thread tick\n"); 344 lock( &event_kernel->lock DEBUG_CTX2 ); 345 tick_preemption(); 346 unlock( &event_kernel->lock ); 347 break; 348 // Signal was not sent by the kernel but by an other thread 349 case SI_QUEUE: 350 // For now, other thread only signal the alarm thread to shut it down 351 // If this needs to change use info.si_value and handle the case here 352 goto EXIT; 353 } 354 } 355 356 EXIT: 357 LIB_DEBUG_PRINT_SAFE("Kernel : Preemption thread stopping\n"); 358 return NULL; 359 } 360 361 // Sigaction wrapper : register an signal handler 362 static void __kernel_sigaction( int sig, void (*handler)(__CFA_SIGPARMS__), int flags ) { 363 struct sigaction act; 364 365 act.sa_sigaction = (void (*)(int, siginfo_t *, void *))handler; 366 act.sa_flags = flags; 367 368 if ( sigaction( sig, &act, NULL ) == -1 ) { 369 LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, 370 " __kernel_sigaction( sig:%d, handler:%p, flags:%d ), problem installing signal handler, error(%d) %s.\n", 371 sig, handler, flags, errno, strerror( errno ) 372 ); 373 _exit( EXIT_FAILURE ); 374 } 375 } 376 377 // Sigaction wrapper : restore default handler 378 static void __kernel_sigdefault( int sig ) { 379 struct sigaction act; 380 381 act.sa_handler = SIG_DFL; 382 act.sa_flags = 0; 383 sigemptyset( &act.sa_mask ); 384 385 if ( sigaction( sig, &act, NULL ) == -1 ) { 386 LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, 387 " __kernel_sigdefault( sig:%d ), problem reseting signal handler, error(%d) %s.\n", 388 sig, errno, strerror( errno ) 389 ); 390 _exit( EXIT_FAILURE ); 391 } 392 } 393 394 //============================================================================================= 395 // Terminating Signals logic 396 //============================================================================================= 397 398 LIB_DEBUG_DO( 399 static void __kernel_backtrace( int start ) { 400 // skip first N stack frames 401 402 enum { Frames = 50 }; 403 void * array[Frames]; 404 int size = backtrace( array, Frames ); 405 char ** messages = backtrace_symbols( array, size ); 406 407 // find executable name 408 *index( messages[0], '(' ) = '\0'; 409 #ifdef __USE_STREAM__ 410 serr | "Stack back trace for:" | messages[0] | endl; 411 #else 412 fprintf( stderr, "Stack back trace for: %s\n", messages[0]); 413 #endif 414 415 // skip last 2 stack frames after main 416 for ( int i = start; i < size && messages != NULL; i += 1 ) { 417 char * name = NULL; 418 char * offset_begin = NULL; 419 char * offset_end = NULL; 420 421 for ( char *p = messages[i]; *p; ++p ) { 422 // find parantheses and +offset 423 if ( *p == '(' ) { 424 name = p; 425 } 426 else if ( *p == '+' ) { 427 offset_begin = p; 428 } 429 else if ( *p == ')' ) { 430 offset_end = p; 431 break; 432 } 433 } 434 435 // if line contains symbol print it 436 int frameNo = i - start; 437 if ( name && offset_begin && offset_end && name < offset_begin ) { 438 // delimit strings 439 *name++ = '\0'; 440 *offset_begin++ = '\0'; 441 *offset_end++ = '\0'; 442 443 #ifdef __USE_STREAM__ 444 serr | "(" | frameNo | ")" | messages[i] | ":" 445 | name | "+" | offset_begin | offset_end | endl; 446 #else 447 fprintf( stderr, "(%i) %s : %s + %s %s\n", frameNo, messages[i], name, offset_begin, offset_end); 448 #endif 449 } 450 // otherwise, print the whole line 451 else { 452 #ifdef __USE_STREAM__ 453 serr | "(" | frameNo | ")" | messages[i] | endl; 454 #else 455 fprintf( stderr, "(%i) %s\n", frameNo, messages[i] ); 456 #endif 457 } 458 } 459 460 free( messages ); 461 } 462 ) 463 464 // void sigHandler_segv( __CFA_SIGPARMS__ ) { 465 // LIB_DEBUG_DO( 466 // #ifdef __USE_STREAM__ 467 // serr | "*CFA runtime error* program cfa-cpp terminated with" 468 // | (sig == SIGSEGV ? "segment fault." : "bus error.") 469 // | endl; 470 // #else 471 // fprintf( stderr, "*CFA runtime error* program cfa-cpp terminated with %s\n", sig == SIGSEGV ? "segment fault." : "bus error." ); 472 // #endif 473 474 // // skip first 2 stack frames 475 // __kernel_backtrace( 1 ); 476 // ) 477 // exit( EXIT_FAILURE ); 478 // } 479 480 // void sigHandler_abort( __CFA_SIGPARMS__ ) { 481 // // skip first 6 stack frames 482 // LIB_DEBUG_DO( __kernel_backtrace( 6 ); ) 483 484 // // reset default signal handler 485 // __kernel_sigdefault( SIGABRT ); 486 487 // raise( SIGABRT ); 488 // } -
src/libcfa/concurrency/thread
rfea3faa rb826e6b 54 54 } 55 55 56 thread_desc * this_thread(void);56 extern volatile thread_local thread_desc * this_thread; 57 57 58 58 forall( dtype T | is_thread(T) ) -
src/libcfa/concurrency/thread.c
rfea3faa rb826e6b 28 28 } 29 29 30 extern thread_local processor * this_processor;30 extern volatile thread_local processor * this_processor; 31 31 32 32 //----------------------------------------------------------------------------- … … 71 71 coroutine_desc* thrd_c = get_coroutine(this); 72 72 thread_desc* thrd_h = get_thread (this); 73 thrd_c->last = this_coroutine(); 74 this_processor->current_coroutine = thrd_c; 73 thrd_c->last = this_coroutine; 75 74 76 LIB_DEBUG_PRINT_SAFE("Thread start : %p (t %p, c %p)\n", this, thrd_c, thrd_h);75 // LIB_DEBUG_PRINT_SAFE("Thread start : %p (t %p, c %p)\n", this, thrd_c, thrd_h); 77 76 77 disable_interrupts(); 78 78 create_stack(&thrd_c->stack, thrd_c->stack.size); 79 this_coroutine = thrd_c; 79 80 CtxStart(this, CtxInvokeThread); 81 assert( thrd_c->last->stack.context ); 80 82 CtxSwitch( thrd_c->last->stack.context, thrd_c->stack.context ); 81 83 82 84 ScheduleThread(thrd_h); 85 enable_interrupts( DEBUG_CTX ); 83 86 } 84 87 85 88 void yield( void ) { 86 ScheduleInternal( this_processor->current_thread );89 BlockInternal( (thread_desc *)this_thread ); 87 90 } 88 91 … … 95 98 void ThreadCtxSwitch(coroutine_desc* src, coroutine_desc* dst) { 96 99 // set state of current coroutine to inactive 97 src->state = Inactive;100 src->state = src->state == Halted ? Halted : Inactive; 98 101 dst->state = Active; 99 102 … … 103 106 // set new coroutine that the processor is executing 104 107 // and context switch to it 105 this_processor->current_coroutine = dst; 108 this_coroutine = dst; 109 assert( src->stack.context ); 106 110 CtxSwitch( src->stack.context, dst->stack.context ); 107 this_ processor->current_coroutine = src;111 this_coroutine = src; 108 112 109 113 // set state of new coroutine to active 110 dst->state = Inactive;114 dst->state = dst->state == Halted ? Halted : Inactive; 111 115 src->state = Active; 112 116 } -
src/libcfa/fstream
rfea3faa rb826e6b 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon May 15 18:11:09201713 // Update Count : 1 0412 // Last Modified On : Fri Jul 7 08:32:38 2017 13 // Update Count : 117 14 14 // 15 15 16 #ifndef __FSTREAM_H__ 17 #define __FSTREAM_H__ 16 #pragma once 18 17 19 18 #include "iostream" 20 19 21 enum { sep arateSize = 16 };20 enum { sepSize = 16 }; 22 21 struct ofstream { 23 22 void * file; 24 23 _Bool sepDefault; 25 24 _Bool sepOnOff; 25 _Bool sawNL; 26 26 const char * sepCur; 27 char separator[sep arateSize];28 char tupleSeparator[sep arateSize];27 char separator[sepSize]; 28 char tupleSeparator[sepSize]; 29 29 }; // ofstream 30 30 … … 35 35 const char * sepGetCur( ofstream * ); 36 36 void sepSetCur( ofstream *, const char * ); 37 _Bool getNL( ofstream * ); 38 void setNL( ofstream *, _Bool ); 37 39 38 40 // public … … 73 75 extern ifstream * sin; 74 76 75 #endif // __FSTREAM_H__76 77 77 // Local Variables: // 78 78 // mode: c // -
src/libcfa/fstream.c
rfea3faa rb826e6b 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon May 15 18:11:11201713 // Update Count : 2 3412 // Last Modified On : Thu Jul 6 18:38:25 2017 13 // Update Count : 251 14 14 // 15 15 … … 39 39 40 40 // private 41 _Bool sepPrt( ofstream * os ) { return os->sepOnOff; }41 _Bool sepPrt( ofstream * os ) { setNL( os, false ); return os->sepOnOff; } 42 42 void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; } 43 43 void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; } 44 44 const char * sepGetCur( ofstream * os ) { return os->sepCur; } 45 45 void sepSetCur( ofstream * os, const char * sepCur ) { os->sepCur = sepCur; } 46 _Bool getNL( ofstream * os ) { return os->sawNL; } 47 void setNL( ofstream * os, _Bool state ) { os->sawNL = state; } 46 48 47 49 // public 48 void sepOn( ofstream * os ) { os->sepOnOff = 1; }49 void sepOff( ofstream * os ) { os->sepOnOff = 0; }50 void sepOn( ofstream * os ) { os->sepOnOff = ! getNL( os ); } 51 void sepOff( ofstream * os ) { os->sepOnOff = false; } 50 52 51 53 _Bool sepDisable( ofstream *os ) { … … 66 68 void sepSet( ofstream * os, const char * s ) { 67 69 assert( s ); 68 strncpy( os->separator, s, sep arateSize - 1 );69 os->separator[sep arateSize - 1] = '\0';70 strncpy( os->separator, s, sepSize - 1 ); 71 os->separator[sepSize - 1] = '\0'; 70 72 } // sepSet 71 73 … … 73 75 void sepSetTuple( ofstream * os, const char * s ) { 74 76 assert( s ); 75 strncpy( os->tupleSeparator, s, sep arateSize - 1 );76 os->tupleSeparator[sep arateSize - 1] = '\0';77 strncpy( os->tupleSeparator, s, sepSize - 1 ); 78 os->tupleSeparator[sepSize - 1] = '\0'; 77 79 } // sepSet 78 80 … … 92 94 exit( EXIT_FAILURE ); 93 95 } // if 94 ?{}( os, file, 1, 0, " ", ", " );96 ?{}( os, file, true, false, " ", ", " ); 95 97 } // open 96 98 … … 132 134 } // fmt 133 135 134 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 1, 0, " ", ", " };136 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), true, false, " ", ", " }; 135 137 ofstream *sout = &soutFile; 136 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 1, 0, " ", ", " };138 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), true, false, " ", ", " }; 137 139 ofstream *serr = &serrFile; 138 140 … … 150 152 151 153 void open( ifstream * is, const char * name, const char * mode ) { 152 FILE * t= fopen( name, mode );153 if ( t == 0 ) {// do not change unless successful154 FILE *file = fopen( name, mode ); 155 if ( file == 0 ) { // do not change unless successful 154 156 fprintf( stderr, IO_MSG "open input file \"%s\", ", name ); 155 157 perror( 0 ); 156 158 exit( EXIT_FAILURE ); 157 159 } // if 158 is->file = t;160 is->file = file; 159 161 } // open 160 162 -
src/libcfa/gmp
rfea3faa rb826e6b 10 10 // Created On : Tue Apr 19 08:43:43 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat May 27 09:55:51201713 // Update Count : 1 412 // Last Modified On : Fri Jul 7 09:33:20 2017 13 // Update Count : 15 14 14 // 15 15 16 16 // https://gmplib.org/gmp-man-6.1.1.pdf 17 18 #pragma once 17 19 18 20 #include <gmp.h> // GNU multi-precise integers -
src/libcfa/iostream
rfea3faa rb826e6b 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon May 15 18:08:44201713 // Update Count : 1 0512 // Last Modified On : Fri Jul 7 08:35:59 2017 13 // Update Count : 118 14 14 // 15 15 16 #ifndef __IOSTREAM_H__ 17 #define __IOSTREAM_H__ 16 #pragma once 18 17 19 18 #include "iterator" … … 26 25 const char * sepGetCur( ostype * ); // get current separator string 27 26 void sepSetCur( ostype *, const char * ); // set current separator string 27 _Bool getNL( ostype * ); // check newline 28 void setNL( ostype *, _Bool ); // saw newline 28 29 // public 29 30 void sepOn( ostype * ); // turn separator state on … … 43 44 ostype * write( ostype *, const char *, unsigned long int ); 44 45 int fmt( ostype *, const char fmt[], ... ); 45 }; 46 }; // ostream 46 47 47 48 trait writeable( otype T ) { 48 49 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T ); 49 }; 50 }; // writeable 50 51 51 52 // implement writable for intrinsic types … … 81 82 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) ); 82 83 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * ); 84 forall( dtype ostype | ostream( ostype ) ) ostype * sep( ostype * ); 85 forall( dtype ostype | ostream( ostype ) ) ostype * sepTuple( ostype * ); 83 86 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * ); 84 87 forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * ); … … 103 106 istype * ungetc( istype *, char ); 104 107 int fmt( istype *, const char fmt[], ... ); 105 }; 108 }; // istream 106 109 107 110 trait readable( otype T ) { 108 111 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T ); 109 }; 112 }; // readable 110 113 111 114 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * ); … … 136 139 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC ); 137 140 138 #endif // __IOSTREAM_H139 140 141 // Local Variables: // 141 142 // mode: c // -
src/libcfa/iostream.c
rfea3faa rb826e6b 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon May 8 18:24:23 201713 // Update Count : 3 6912 // Last Modified On : Sun Jul 16 21:12:03 2017 13 // Update Count : 398 14 14 // 15 15 … … 18 18 extern "C" { 19 19 #include <stdio.h> 20 #include <stdbool.h> // true/false 20 21 #include <string.h> // strlen 21 22 #include <float.h> // DBL_DIG, LDBL_DIG … … 24 25 25 26 forall( dtype ostype | ostream( ostype ) ) 26 ostype * ?|?( ostype * os, char c ) { 27 fmt( os, "%c", c ); 27 ostype * ?|?( ostype * os, char ch ) { 28 fmt( os, "%c", ch ); 29 if ( ch == '\n' ) setNL( os, true ); 28 30 sepOff( os ); 29 31 return os; … … 123 125 forall( dtype ostype | ostream( ostype ) ) 124 126 ostype * ?|?( ostype * os, float _Complex fc ) { 125 os | crealf( fc ); 126 _Bool temp = sepDisable( os ); // disable separators within complex value 127 if ( cimagf( fc ) >= 0 ) os | '+'; // negative value prints '-' 128 os | cimagf( fc ) | 'i'; 129 sepReset( os, temp ); // reset separator 127 if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) ); 128 fmt( os, "%g%+gi", crealf( fc ), cimagf( fc ) ); 130 129 return os; 131 130 } // ?|? … … 133 132 forall( dtype ostype | ostream( ostype ) ) 134 133 ostype * ?|?( ostype * os, double _Complex dc ) { 135 os | creal( dc ); 136 _Bool temp = sepDisable( os ); // disable separators within complex value 137 if ( cimag( dc ) >= 0 ) os | '+'; // negative value prints '-' 138 os | cimag( dc ) | 'i'; 139 sepReset( os, temp ); // reset separator 134 if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) ); 135 fmt( os, "%.*lg%+.*lgi", DBL_DIG, creal( dc ), DBL_DIG, cimag( dc ) ); 140 136 return os; 141 137 } // ?|? … … 143 139 forall( dtype ostype | ostream( ostype ) ) 144 140 ostype * ?|?( ostype * os, long double _Complex ldc ) { 145 os | creall( ldc ); 146 _Bool temp = sepDisable( os ); // disable separators within complex value 147 if ( cimagl( ldc ) >= 0 ) os | '+'; // negative value prints '-' 148 os | cimagl( ldc ) | 'i'; 149 sepReset( os, temp ); // reset separator 141 if ( sepPrt( os ) ) fmt( os, "%s", sepGetCur( os ) ); 142 fmt( os, "%.*Lg%+.*Lgi", LDBL_DIG, creall( ldc ), LDBL_DIG, cimagl( ldc ) ); 150 143 return os; 151 144 } // ?|? … … 180 173 181 174 // last character IS spacing or opening punctuation => turn off separator for next item 182 unsigned int len = strlen( cp ), posn = len - 1;183 ch = cp[ posn];// must make unsigned175 size_t len = strlen( cp ); 176 ch = cp[len - 1]; // must make unsigned 184 177 if ( sepPrt( os ) && mask[ ch ] != Open && mask[ ch ] != OpenClose ) { 185 178 sepOn( os ); … … 187 180 sepOff( os ); 188 181 } // if 182 if ( ch == '\n' ) setNL( os, true ); // check *AFTER* sepPrt call above as it resets NL flag 189 183 return write( os, cp, len ); 190 184 } // ?|? … … 201 195 forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } ) 202 196 ostype * ?|?( ostype * os, T arg, Params rest ) { 197 os | arg; // print first argument 203 198 sepSetCur( os, sepGetTuple( os ) ); // switch to tuple separator 204 os | arg; // print first argument205 199 os | rest; // print remaining arguments 206 200 sepSetCur( os, sepGet( os ) ); // switch to regular separator … … 216 210 217 211 forall( dtype ostype | ostream( ostype ) ) 212 ostype * sep( ostype * os ) { 213 os | sepGet( os ); 214 return os; 215 } // sep 216 217 forall( dtype ostype | ostream( ostype ) ) 218 ostype * sepTuple( ostype * os ) { 219 os | sepGetTuple( os ); 220 return os; 221 } // sepTuple 222 223 forall( dtype ostype | ostream( ostype ) ) 218 224 ostype * endl( ostype * os ) { 219 225 os | '\n'; 226 setNL( os, true ); 220 227 flush( os ); 221 228 sepOff( os ); // prepare for next line -
src/libcfa/iterator
rfea3faa rb826e6b 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 18:06:05 201613 // Update Count : 912 // Last Modified On : Fri Jul 7 08:37:25 2017 13 // Update Count : 10 14 14 // 15 15 16 #ifndef ITERATOR_H 17 #define ITERATOR_H 16 #pragma once 18 17 19 18 // An iterator can be used to traverse a data structure. … … 39 38 40 39 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) ) 41 void for_each( iterator_type begin, iterator_type end, void (* func)( elt_type ) );40 void for_each( iterator_type begin, iterator_type end, void (* func)( elt_type ) ); 42 41 43 42 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) ) 44 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ); 45 46 #endif // ITERATOR_H 43 void for_each_reverse( iterator_type begin, iterator_type end, void (* func)( elt_type ) ); 47 44 48 45 // Local Variables: // -
src/libcfa/iterator.c
rfea3faa rb826e6b 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Mar 2 18:08:11 201613 // Update Count : 2 712 // Last Modified On : Fri Jul 7 08:38:23 2017 13 // Update Count : 28 14 14 // 15 15 … … 17 17 18 18 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) ) 19 void for_each( iterator_type begin, iterator_type end, void (* func)( elt_type ) ) {19 void for_each( iterator_type begin, iterator_type end, void (* func)( elt_type ) ) { 20 20 for ( iterator_type i = begin; i != end; ++i ) { 21 21 func( *i ); 22 } 23 } 22 } // for 23 } // for_each 24 24 25 25 forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) ) 26 void for_each_reverse( iterator_type begin, iterator_type end, void (* func)( elt_type ) ) {26 void for_each_reverse( iterator_type begin, iterator_type end, void (* func)( elt_type ) ) { 27 27 for ( iterator_type i = end; i != begin; ) { 28 28 --i; 29 29 func( *i ); 30 } 31 } 30 } // for 31 } // for_each_reverse 32 32 33 33 // Local Variables: // -
src/libcfa/libhdr/libalign.h
rfea3faa rb826e6b 1 // -*- Mode: C++ -*- 1 // -*- Mode: C++ -*- 2 2 // 3 3 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo … … 18 18 // Free Software Foundation; either version 2.1 of the License, or (at your 19 19 // option) any later version. 20 // 20 // 21 21 // This library is distributed in the hope that it will be useful, but WITHOUT 22 22 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 23 23 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 24 24 // for more details. 25 // 25 // 26 26 // You should have received a copy of the GNU Lesser General Public License 27 27 // along with this library. 28 // 28 // 29 29 30 30 … … 33 33 34 34 #include "assert" 35 #include <stdbool.h> 35 36 36 // Minimum size used to align memory boundaries for memory allocations. 37 // Minimum size used to align memory boundaries for memory allocations. 37 38 #define libAlign() (sizeof(double)) 38 39 -
src/libcfa/libhdr/libdebug.h
rfea3faa rb826e6b 18 18 19 19 #ifdef __CFA_DEBUG__ 20 #define LIB_DEBUG_DO(x) x 21 #define LIB_NO_DEBUG_DO(x) ((void)0) 20 #define LIB_DEBUG_DO(...) __VA_ARGS__ 21 #define LIB_NO_DEBUG_DO(...) 22 #define DEBUG_CTX __PRETTY_FUNCTION__ 23 #define DEBUG_CTX2 , __PRETTY_FUNCTION__ 24 #define DEBUG_CTX_PARAM const char * caller 25 #define DEBUG_CTX_PARAM2 , const char * caller 22 26 #else 23 #define LIB_DEBUG_DO(x) ((void)0) 24 #define LIB_NO_DEBUG_DO(x) x 27 #define LIB_DEBUG_DO(...) 28 #define LIB_NO_DEBUG_DO(...) __VA_ARGS__ 29 #define DEBUG_CTX 30 #define DEBUG_CTX2 31 #define DEBUG_CTX_PARAM 32 #define DEBUG_CTX_PARAM2 25 33 #endif 26 34 … … 51 59 52 60 #ifdef __CFA_DEBUG_PRINT__ 53 #define LIB_DEBUG_WRITE( fd, buffer, len ) __lib_debug_write( fd, buffer, len ) 54 #define LIB_DEBUG_ACQUIRE() __lib_debug_acquire() 55 #define LIB_DEBUG_RELEASE() __lib_debug_release() 56 #define LIB_DEBUG_PRINT_SAFE(...) __lib_debug_print_safe (__VA_ARGS__) 57 #define LIB_DEBUG_PRINT_NOLOCK(...) __lib_debug_print_nolock (__VA_ARGS__) 58 #define LIB_DEBUG_PRINT_BUFFER(...) __lib_debug_print_buffer (__VA_ARGS__) 61 #define LIB_DEBUG_WRITE( fd, buffer, len ) __lib_debug_write( fd, buffer, len ) 62 #define LIB_DEBUG_ACQUIRE() __lib_debug_acquire() 63 #define LIB_DEBUG_RELEASE() __lib_debug_release() 64 #define LIB_DEBUG_PRINT_SAFE(...) __lib_debug_print_safe (__VA_ARGS__) 65 #define LIB_DEBUG_PRINT_NOLOCK(...) __lib_debug_print_nolock (__VA_ARGS__) 66 #define LIB_DEBUG_PRINT_BUFFER(...) __lib_debug_print_buffer (__VA_ARGS__) 67 #define LIB_DEBUG_PRINT_BUFFER_DECL(fd, ...) char text[256]; int len = snprintf( text, 256, __VA_ARGS__ ); __lib_debug_write( fd, text, len ); 68 #define LIB_DEBUG_PRINT_BUFFER_LOCAL(fd, ...) len = snprintf( text, 256, __VA_ARGS__ ); __lib_debug_write( fd, text, len ); 59 69 #else 60 #define LIB_DEBUG_WRITE(...) ((void)0) 61 #define LIB_DEBUG_ACQUIRE() ((void)0) 62 #define LIB_DEBUG_RELEASE() ((void)0) 63 #define LIB_DEBUG_PRINT_SAFE(...) ((void)0) 64 #define LIB_DEBUG_PRINT_NOLOCK(...) ((void)0) 65 #define LIB_DEBUG_PRINT_BUFFER(...) ((void)0) 70 #define LIB_DEBUG_WRITE(...) ((void)0) 71 #define LIB_DEBUG_ACQUIRE() ((void)0) 72 #define LIB_DEBUG_RELEASE() ((void)0) 73 #define LIB_DEBUG_PRINT_SAFE(...) ((void)0) 74 #define LIB_DEBUG_PRINT_NOLOCK(...) ((void)0) 75 #define LIB_DEBUG_PRINT_BUFFER(...) ((void)0) 76 #define LIB_DEBUG_PRINT_BUFFER_DECL(...) ((void)0) 77 #define LIB_DEBUG_PRINT_BUFFER_LOCAL(...) ((void)0) 66 78 #endif 67 79 -
src/libcfa/limits
rfea3faa rb826e6b 10 10 // Created On : Wed Apr 6 18:06:52 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Apr 6 21:08:16 201613 // Update Count : 612 // Last Modified On : Fri Jul 7 09:33:57 2017 13 // Update Count : 7 14 14 // 15 15 16 #ifndef LIMITS_H 17 #define LIMITS_H 16 #pragma once 18 17 19 18 // Integral Constants … … 110 109 extern const long _Complex _1_SQRT_2; // 1 / sqrt(2) 111 110 112 #endif // LIMITS_H113 114 111 // Local Variables: // 115 112 // mode: c // -
src/libcfa/math
rfea3faa rb826e6b 10 10 // Created On : Mon Apr 18 23:37:04 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 24 17:40:39 2017 13 // Update Count : 60 14 // 15 16 #ifndef MATH_H 17 #define MATH_H 12 // Last Modified On : Fri Jul 7 09:34:15 2017 13 // Update Count : 61 14 // 15 16 #pragma once 18 17 19 18 extern "C" { … … 345 344 long double scalbln( long double, long int ); 346 345 347 #endif // MATH_H348 349 346 // Local Variables: // 350 347 // mode: c // -
src/libcfa/rational
rfea3faa rb826e6b 12 12 // Created On : Wed Apr 6 17:56:25 2016 13 13 // Last Modified By : Peter A. Buhr 14 // Last Modified On : Mon May 15 21:30:12201715 // Update Count : 9 014 // Last Modified On : Fri Jul 7 09:34:33 2017 15 // Update Count : 93 16 16 // 17 17 18 #ifndef RATIONAL_H 19 #define RATIONAL_H 18 #pragma once 20 19 21 20 #include "iostream" … … 47 46 // implementation 48 47 49 forall ( otype RationalImpl | arithmetic( RationalImpl ) )48 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 50 49 struct Rational { 51 50 RationalImpl numerator, denominator; // invariant: denominator > 0 … … 54 53 // constructors 55 54 56 forall ( otype RationalImpl | arithmetic( RationalImpl ) )55 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 57 56 void ?{}( Rational(RationalImpl) * r ); 58 57 59 forall ( otype RationalImpl | arithmetic( RationalImpl ) )58 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 60 59 void ?{}( Rational(RationalImpl) * r, RationalImpl n ); 61 60 62 forall ( otype RationalImpl | arithmetic( RationalImpl ) )61 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 63 62 void ?{}( Rational(RationalImpl) * r, RationalImpl n, RationalImpl d ); 64 63 65 forall ( otype RationalImpl | arithmetic( RationalImpl ) )64 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 66 65 void ?{}( Rational(RationalImpl) * r, zero_t ); 67 66 68 forall ( otype RationalImpl | arithmetic( RationalImpl ) )67 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 69 68 void ?{}( Rational(RationalImpl) * r, one_t ); 70 69 71 // getter for numerator/denominator70 // numerator/denominator getter 72 71 73 forall ( otype RationalImpl | arithmetic( RationalImpl ) )72 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 74 73 RationalImpl numerator( Rational(RationalImpl) r ); 75 74 76 forall ( otype RationalImpl | arithmetic( RationalImpl ) )75 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 77 76 RationalImpl denominator( Rational(RationalImpl) r ); 78 forall ( otype RationalImpl | arithmetic( RationalImpl ) ) 77 78 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 79 79 [ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src ); 80 80 81 // setter for numerator/denominator81 // numerator/denominator setter 82 82 83 forall ( otype RationalImpl | arithmetic( RationalImpl ) )83 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 84 84 RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n ); 85 85 86 forall ( otype RationalImpl | arithmetic( RationalImpl ) )86 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 87 87 RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d ); 88 88 89 89 // comparison 90 90 91 forall ( otype RationalImpl | arithmetic( RationalImpl ) )91 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 92 92 int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 93 93 94 forall ( otype RationalImpl | arithmetic( RationalImpl ) )94 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 95 95 int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 96 96 97 forall ( otype RationalImpl | arithmetic( RationalImpl ) )97 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 98 98 int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 99 99 100 forall ( otype RationalImpl | arithmetic( RationalImpl ) )100 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 101 101 int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 102 102 103 forall ( otype RationalImpl | arithmetic( RationalImpl ) )103 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 104 104 int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 105 105 106 forall ( otype RationalImpl | arithmetic( RationalImpl ) )106 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 107 107 int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 108 108 109 109 // arithmetic 110 110 111 forall ( otype RationalImpl | arithmetic( RationalImpl ) )111 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 112 112 Rational(RationalImpl) +?( Rational(RationalImpl) r ); 113 113 114 forall ( otype RationalImpl | arithmetic( RationalImpl ) )114 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 115 115 Rational(RationalImpl) -?( Rational(RationalImpl) r ); 116 116 117 forall ( otype RationalImpl | arithmetic( RationalImpl ) )117 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 118 118 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 119 119 120 forall ( otype RationalImpl | arithmetic( RationalImpl ) )120 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 121 121 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 122 122 123 forall ( otype RationalImpl | arithmetic( RationalImpl ) )123 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 124 124 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 125 125 126 forall ( otype RationalImpl | arithmetic( RationalImpl ) )126 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 127 127 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ); 128 128 129 129 // conversion 130 forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )130 forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } ) 131 131 double widen( Rational(RationalImpl) r ); 132 forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double );} )132 forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double );} ) 133 133 Rational(RationalImpl) narrow( double f, RationalImpl md ); 134 134 135 135 // I/O 136 forall ( otype RationalImpl | arithmetic( RationalImpl ) )136 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 137 137 forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl * ); } ) 138 138 istype * ?|?( istype *, Rational(RationalImpl) * ); 139 139 140 forall ( otype RationalImpl | arithmetic( RationalImpl ) )140 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 141 141 forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } ) 142 142 ostype * ?|?( ostype *, Rational(RationalImpl ) ); 143 144 #endif // RATIONAL_H145 143 146 144 // Local Variables: // -
src/libcfa/rational.c
rfea3faa rb826e6b 10 10 // Created On : Wed Apr 6 17:54:28 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon May 15 21:29:23201713 // Update Count : 1 4912 // Last Modified On : Tue May 16 18:35:36 2017 13 // Update Count : 150 14 14 // 15 15 … … 22 22 // Calculate greatest common denominator of two numbers, the first of which may be negative. Used to reduce rationals. 23 23 // alternative: https://en.wikipedia.org/wiki/Binary_GCD_algorithm 24 forall ( otype RationalImpl | arithmetic( RationalImpl ) )24 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 25 25 static RationalImpl gcd( RationalImpl a, RationalImpl b ) { 26 26 for ( ;; ) { // Euclid's algorithm … … 33 33 } // gcd 34 34 35 forall ( otype RationalImpl | arithmetic( RationalImpl ) )35 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 36 36 static RationalImpl simplify( RationalImpl * n, RationalImpl * d ) { 37 37 if ( *d == (RationalImpl){0} ) { … … 46 46 // constructors 47 47 48 forall ( otype RationalImpl | arithmetic( RationalImpl ) )48 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 49 49 void ?{}( Rational(RationalImpl) * r ) { 50 50 r{ (RationalImpl){0}, (RationalImpl){1} }; 51 51 } // rational 52 52 53 forall ( otype RationalImpl | arithmetic( RationalImpl ) )53 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 54 54 void ?{}( Rational(RationalImpl) * r, RationalImpl n ) { 55 55 r{ n, (RationalImpl){1} }; 56 56 } // rational 57 57 58 forall ( otype RationalImpl | arithmetic( RationalImpl ) )58 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 59 59 void ?{}( Rational(RationalImpl) * r, RationalImpl n, RationalImpl d ) { 60 60 RationalImpl t = simplify( &n, &d ); // simplify … … 66 66 // getter for numerator/denominator 67 67 68 forall ( otype RationalImpl | arithmetic( RationalImpl ) )68 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 69 69 RationalImpl numerator( Rational(RationalImpl) r ) { 70 70 return r.numerator; 71 71 } // numerator 72 72 73 forall ( otype RationalImpl | arithmetic( RationalImpl ) )73 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 74 74 RationalImpl denominator( Rational(RationalImpl) r ) { 75 75 return r.denominator; 76 76 } // denominator 77 77 78 forall ( otype RationalImpl | arithmetic( RationalImpl ) )78 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 79 79 [ RationalImpl, RationalImpl ] ?=?( * [ RationalImpl, RationalImpl ] dest, Rational(RationalImpl) src ) { 80 80 return *dest = src.[ numerator, denominator ]; … … 83 83 // setter for numerator/denominator 84 84 85 forall ( otype RationalImpl | arithmetic( RationalImpl ) )85 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 86 86 RationalImpl numerator( Rational(RationalImpl) r, RationalImpl n ) { 87 87 RationalImpl prev = r.numerator; … … 92 92 } // numerator 93 93 94 forall ( otype RationalImpl | arithmetic( RationalImpl ) )94 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 95 95 RationalImpl denominator( Rational(RationalImpl) r, RationalImpl d ) { 96 96 RationalImpl prev = r.denominator; … … 104 104 // comparison 105 105 106 forall ( otype RationalImpl | arithmetic( RationalImpl ) )106 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 107 107 int ?==?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 108 108 return l.numerator * r.denominator == l.denominator * r.numerator; 109 109 } // ?==? 110 110 111 forall ( otype RationalImpl | arithmetic( RationalImpl ) )111 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 112 112 int ?!=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 113 113 return ! ( l == r ); 114 114 } // ?!=? 115 115 116 forall ( otype RationalImpl | arithmetic( RationalImpl ) )116 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 117 117 int ?<?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 118 118 return l.numerator * r.denominator < l.denominator * r.numerator; 119 119 } // ?<? 120 120 121 forall ( otype RationalImpl | arithmetic( RationalImpl ) )121 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 122 122 int ?<=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 123 123 return l.numerator * r.denominator <= l.denominator * r.numerator; 124 124 } // ?<=? 125 125 126 forall ( otype RationalImpl | arithmetic( RationalImpl ) )126 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 127 127 int ?>?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 128 128 return ! ( l <= r ); 129 129 } // ?>? 130 130 131 forall ( otype RationalImpl | arithmetic( RationalImpl ) )131 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 132 132 int ?>=?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 133 133 return ! ( l < r ); … … 137 137 // arithmetic 138 138 139 forall ( otype RationalImpl | arithmetic( RationalImpl ) )139 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 140 140 Rational(RationalImpl) +?( Rational(RationalImpl) r ) { 141 141 Rational(RationalImpl) t = { r.numerator, r.denominator }; … … 143 143 } // +? 144 144 145 forall ( otype RationalImpl | arithmetic( RationalImpl ) )145 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 146 146 Rational(RationalImpl) -?( Rational(RationalImpl) r ) { 147 147 Rational(RationalImpl) t = { -r.numerator, r.denominator }; … … 149 149 } // -? 150 150 151 forall ( otype RationalImpl | arithmetic( RationalImpl ) )151 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 152 152 Rational(RationalImpl) ?+?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 153 153 if ( l.denominator == r.denominator ) { // special case … … 160 160 } // ?+? 161 161 162 forall ( otype RationalImpl | arithmetic( RationalImpl ) )162 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 163 163 Rational(RationalImpl) ?-?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 164 164 if ( l.denominator == r.denominator ) { // special case … … 171 171 } // ?-? 172 172 173 forall ( otype RationalImpl | arithmetic( RationalImpl ) )173 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 174 174 Rational(RationalImpl) ?*?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 175 175 Rational(RationalImpl) t = { l.numerator * r.numerator, l.denominator * r.denominator }; … … 177 177 } // ?*? 178 178 179 forall ( otype RationalImpl | arithmetic( RationalImpl ) )179 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 180 180 Rational(RationalImpl) ?/?( Rational(RationalImpl) l, Rational(RationalImpl) r ) { 181 181 if ( r.numerator < (RationalImpl){0} ) { … … 190 190 // conversion 191 191 192 forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } )192 forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); } ) 193 193 double widen( Rational(RationalImpl) r ) { 194 194 return convert( r.numerator ) / convert( r.denominator ); … … 196 196 197 197 // http://www.ics.uci.edu/~eppstein/numth/frap.c 198 forall ( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double ); } )198 forall( otype RationalImpl | arithmetic( RationalImpl ) | { double convert( RationalImpl ); RationalImpl convert( double ); } ) 199 199 Rational(RationalImpl) narrow( double f, RationalImpl md ) { 200 200 if ( md <= (RationalImpl){1} ) { // maximum fractional digits too small? … … 227 227 // I/O 228 228 229 forall ( otype RationalImpl | arithmetic( RationalImpl ) )229 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 230 230 forall( dtype istype | istream( istype ) | { istype * ?|?( istype *, RationalImpl * ); } ) 231 231 istype * ?|?( istype * is, Rational(RationalImpl) * r ) { … … 238 238 } // ?|? 239 239 240 forall ( otype RationalImpl | arithmetic( RationalImpl ) )240 forall( otype RationalImpl | arithmetic( RationalImpl ) ) 241 241 forall( dtype ostype | ostream( ostype ) | { ostype * ?|?( ostype *, RationalImpl ); } ) 242 242 ostype * ?|?( ostype * os, Rational(RationalImpl ) r ) { -
src/libcfa/stdlib
rfea3faa rb826e6b 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jun 2 15:51:03 2017 13 // Update Count : 218 14 // 15 16 #ifndef STDLIB_H 17 #define STDLIB_H 12 // Last Modified On : Fri Jul 7 09:34:49 2017 13 // Update Count : 219 14 // 15 16 #pragma once 18 17 19 18 //--------------------------------------- … … 232 231 void swap( T * t1, T * t2 ); 233 232 234 #endif // STDLIB_H235 236 233 // Local Variables: // 237 234 // mode: c // -
src/main.cc
rfea3faa rb826e6b 11 11 // Created On : Fri May 15 23:12:02 2015 12 12 // Last Modified By : Andrew Beach 13 // Last Modified On : Wed May 10 14:45:00 201714 // Update Count : 4 3713 // Last Modified On : Fri Jul 7 11:13:00 2017 14 // Update Count : 442 15 15 // 16 16 17 #include <iostream> 18 #include <fstream> 19 #include <signal.h> // signal 20 #include <getopt.h> // getopt 21 #include <execinfo.h> // backtrace, backtrace_symbols 22 #include <cxxabi.h> // __cxa_demangle 23 #include <cstring> // index 24 25 using namespace std; 26 27 #include "Parser/lex.h" 28 #include "Parser/parser.h" 29 #include "Parser/TypedefTable.h" 30 #include "GenPoly/Lvalue.h" 31 #include "GenPoly/Specialize.h" 32 #include "GenPoly/Box.h" 33 #include "GenPoly/CopyParams.h" 34 #include "GenPoly/InstantiateGeneric.h" 35 #include "Concurrency/Keywords.h" 36 #include "CodeGen/Generate.h" 37 #include "CodeGen/FixNames.h" 38 #include "CodeGen/FixMain.h" 39 #include "CodeTools/DeclStats.h" 40 #include "CodeTools/TrackLoc.h" 41 #include "ControlStruct/Mutate.h" 42 #include "SymTab/Validate.h" 43 #include "ResolvExpr/AlternativePrinter.h" 44 #include "ResolvExpr/Resolver.h" 45 #include "MakeLibCfa.h" 46 #include "InitTweak/GenInit.h" 47 #include "InitTweak/FixInit.h" 48 #include "Common/UnimplementedError.h" 49 #include "../config.h" 50 #include "Tuples/Tuples.h" 17 #include <cassert> // for assertf 18 #include <cxxabi.h> // for __cxa_demangle 19 #include <execinfo.h> // for backtrace, backtrace_symbols 20 #include <getopt.h> // for no_argument, optind, geto... 21 #include <signal.h> // for signal, SIGABRT, SIGSEGV 22 #include <cstdio> // for fopen, FILE, fclose, stdin 23 #include <cstdlib> // for exit, free, abort, EXIT_F... 24 #include <cstring> // for index 25 #include <fstream> // for ofstream 26 #include <iostream> // for operator<<, basic_ostream 27 #include <iterator> // for back_inserter 28 #include <list> // for list 29 #include <string> // for operator<<, allocator 30 31 #include "../config.h" // for CFA_LIBDIR 32 #include "CodeGen/FixMain.h" // for FixMain 33 #include "CodeGen/FixNames.h" // for fixNames 34 #include "CodeGen/Generate.h" // for generate 35 #include "CodeTools/DeclStats.h" // for printDeclStats 36 #include "CodeTools/TrackLoc.h" // for fillLocations 37 #include "Common/CompilerError.h" // for CompilerError 38 #include "Common/SemanticError.h" // for SemanticError 39 #include "Common/UnimplementedError.h" // for UnimplementedError 40 #include "Common/utility.h" // for deleteAll, filter, printAll 41 #include "ControlStruct/ExceptTranslate.h" // for translateEHM 42 #include "ControlStruct/Mutate.h" // for mutate 43 #include "GenPoly/Box.h" // for box 44 #include "GenPoly/CopyParams.h" // for copyParams 45 #include "GenPoly/InstantiateGeneric.h" // for instantiateGeneric 46 #include "GenPoly/Lvalue.h" // for convertLvalue 47 #include "GenPoly/Specialize.h" // for convertSpecializations 48 #include "InitTweak/FixInit.h" // for fix 49 #include "InitTweak/GenInit.h" // for genInit 50 #include "MakeLibCfa.h" // for makeLibCfa 51 #include "Parser/LinkageSpec.h" // for Spec, Cforall, Intrinsic 52 #include "Parser/ParseNode.h" // for DeclarationNode, buildList 53 #include "Parser/TypedefTable.h" // for TypedefTable 54 #include "ResolvExpr/AlternativePrinter.h" // for AlternativePrinter 55 #include "ResolvExpr/Resolver.h" // for resolve 56 #include "SymTab/Validate.h" // for validate 57 #include "SynTree/Declaration.h" // for Declaration 58 #include "SynTree/Visitor.h" // for acceptAll 59 #include "Tuples/Tuples.h" // for expandMemberTuples, expan... 51 60 52 61 using namespace std; … … 186 195 if ( ! nopreludep ) { // include gcc builtins 187 196 // -l is for initial build ONLY and builtins.cf is not in the lib directory so access it here. 188 // Read to cfa builtins, if not generating the cfa library189 FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );190 assertf( builtins, "cannot open builtins.cf\n" );191 parse( builtins, LinkageSpec::Compiler );192 197 193 198 // Read to gcc builtins, if not generating the cfa library … … 206 211 assertf( prelude, "cannot open prelude.cf\n" ); 207 212 parse( prelude, LinkageSpec::Intrinsic ); 213 214 // Read to cfa builtins, if not generating the cfa library 215 FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" ); 216 assertf( builtins, "cannot open builtins.cf\n" ); 217 parse( builtins, LinkageSpec::BuiltinCFA ); 208 218 } // if 209 219 } // if … … 289 299 OPTPRINT( "expandUniqueExpr" ); // xxx - is this the right place for this? want to expand ASAP so that subsequent passes don't need to worry about double-visiting a unique expr - needs to go after InitTweak::fix so that copy constructed return declarations are reused 290 300 Tuples::expandUniqueExpr( translationUnit ); 301 302 OPTPRINT( "translateEHM" ); 303 ControlStruct::translateEHM( translationUnit ); 291 304 292 305 OPTPRINT( "convertSpecializations" ) // needs to happen before tuple types are expanded … … 481 494 break; 482 495 case '?': 483 assertf( false, "Unknown option: '%c'\n", (char)optopt ); 496 if ( optopt ) { // short option ? 497 assertf( false, "Unknown option: -%c\n", (char)optopt ); 498 } else { 499 assertf( false, "Unknown option: %s\n", argv[optind - 1] ); 500 } // if 484 501 default: 485 502 abort(); -
src/prelude/Makefile.am
rfea3faa rb826e6b 23 23 noinst_DATA = ../libcfa/libcfa-prelude.c 24 24 25 CC = ${abs_top_srcdir}/src/driver/cfa 26 27 $(DEPDIR) : 28 mkdir $(DEPDIR) 29 30 $(DEPDIR)/builtins.Po : $(DEPDIR) 31 touch ${@} 32 25 33 # create extra forward types/declarations to reduce inclusion of library files 26 34 extras.cf : extras.regx extras.c … … 39 47 40 48 # create forward declarations for cfa builtins 41 builtins.cf : builtins.c 42 ${AM_V_GEN}@BACKEND_CC@ -E -P ${<} -o ${@} 49 builtins.cf : builtins.c ${CC} 50 ${AM_V_GEN}${CC} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po 51 ${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po 52 53 include $(DEPDIR)/builtins.Po 43 54 44 55 ../libcfa/libcfa-prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp … … 48 59 ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@ # use src/cfa-cpp as not in lib until after install 49 60 61 maintainer-clean-local : 62 rm -rf $(DEPDIR) 63 50 64 MAINTAINERCLEANFILES = gcc-builtins.c gcc-builtins.cf builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}} -
src/prelude/Makefile.in
rfea3faa rb826e6b 1 # Makefile.in generated by automake 1.1 1.3from Makefile.am.1 # Makefile.in generated by automake 1.15 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 6 # Foundation, Inc. 4 # Copyright (C) 1994-2014 Free Software Foundation, Inc. 5 7 6 # This Makefile.in is free software; the Free Software Foundation 8 7 # gives unlimited permission to copy and/or distribute it, … … 20 19 21 20 VPATH = @srcdir@ 21 am__is_gnu_make = { \ 22 if test -z '$(MAKELEVEL)'; then \ 23 false; \ 24 elif test -n '$(MAKE_HOST)'; then \ 25 true; \ 26 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ 27 true; \ 28 else \ 29 false; \ 30 fi; \ 31 } 32 am__make_running_with_option = \ 33 case $${target_option-} in \ 34 ?) ;; \ 35 *) echo "am__make_running_with_option: internal error: invalid" \ 36 "target option '$${target_option-}' specified" >&2; \ 37 exit 1;; \ 38 esac; \ 39 has_opt=no; \ 40 sane_makeflags=$$MAKEFLAGS; \ 41 if $(am__is_gnu_make); then \ 42 sane_makeflags=$$MFLAGS; \ 43 else \ 44 case $$MAKEFLAGS in \ 45 *\\[\ \ ]*) \ 46 bs=\\; \ 47 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ 48 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ 49 esac; \ 50 fi; \ 51 skip_next=no; \ 52 strip_trailopt () \ 53 { \ 54 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ 55 }; \ 56 for flg in $$sane_makeflags; do \ 57 test $$skip_next = yes && { skip_next=no; continue; }; \ 58 case $$flg in \ 59 *=*|--*) continue;; \ 60 -*I) strip_trailopt 'I'; skip_next=yes;; \ 61 -*I?*) strip_trailopt 'I';; \ 62 -*O) strip_trailopt 'O'; skip_next=yes;; \ 63 -*O?*) strip_trailopt 'O';; \ 64 -*l) strip_trailopt 'l'; skip_next=yes;; \ 65 -*l?*) strip_trailopt 'l';; \ 66 -[dEDm]) skip_next=yes;; \ 67 -[JT]) skip_next=yes;; \ 68 esac; \ 69 case $$flg in \ 70 *$$target_option*) has_opt=yes; break;; \ 71 esac; \ 72 done; \ 73 test $$has_opt = yes 74 am__make_dryrun = (target_option=n; $(am__make_running_with_option)) 75 am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 22 76 pkgdatadir = $(datadir)/@PACKAGE@ 23 77 pkgincludedir = $(includedir)/@PACKAGE@ … … 39 93 host_triplet = @host@ 40 94 subdir = src/prelude 41 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in42 95 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 43 96 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 44 97 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 45 98 $(ACLOCAL_M4) 99 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) 46 100 mkinstalldirs = $(install_sh) -d 47 101 CONFIG_HEADER = $(top_builddir)/config.h 48 102 CONFIG_CLEAN_FILES = 49 103 CONFIG_CLEAN_VPATH_FILES = 104 AM_V_P = $(am__v_P_@AM_V@) 105 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) 106 am__v_P_0 = false 107 am__v_P_1 = : 50 108 AM_V_GEN = $(am__v_GEN_@AM_V@) 51 109 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 52 am__v_GEN_0 = @echo " GEN " $@; 110 am__v_GEN_0 = @echo " GEN " $@; 111 am__v_GEN_1 = 53 112 AM_V_at = $(am__v_at_@AM_V@) 54 113 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 55 114 am__v_at_0 = @ 115 am__v_at_1 = 56 116 SOURCES = 57 117 DIST_SOURCES = 118 am__can_run_installinfo = \ 119 case $$AM_UPDATE_INFO_DIR in \ 120 n|no|NO) false;; \ 121 *) (install-info --version) >/dev/null 2>&1;; \ 122 esac 58 123 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; 59 124 am__vpath_adj = case $$p in \ … … 85 150 am__installdirs = "$(DESTDIR)$(cfalibdir)" 86 151 DATA = $(cfalib_DATA) $(noinst_DATA) 152 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) 153 am__DIST_COMMON = $(srcdir)/Makefile.in 87 154 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 88 155 ACLOCAL = @ACLOCAL@ … … 95 162 AWK = @AWK@ 96 163 BACKEND_CC = @BACKEND_CC@ 97 CC = @CC@164 CC = ${abs_top_srcdir}/src/driver/cfa 98 165 CCAS = @CCAS@ 99 166 CCASDEPMODE = @CCASDEPMODE@ … … 197 264 program_transform_name = @program_transform_name@ 198 265 psdir = @psdir@ 266 runstatedir = @runstatedir@ 199 267 sbindir = @sbindir@ 200 268 sharedstatedir = @sharedstatedir@ … … 229 297 $(am__cd) $(top_srcdir) && \ 230 298 $(AUTOMAKE) --foreign src/prelude/Makefile 231 .PRECIOUS: Makefile232 299 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 233 300 @case '$?' in \ … … 249 316 install-cfalibDATA: $(cfalib_DATA) 250 317 @$(NORMAL_INSTALL) 251 test -z "$(cfalibdir)" || $(MKDIR_P) "$(DESTDIR)$(cfalibdir)"252 318 @list='$(cfalib_DATA)'; test -n "$(cfalibdir)" || list=; \ 319 if test -n "$$list"; then \ 320 echo " $(MKDIR_P) '$(DESTDIR)$(cfalibdir)'"; \ 321 $(MKDIR_P) "$(DESTDIR)$(cfalibdir)" || exit 1; \ 322 fi; \ 253 323 for p in $$list; do \ 254 324 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ … … 265 335 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ 266 336 dir='$(DESTDIR)$(cfalibdir)'; $(am__uninstall_files_from_dir) 267 tags : TAGS268 TAGS: 269 270 ctags: CTAGS 271 CTAGS:337 tags TAGS: 338 339 ctags CTAGS: 340 341 cscope cscopelist: 272 342 273 343 … … 390 460 maintainer-clean: maintainer-clean-am 391 461 -rm -f Makefile 392 maintainer-clean-am: distclean-am maintainer-clean-generic 462 maintainer-clean-am: distclean-am maintainer-clean-generic \ 463 maintainer-clean-local 393 464 394 465 mostlyclean: mostlyclean-am … … 408 479 .MAKE: install-am install-strip 409 480 410 .PHONY: all all-am check check-am clean clean-generic distclean \ 411 distclean-generic distdir dvi dvi-am html html-am info info-am \ 412 install install-am install-cfalibDATA install-data \ 413 install-data-am install-dvi install-dvi-am install-exec \ 414 install-exec-am install-html install-html-am install-info \ 415 install-info-am install-man install-pdf install-pdf-am \ 416 install-ps install-ps-am install-strip installcheck \ 417 installcheck-am installdirs maintainer-clean \ 418 maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ 419 pdf-am ps ps-am uninstall uninstall-am uninstall-cfalibDATA 420 481 .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ 482 ctags-am distclean distclean-generic distdir dvi dvi-am html \ 483 html-am info info-am install install-am install-cfalibDATA \ 484 install-data install-data-am install-dvi install-dvi-am \ 485 install-exec install-exec-am install-html install-html-am \ 486 install-info install-info-am install-man install-pdf \ 487 install-pdf-am install-ps install-ps-am install-strip \ 488 installcheck installcheck-am installdirs maintainer-clean \ 489 maintainer-clean-generic maintainer-clean-local mostlyclean \ 490 mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ 491 uninstall-am uninstall-cfalibDATA 492 493 .PRECIOUS: Makefile 494 495 496 $(DEPDIR) : 497 mkdir $(DEPDIR) 498 499 $(DEPDIR)/builtins.Po : $(DEPDIR) 500 touch ${@} 421 501 422 502 # create extra forward types/declarations to reduce inclusion of library files … … 436 516 437 517 # create forward declarations for cfa builtins 438 builtins.cf : builtins.c 439 ${AM_V_GEN}@BACKEND_CC@ -E -P ${<} -o ${@} 518 builtins.cf : builtins.c ${CC} 519 ${AM_V_GEN}${CC} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po 520 ${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po 521 522 include $(DEPDIR)/builtins.Po 440 523 441 524 ../libcfa/libcfa-prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp … … 444 527 bootloader.c : bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp 445 528 ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@ # use src/cfa-cpp as not in lib until after install 529 530 maintainer-clean-local : 531 rm -rf $(DEPDIR) 446 532 447 533 # Tell versions [3.59,3.63) of GNU make to not export all variables. -
src/prelude/builtins.c
rfea3faa rb826e6b 1 1 typedef unsigned long long __cfaabi_exception_type_t; 2 3 #include "../libcfa/exception.h" -
src/tests/.expect/32/math.txt
rfea3faa rb826e6b 22 22 cos:0.540302 0.54030230586814 0.540302305868139717 0.83373-0.988898i 0.833730025131149-0.988897705762865i 0.833730025131149049-0.988897705762865096i 23 23 tan:1.55741 1.5574077246549 1.55740772465490223 0.271753+1.08392i 0.271752585319512+1.08392332733869i 0.271752585319511717+1.08392332733869454i 24 asin:1.5708 1.5707963267949 1.57079632679489662 0.6662 4+1.06128i 0.666239432492515+1.06127506190504i 0.666239432492515255+1.06127506190503565i24 asin:1.5708 1.5707963267949 1.57079632679489662 0.666239+1.06128i 0.666239432492515+1.06127506190504i 0.666239432492515255+1.06127506190503565i 25 25 acos:0 0 0 0.904557-1.06128i 0.904556894302381-1.06127506190504i 0.904556894302381364-1.06127506190503565i 26 26 atan:0.785398 0.785398163397448 0.78539816339744831 1.01722+0.402359i 1.01722196789785+0.402359478108525i 1.01722196789785137+0.402359478108525094i -
src/tests/.expect/concurrent/sched-int-disjoint.txt
rfea3faa rb826e6b 9 9 9000 10 10 10000 11 1100012 1200013 1300014 1400015 1500016 1600017 1700018 1800019 1900020 2000021 2100022 2200023 2300024 2400025 2500026 2600027 2700028 2800029 2900030 3000031 3100032 3200033 3300034 3400035 3500036 3600037 3700038 3800039 3900040 4000041 4100042 4200043 4300044 4400045 4500046 4600047 4700048 4800049 4900050 5000051 5100052 5200053 5300054 5400055 5500056 5600057 5700058 5800059 5900060 6000061 6100062 6200063 6300064 6400065 6500066 6600067 6700068 6800069 6900070 7000071 7100072 7200073 7300074 7400075 7500076 7600077 7700078 7800079 7900080 8000081 8100082 8200083 8300084 8400085 8500086 8600087 8700088 8800089 8900090 9000091 9100092 9200093 9300094 9400095 9500096 9600097 9700098 9800099 99000100 100000101 11 All waiter done -
src/tests/.expect/io.txt
rfea3faa rb826e6b 4 4 123 5 5 6 opening delimiters 6 7 x (1 x [2 x {3 x =4 x $5 x £6 x ¥7 x ¡8 x ¿9 x «10 8 9 closing delimiters 7 10 1, x 2. x 3; x 4! x 5? x 6% x 7¢ x 8» x 9) x 10] x 11} x 11 12 opening/closing delimiters 8 13 x`1`x'2'x"3"x:4:x 5 x 6 x 9 14 7 … … 15 20 10 16 21 x 22 23 override opening/closing delimiters 17 24 x ( 1 ) x 2 , x 3 :x: 4 25 26 input bacis types 27 28 output basic types 18 29 A 19 30 1 2 3 4 5 6 7 8 … … 21 32 1.1+2.3i 1.1-2.3i 1.1-2.3i 22 33 34 tuples 35 1, 2, 3 4, 5, 6 36 37 toggle separator 23 38 1.11.21.3 24 39 1.1+2.3i1.1-2.3i1.1-2.3i 25 abcxyz 40 1.1+2.3i 1.1-2.3i1.1-2.3i 41 1.1+2.3i 1.1-2.3i 1.1-2.3i 42 1.1+2.3i1.1-2.3i 1.1-2.3i 43 abcxyz 26 44 abcxyz 27 45 46 change separator 47 from " " to ", $" 28 48 1.1, $1.2, $1.3 29 49 1.1+2.3i, $1.1-2.3i, $1.1-2.3i 30 50 abc, $xyz 51 1, 2, 3, $4, 5, 6 31 52 32 1, 2, 3, 4 33 1, $2, $3 ", $" 34 1 2 3 " " 35 1 2 3 53 from ", $" to " " 54 1.1 1.2 1.3 55 1.1+2.3i 1.1-2.3i 1.1-2.3i 56 abc xyz 57 1, 2, 3 4, 5, 6 58 59 check sepOn/sepOff 60 1 2 3 36 61 12 3 62 1 2 3 63 1 2 3 64 65 1 2 3 66 67 check enable/disable 37 68 123 38 69 1 23 39 70 1 2 3 40 1 2 3 4 " " 41 1, 2, 3, 4 ", " 42 1, 2, 3, 4 71 123 72 1 2 3 73 123 74 1 2 3 75 76 1 2 3 4 5 6 " " 77 1, 2, 3 4, 5, 6 " " 78 1, 2, 3 4, 5, 6 79 43 80 3, 4, a, 7.2 44 81 3, 4, a, 7.2 45 82 3 4 a 7.2 46 3 4 a 7.234a7.23 4 a 7.247 3-4-a-7.2^3^4 -3-4-a-7.283 3 4 a 7.234a7.23 4 a 7.2 84 3-4-a-7.2^3^4^3-4-a-7.2 -
src/tests/Makefile.am
rfea3faa rb826e6b 29 29 30 30 # applies to both programs 31 EXTRA_FLAGS = 32 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS} 31 DEBUG_FLAGS = 32 33 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ 34 if !BUILD_DEBUG 35 BUILD_FLAGS += -nodebug 36 else 37 if !BUILD_RELEASE 38 BUILD_FLAGS += -debug 39 else 40 BUILD_FLAGS += ${DEBUG_FLAGS} 41 endif 42 endif 43 33 44 TEST_FLAGS = $(if $(test), 2> .err/${@}.log, ) 34 CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}45 AM_CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS} 35 46 CC = @CFA_BINDIR@/@CFA_NAME@ 36 47 … … 39 50 40 51 fstream_test_SOURCES = fstream_test.c 52 fstream_test_CFLAGS = $(if $(test), 2>> .err/fstream_test.log, ) ${BUILD_FLAGS} 53 41 54 vector_test_SOURCES = vector/vector_int.c vector/array.c vector/vector_test.c 55 vector_test_CFLAGS = $(if $(test), 2>> .err/vector_test.log, ) ${BUILD_FLAGS} 56 42 57 avl_test_SOURCES = avltree/avl_test.c avltree/avl0.c avltree/avl1.c avltree/avl2.c avltree/avl3.c avltree/avl4.c avltree/avl-private.c 58 avl_test_CFLAGS = $(if $(test), 2>> .err/avl_test.log, ) ${BUILD_FLAGS} 43 59 44 60 all-local : … … 62 78 63 79 % : %.c @CFA_BINDIR@/@CFA_NAME@ 64 ${CC} ${ CFLAGS} ${<} -o ${@}80 ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} -o ${@} 65 81 66 82 dtor-early-exit-ERR1: dtor-early-exit.c @CFA_BINDIR@/@CFA_NAME@ 67 ${CC} ${ CFLAGS} -DERR1 ${<} -o ${@}83 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@} 68 84 69 85 dtor-early-exit-ERR2: dtor-early-exit.c @CFA_BINDIR@/@CFA_NAME@ 70 ${CC} ${ CFLAGS} -DERR2 ${<} -o ${@}86 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR2 ${<} -o ${@} 71 87 72 88 declarationSpecifier: declarationSpecifier.c @CFA_BINDIR@/@CFA_NAME@ 73 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}89 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 74 90 75 91 gccExtensions : gccExtensions.c @CFA_BINDIR@/@CFA_NAME@ 76 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}92 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 77 93 78 94 extension : extension.c @CFA_BINDIR@/@CFA_NAME@ 79 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}95 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 80 96 81 97 attributes : attributes.c @CFA_BINDIR@/@CFA_NAME@ 82 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}98 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 83 99 84 100 KRfunctions : KRfunctions.c @CFA_BINDIR@/@CFA_NAME@ 85 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}101 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 86 102 87 103 gmp : gmp.c @CFA_BINDIR@/@CFA_NAME@ 88 ${CC} ${ CFLAGS} -lgmp ${<} -o ${@}104 ${CC} ${AM_CFLAGS} ${CFLAGS} -lgmp ${<} -o ${@} 89 105 90 106 memberCtors-ERR1: memberCtors.c @CFA_BINDIR@/@CFA_NAME@ 91 ${CC} ${ CFLAGS} -DERR1 ${<} -o ${@}107 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@} 92 108 93 109 completeTypeError : completeTypeError.c @CFA_BINDIR@/@CFA_NAME@ 94 ${CC} ${ CFLAGS} -DERR1 ${<} -o ${@}110 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@} -
src/tests/Makefile.in
rfea3faa rb826e6b 1 # Makefile.in generated by automake 1.1 1.3from Makefile.am.1 # Makefile.in generated by automake 1.15 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 6 # Foundation, Inc. 4 # Copyright (C) 1994-2014 Free Software Foundation, Inc. 5 7 6 # This Makefile.in is free software; the Free Software Foundation 8 7 # gives unlimited permission to copy and/or distribute it, … … 19 18 ############################################################################### 20 19 VPATH = @srcdir@ 20 am__is_gnu_make = { \ 21 if test -z '$(MAKELEVEL)'; then \ 22 false; \ 23 elif test -n '$(MAKE_HOST)'; then \ 24 true; \ 25 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ 26 true; \ 27 else \ 28 false; \ 29 fi; \ 30 } 31 am__make_running_with_option = \ 32 case $${target_option-} in \ 33 ?) ;; \ 34 *) echo "am__make_running_with_option: internal error: invalid" \ 35 "target option '$${target_option-}' specified" >&2; \ 36 exit 1;; \ 37 esac; \ 38 has_opt=no; \ 39 sane_makeflags=$$MAKEFLAGS; \ 40 if $(am__is_gnu_make); then \ 41 sane_makeflags=$$MFLAGS; \ 42 else \ 43 case $$MAKEFLAGS in \ 44 *\\[\ \ ]*) \ 45 bs=\\; \ 46 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ 47 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ 48 esac; \ 49 fi; \ 50 skip_next=no; \ 51 strip_trailopt () \ 52 { \ 53 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ 54 }; \ 55 for flg in $$sane_makeflags; do \ 56 test $$skip_next = yes && { skip_next=no; continue; }; \ 57 case $$flg in \ 58 *=*|--*) continue;; \ 59 -*I) strip_trailopt 'I'; skip_next=yes;; \ 60 -*I?*) strip_trailopt 'I';; \ 61 -*O) strip_trailopt 'O'; skip_next=yes;; \ 62 -*O?*) strip_trailopt 'O';; \ 63 -*l) strip_trailopt 'l'; skip_next=yes;; \ 64 -*l?*) strip_trailopt 'l';; \ 65 -[dEDm]) skip_next=yes;; \ 66 -[JT]) skip_next=yes;; \ 67 esac; \ 68 case $$flg in \ 69 *$$target_option*) has_opt=yes; break;; \ 70 esac; \ 71 done; \ 72 test $$has_opt = yes 73 am__make_dryrun = (target_option=n; $(am__make_running_with_option)) 74 am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 21 75 pkgdatadir = $(datadir)/@PACKAGE@ 22 76 pkgincludedir = $(includedir)/@PACKAGE@ … … 38 92 host_triplet = @host@ 39 93 @BUILD_CONCURRENCY_TRUE@am__append_1 = coroutine thread monitor 94 @BUILD_DEBUG_FALSE@am__append_2 = -nodebug 95 @BUILD_DEBUG_TRUE@@BUILD_RELEASE_FALSE@am__append_3 = -debug 96 @BUILD_DEBUG_TRUE@@BUILD_RELEASE_TRUE@am__append_4 = ${DEBUG_FLAGS} 40 97 EXTRA_PROGRAMS = fstream_test$(EXEEXT) vector_test$(EXEEXT) \ 41 98 avl_test$(EXEEXT) 42 99 subdir = src/tests 43 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in44 100 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 45 101 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 46 102 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 47 103 $(ACLOCAL_M4) 104 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) 48 105 mkinstalldirs = $(install_sh) -d 49 106 CONFIG_HEADER = $(top_builddir)/config.h 50 107 CONFIG_CLEAN_FILES = 51 108 CONFIG_CLEAN_VPATH_FILES = 52 am_avl_test_OBJECTS = avl_test.$(OBJEXT) avl0.$(OBJEXT) avl1.$(OBJEXT) \ 53 avl2.$(OBJEXT) avl3.$(OBJEXT) avl4.$(OBJEXT) \ 54 avl-private.$(OBJEXT) 109 am__dirstamp = $(am__leading_dot)dirstamp 110 am_avl_test_OBJECTS = avltree/avl_test-avl_test.$(OBJEXT) \ 111 avltree/avl_test-avl0.$(OBJEXT) \ 112 avltree/avl_test-avl1.$(OBJEXT) \ 113 avltree/avl_test-avl2.$(OBJEXT) \ 114 avltree/avl_test-avl3.$(OBJEXT) \ 115 avltree/avl_test-avl4.$(OBJEXT) \ 116 avltree/avl_test-avl-private.$(OBJEXT) 55 117 avl_test_OBJECTS = $(am_avl_test_OBJECTS) 56 118 avl_test_LDADD = $(LDADD) 57 am_fstream_test_OBJECTS = fstream_test.$(OBJEXT) 119 avl_test_LINK = $(CCLD) $(avl_test_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ 120 $(LDFLAGS) -o $@ 121 am_fstream_test_OBJECTS = fstream_test-fstream_test.$(OBJEXT) 58 122 fstream_test_OBJECTS = $(am_fstream_test_OBJECTS) 59 123 fstream_test_LDADD = $(LDADD) 60 am_vector_test_OBJECTS = vector_int.$(OBJEXT) array.$(OBJEXT) \ 61 vector_test.$(OBJEXT) 124 fstream_test_LINK = $(CCLD) $(fstream_test_CFLAGS) $(CFLAGS) \ 125 $(AM_LDFLAGS) $(LDFLAGS) -o $@ 126 am_vector_test_OBJECTS = vector/vector_test-vector_int.$(OBJEXT) \ 127 vector/vector_test-array.$(OBJEXT) \ 128 vector/vector_test-vector_test.$(OBJEXT) 62 129 vector_test_OBJECTS = $(am_vector_test_OBJECTS) 63 130 vector_test_LDADD = $(LDADD) 131 vector_test_LINK = $(CCLD) $(vector_test_CFLAGS) $(CFLAGS) \ 132 $(AM_LDFLAGS) $(LDFLAGS) -o $@ 133 AM_V_P = $(am__v_P_@AM_V@) 134 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) 135 am__v_P_0 = false 136 am__v_P_1 = : 137 AM_V_GEN = $(am__v_GEN_@AM_V@) 138 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 139 am__v_GEN_0 = @echo " GEN " $@; 140 am__v_GEN_1 = 141 AM_V_at = $(am__v_at_@AM_V@) 142 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 143 am__v_at_0 = @ 144 am__v_at_1 = 64 145 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) 65 146 depcomp = $(SHELL) $(top_srcdir)/automake/depcomp … … 69 150 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) 70 151 am__v_lt_0 = --silent 152 am__v_lt_1 = 71 153 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ 72 154 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) 73 155 AM_V_CC = $(am__v_CC_@AM_V@) 74 156 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) 75 am__v_CC_0 = @echo " CC " $@; 76 AM_V_at = $(am__v_at_@AM_V@) 77 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 78 am__v_at_0 = @ 157 am__v_CC_0 = @echo " CC " $@; 158 am__v_CC_1 = 79 159 CCLD = $(CC) 80 160 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ 81 161 AM_V_CCLD = $(am__v_CCLD_@AM_V@) 82 162 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) 83 am__v_CCLD_0 = @echo " CCLD " $@; 84 AM_V_GEN = $(am__v_GEN_@AM_V@) 85 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 86 am__v_GEN_0 = @echo " GEN " $@; 163 am__v_CCLD_0 = @echo " CCLD " $@; 164 am__v_CCLD_1 = 87 165 SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) \ 88 166 $(vector_test_SOURCES) 89 167 DIST_SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) \ 90 168 $(vector_test_SOURCES) 169 am__can_run_installinfo = \ 170 case $$AM_UPDATE_INFO_DIR in \ 171 n|no|NO) false;; \ 172 *) (install-info --version) >/dev/null 2>&1;; \ 173 esac 174 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) 175 # Read a list of newline-separated strings from the standard input, 176 # and print each of them once, without duplicates. Input order is 177 # *not* preserved. 178 am__uniquify_input = $(AWK) '\ 179 BEGIN { nonempty = 0; } \ 180 { items[$$0] = 1; nonempty = 1; } \ 181 END { if (nonempty) { for (i in items) print i; }; } \ 182 ' 183 # Make sure the list of sources is unique. This is necessary because, 184 # e.g., the same source file might be shared among _SOURCES variables 185 # for different programs/libraries. 186 am__define_uniq_tagged_files = \ 187 list='$(am__tagged_files)'; \ 188 unique=`for i in $$list; do \ 189 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 190 done | $(am__uniquify_input)` 91 191 ETAGS = etags 92 192 CTAGS = ctags 193 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/automake/depcomp 93 194 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 94 195 ACLOCAL = @ACLOCAL@ … … 113 214 CFA_NAME = @CFA_NAME@ 114 215 CFA_PREFIX = @CFA_PREFIX@ 115 CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS}216 CFLAGS = @CFLAGS@ 116 217 CPP = @CPP@ 117 218 CPPFLAGS = @CPPFLAGS@ … … 203 304 program_transform_name = @program_transform_name@ 204 305 psdir = @psdir@ 306 runstatedir = @runstatedir@ 205 307 sbindir = @sbindir@ 206 308 sharedstatedir = @sharedstatedir@ … … 221 323 222 324 # applies to both programs 223 EXTRA_FLAGS = 224 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ ${EXTRA_FLAGS} 325 DEBUG_FLAGS = 326 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ \ 327 $(am__append_2) $(am__append_3) $(am__append_4) 225 328 TEST_FLAGS = $(if $(test), 2> .err/${@}.log, ) 329 AM_CFLAGS = ${TEST_FLAGS} ${BUILD_FLAGS} 226 330 fstream_test_SOURCES = fstream_test.c 331 fstream_test_CFLAGS = $(if $(test), 2>> .err/fstream_test.log, ) ${BUILD_FLAGS} 227 332 vector_test_SOURCES = vector/vector_int.c vector/array.c vector/vector_test.c 333 vector_test_CFLAGS = $(if $(test), 2>> .err/vector_test.log, ) ${BUILD_FLAGS} 228 334 avl_test_SOURCES = avltree/avl_test.c avltree/avl0.c avltree/avl1.c avltree/avl2.c avltree/avl3.c avltree/avl4.c avltree/avl-private.c 335 avl_test_CFLAGS = $(if $(test), 2>> .err/avl_test.log, ) ${BUILD_FLAGS} 229 336 all: all-am 230 337 … … 243 350 $(am__cd) $(top_srcdir) && \ 244 351 $(AUTOMAKE) --foreign src/tests/Makefile 245 .PRECIOUS: Makefile246 352 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 247 353 @case '$?' in \ … … 261 367 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh 262 368 $(am__aclocal_m4_deps): 369 avltree/$(am__dirstamp): 370 @$(MKDIR_P) avltree 371 @: > avltree/$(am__dirstamp) 372 avltree/$(DEPDIR)/$(am__dirstamp): 373 @$(MKDIR_P) avltree/$(DEPDIR) 374 @: > avltree/$(DEPDIR)/$(am__dirstamp) 375 avltree/avl_test-avl_test.$(OBJEXT): avltree/$(am__dirstamp) \ 376 avltree/$(DEPDIR)/$(am__dirstamp) 377 avltree/avl_test-avl0.$(OBJEXT): avltree/$(am__dirstamp) \ 378 avltree/$(DEPDIR)/$(am__dirstamp) 379 avltree/avl_test-avl1.$(OBJEXT): avltree/$(am__dirstamp) \ 380 avltree/$(DEPDIR)/$(am__dirstamp) 381 avltree/avl_test-avl2.$(OBJEXT): avltree/$(am__dirstamp) \ 382 avltree/$(DEPDIR)/$(am__dirstamp) 383 avltree/avl_test-avl3.$(OBJEXT): avltree/$(am__dirstamp) \ 384 avltree/$(DEPDIR)/$(am__dirstamp) 385 avltree/avl_test-avl4.$(OBJEXT): avltree/$(am__dirstamp) \ 386 avltree/$(DEPDIR)/$(am__dirstamp) 387 avltree/avl_test-avl-private.$(OBJEXT): avltree/$(am__dirstamp) \ 388 avltree/$(DEPDIR)/$(am__dirstamp) 389 263 390 avl_test$(EXEEXT): $(avl_test_OBJECTS) $(avl_test_DEPENDENCIES) $(EXTRA_avl_test_DEPENDENCIES) 264 391 @rm -f avl_test$(EXEEXT) 265 $(AM_V_CCLD)$(LINK) $(avl_test_OBJECTS) $(avl_test_LDADD) $(LIBS) 392 $(AM_V_CCLD)$(avl_test_LINK) $(avl_test_OBJECTS) $(avl_test_LDADD) $(LIBS) 393 266 394 fstream_test$(EXEEXT): $(fstream_test_OBJECTS) $(fstream_test_DEPENDENCIES) $(EXTRA_fstream_test_DEPENDENCIES) 267 395 @rm -f fstream_test$(EXEEXT) 268 $(AM_V_CCLD)$(LINK) $(fstream_test_OBJECTS) $(fstream_test_LDADD) $(LIBS) 396 $(AM_V_CCLD)$(fstream_test_LINK) $(fstream_test_OBJECTS) $(fstream_test_LDADD) $(LIBS) 397 vector/$(am__dirstamp): 398 @$(MKDIR_P) vector 399 @: > vector/$(am__dirstamp) 400 vector/$(DEPDIR)/$(am__dirstamp): 401 @$(MKDIR_P) vector/$(DEPDIR) 402 @: > vector/$(DEPDIR)/$(am__dirstamp) 403 vector/vector_test-vector_int.$(OBJEXT): vector/$(am__dirstamp) \ 404 vector/$(DEPDIR)/$(am__dirstamp) 405 vector/vector_test-array.$(OBJEXT): vector/$(am__dirstamp) \ 406 vector/$(DEPDIR)/$(am__dirstamp) 407 vector/vector_test-vector_test.$(OBJEXT): vector/$(am__dirstamp) \ 408 vector/$(DEPDIR)/$(am__dirstamp) 409 269 410 vector_test$(EXEEXT): $(vector_test_OBJECTS) $(vector_test_DEPENDENCIES) $(EXTRA_vector_test_DEPENDENCIES) 270 411 @rm -f vector_test$(EXEEXT) 271 $(AM_V_CCLD)$( LINK) $(vector_test_OBJECTS) $(vector_test_LDADD) $(LIBS)412 $(AM_V_CCLD)$(vector_test_LINK) $(vector_test_OBJECTS) $(vector_test_LDADD) $(LIBS) 272 413 273 414 mostlyclean-compile: 274 415 -rm -f *.$(OBJEXT) 416 -rm -f avltree/*.$(OBJEXT) 417 -rm -f vector/*.$(OBJEXT) 275 418 276 419 distclean-compile: 277 420 -rm -f *.tab.c 278 421 279 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ array.Po@am__quote@280 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/avl-private.Po@am__quote@281 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/avl0.Po@am__quote@282 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/avl1.Po@am__quote@283 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/avl2.Po@am__quote@284 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/avl3.Po@am__quote@285 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/avl4.Po@am__quote@286 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/avl_test.Po@am__quote@287 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/fstream_test.Po@am__quote@288 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/vector_int.Po@am__quote@289 @AMDEP_TRUE@@am__include@ @am__quote@ ./$(DEPDIR)/vector_test.Po@am__quote@422 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstream_test-fstream_test.Po@am__quote@ 423 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl-private.Po@am__quote@ 424 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl0.Po@am__quote@ 425 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl1.Po@am__quote@ 426 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl2.Po@am__quote@ 427 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl3.Po@am__quote@ 428 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl4.Po@am__quote@ 429 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl_test.Po@am__quote@ 430 @AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-array.Po@am__quote@ 431 @AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-vector_int.Po@am__quote@ 432 @AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-vector_test.Po@am__quote@ 290 433 291 434 .c.o: 292 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< 293 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po 435 @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ 436 @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ 437 @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po 294 438 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 295 439 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 296 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<440 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< 297 441 298 442 .c.obj: 299 @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` 300 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po 443 @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ 444 @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ 445 @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po 301 446 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ 302 447 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 303 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` 304 305 avl_test.o: avltree/avl_test.c 306 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl_test.o -MD -MP -MF $(DEPDIR)/avl_test.Tpo -c -o avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c 307 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl_test.Tpo $(DEPDIR)/avl_test.Po 308 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl_test.c' object='avl_test.o' libtool=no @AMDEPBACKSLASH@ 309 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 310 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c 311 312 avl_test.obj: avltree/avl_test.c 313 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl_test.obj -MD -MP -MF $(DEPDIR)/avl_test.Tpo -c -o avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi` 314 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl_test.Tpo $(DEPDIR)/avl_test.Po 315 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl_test.c' object='avl_test.obj' libtool=no @AMDEPBACKSLASH@ 316 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 317 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi` 318 319 avl0.o: avltree/avl0.c 320 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl0.o -MD -MP -MF $(DEPDIR)/avl0.Tpo -c -o avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c 321 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl0.Tpo $(DEPDIR)/avl0.Po 322 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl0.c' object='avl0.o' libtool=no @AMDEPBACKSLASH@ 323 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 324 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c 325 326 avl0.obj: avltree/avl0.c 327 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl0.obj -MD -MP -MF $(DEPDIR)/avl0.Tpo -c -o avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi` 328 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl0.Tpo $(DEPDIR)/avl0.Po 329 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl0.c' object='avl0.obj' libtool=no @AMDEPBACKSLASH@ 330 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 331 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi` 332 333 avl1.o: avltree/avl1.c 334 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl1.o -MD -MP -MF $(DEPDIR)/avl1.Tpo -c -o avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c 335 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl1.Tpo $(DEPDIR)/avl1.Po 336 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl1.c' object='avl1.o' libtool=no @AMDEPBACKSLASH@ 337 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 338 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c 339 340 avl1.obj: avltree/avl1.c 341 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl1.obj -MD -MP -MF $(DEPDIR)/avl1.Tpo -c -o avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi` 342 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl1.Tpo $(DEPDIR)/avl1.Po 343 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl1.c' object='avl1.obj' libtool=no @AMDEPBACKSLASH@ 344 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 345 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi` 346 347 avl2.o: avltree/avl2.c 348 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl2.o -MD -MP -MF $(DEPDIR)/avl2.Tpo -c -o avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c 349 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl2.Tpo $(DEPDIR)/avl2.Po 350 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl2.c' object='avl2.o' libtool=no @AMDEPBACKSLASH@ 351 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 352 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c 353 354 avl2.obj: avltree/avl2.c 355 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl2.obj -MD -MP -MF $(DEPDIR)/avl2.Tpo -c -o avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi` 356 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl2.Tpo $(DEPDIR)/avl2.Po 357 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl2.c' object='avl2.obj' libtool=no @AMDEPBACKSLASH@ 358 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 359 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi` 360 361 avl3.o: avltree/avl3.c 362 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl3.o -MD -MP -MF $(DEPDIR)/avl3.Tpo -c -o avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c 363 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl3.Tpo $(DEPDIR)/avl3.Po 364 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl3.c' object='avl3.o' libtool=no @AMDEPBACKSLASH@ 365 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 366 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c 367 368 avl3.obj: avltree/avl3.c 369 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl3.obj -MD -MP -MF $(DEPDIR)/avl3.Tpo -c -o avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi` 370 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl3.Tpo $(DEPDIR)/avl3.Po 371 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl3.c' object='avl3.obj' libtool=no @AMDEPBACKSLASH@ 372 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 373 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi` 374 375 avl4.o: avltree/avl4.c 376 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl4.o -MD -MP -MF $(DEPDIR)/avl4.Tpo -c -o avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c 377 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl4.Tpo $(DEPDIR)/avl4.Po 378 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl4.c' object='avl4.o' libtool=no @AMDEPBACKSLASH@ 379 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 380 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c 381 382 avl4.obj: avltree/avl4.c 383 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl4.obj -MD -MP -MF $(DEPDIR)/avl4.Tpo -c -o avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi` 384 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl4.Tpo $(DEPDIR)/avl4.Po 385 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl4.c' object='avl4.obj' libtool=no @AMDEPBACKSLASH@ 386 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 387 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi` 388 389 avl-private.o: avltree/avl-private.c 390 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl-private.o -MD -MP -MF $(DEPDIR)/avl-private.Tpo -c -o avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c 391 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl-private.Tpo $(DEPDIR)/avl-private.Po 392 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl-private.c' object='avl-private.o' libtool=no @AMDEPBACKSLASH@ 393 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 394 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c 395 396 avl-private.obj: avltree/avl-private.c 397 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT avl-private.obj -MD -MP -MF $(DEPDIR)/avl-private.Tpo -c -o avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi` 398 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/avl-private.Tpo $(DEPDIR)/avl-private.Po 399 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl-private.c' object='avl-private.obj' libtool=no @AMDEPBACKSLASH@ 400 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 401 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi` 402 403 vector_int.o: vector/vector_int.c 404 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector_int.o -MD -MP -MF $(DEPDIR)/vector_int.Tpo -c -o vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c 405 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vector_int.Tpo $(DEPDIR)/vector_int.Po 406 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_int.c' object='vector_int.o' libtool=no @AMDEPBACKSLASH@ 407 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 408 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c 409 410 vector_int.obj: vector/vector_int.c 411 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector_int.obj -MD -MP -MF $(DEPDIR)/vector_int.Tpo -c -o vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi` 412 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vector_int.Tpo $(DEPDIR)/vector_int.Po 413 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_int.c' object='vector_int.obj' libtool=no @AMDEPBACKSLASH@ 414 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 415 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi` 416 417 array.o: vector/array.c 418 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT array.o -MD -MP -MF $(DEPDIR)/array.Tpo -c -o array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c 419 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/array.Tpo $(DEPDIR)/array.Po 420 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/array.c' object='array.o' libtool=no @AMDEPBACKSLASH@ 421 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 422 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c 423 424 array.obj: vector/array.c 425 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT array.obj -MD -MP -MF $(DEPDIR)/array.Tpo -c -o array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi` 426 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/array.Tpo $(DEPDIR)/array.Po 427 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/array.c' object='array.obj' libtool=no @AMDEPBACKSLASH@ 428 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 429 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi` 430 431 vector_test.o: vector/vector_test.c 432 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector_test.o -MD -MP -MF $(DEPDIR)/vector_test.Tpo -c -o vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c 433 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vector_test.Tpo $(DEPDIR)/vector_test.Po 434 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_test.c' object='vector_test.o' libtool=no @AMDEPBACKSLASH@ 435 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 436 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c 437 438 vector_test.obj: vector/vector_test.c 439 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT vector_test.obj -MD -MP -MF $(DEPDIR)/vector_test.Tpo -c -o vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi` 440 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/vector_test.Tpo $(DEPDIR)/vector_test.Po 441 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_test.c' object='vector_test.obj' libtool=no @AMDEPBACKSLASH@ 442 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 443 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi` 444 445 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) 446 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 447 unique=`for i in $$list; do \ 448 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 449 done | \ 450 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 451 END { if (nonempty) { for (i in files) print i; }; }'`; \ 452 mkid -fID $$unique 453 tags: TAGS 454 455 TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 456 $(TAGS_FILES) $(LISP) 448 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 449 450 avltree/avl_test-avl_test.o: avltree/avl_test.c 451 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl_test.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl_test.Tpo -c -o avltree/avl_test-avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c 452 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl_test.Tpo avltree/$(DEPDIR)/avl_test-avl_test.Po 453 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl_test.c' object='avltree/avl_test-avl_test.o' libtool=no @AMDEPBACKSLASH@ 454 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 455 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl_test.o `test -f 'avltree/avl_test.c' || echo '$(srcdir)/'`avltree/avl_test.c 456 457 avltree/avl_test-avl_test.obj: avltree/avl_test.c 458 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl_test.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl_test.Tpo -c -o avltree/avl_test-avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi` 459 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl_test.Tpo avltree/$(DEPDIR)/avl_test-avl_test.Po 460 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl_test.c' object='avltree/avl_test-avl_test.obj' libtool=no @AMDEPBACKSLASH@ 461 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 462 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl_test.obj `if test -f 'avltree/avl_test.c'; then $(CYGPATH_W) 'avltree/avl_test.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl_test.c'; fi` 463 464 avltree/avl_test-avl0.o: avltree/avl0.c 465 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl0.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl0.Tpo -c -o avltree/avl_test-avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c 466 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl0.Tpo avltree/$(DEPDIR)/avl_test-avl0.Po 467 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl0.c' object='avltree/avl_test-avl0.o' libtool=no @AMDEPBACKSLASH@ 468 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 469 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl0.o `test -f 'avltree/avl0.c' || echo '$(srcdir)/'`avltree/avl0.c 470 471 avltree/avl_test-avl0.obj: avltree/avl0.c 472 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl0.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl0.Tpo -c -o avltree/avl_test-avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi` 473 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl0.Tpo avltree/$(DEPDIR)/avl_test-avl0.Po 474 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl0.c' object='avltree/avl_test-avl0.obj' libtool=no @AMDEPBACKSLASH@ 475 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 476 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl0.obj `if test -f 'avltree/avl0.c'; then $(CYGPATH_W) 'avltree/avl0.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl0.c'; fi` 477 478 avltree/avl_test-avl1.o: avltree/avl1.c 479 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl1.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl1.Tpo -c -o avltree/avl_test-avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c 480 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl1.Tpo avltree/$(DEPDIR)/avl_test-avl1.Po 481 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl1.c' object='avltree/avl_test-avl1.o' libtool=no @AMDEPBACKSLASH@ 482 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 483 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl1.o `test -f 'avltree/avl1.c' || echo '$(srcdir)/'`avltree/avl1.c 484 485 avltree/avl_test-avl1.obj: avltree/avl1.c 486 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl1.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl1.Tpo -c -o avltree/avl_test-avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi` 487 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl1.Tpo avltree/$(DEPDIR)/avl_test-avl1.Po 488 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl1.c' object='avltree/avl_test-avl1.obj' libtool=no @AMDEPBACKSLASH@ 489 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 490 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl1.obj `if test -f 'avltree/avl1.c'; then $(CYGPATH_W) 'avltree/avl1.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl1.c'; fi` 491 492 avltree/avl_test-avl2.o: avltree/avl2.c 493 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl2.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl2.Tpo -c -o avltree/avl_test-avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c 494 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl2.Tpo avltree/$(DEPDIR)/avl_test-avl2.Po 495 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl2.c' object='avltree/avl_test-avl2.o' libtool=no @AMDEPBACKSLASH@ 496 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 497 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl2.o `test -f 'avltree/avl2.c' || echo '$(srcdir)/'`avltree/avl2.c 498 499 avltree/avl_test-avl2.obj: avltree/avl2.c 500 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl2.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl2.Tpo -c -o avltree/avl_test-avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi` 501 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl2.Tpo avltree/$(DEPDIR)/avl_test-avl2.Po 502 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl2.c' object='avltree/avl_test-avl2.obj' libtool=no @AMDEPBACKSLASH@ 503 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 504 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl2.obj `if test -f 'avltree/avl2.c'; then $(CYGPATH_W) 'avltree/avl2.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl2.c'; fi` 505 506 avltree/avl_test-avl3.o: avltree/avl3.c 507 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl3.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl3.Tpo -c -o avltree/avl_test-avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c 508 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl3.Tpo avltree/$(DEPDIR)/avl_test-avl3.Po 509 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl3.c' object='avltree/avl_test-avl3.o' libtool=no @AMDEPBACKSLASH@ 510 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 511 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl3.o `test -f 'avltree/avl3.c' || echo '$(srcdir)/'`avltree/avl3.c 512 513 avltree/avl_test-avl3.obj: avltree/avl3.c 514 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl3.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl3.Tpo -c -o avltree/avl_test-avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi` 515 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl3.Tpo avltree/$(DEPDIR)/avl_test-avl3.Po 516 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl3.c' object='avltree/avl_test-avl3.obj' libtool=no @AMDEPBACKSLASH@ 517 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 518 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl3.obj `if test -f 'avltree/avl3.c'; then $(CYGPATH_W) 'avltree/avl3.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl3.c'; fi` 519 520 avltree/avl_test-avl4.o: avltree/avl4.c 521 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl4.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl4.Tpo -c -o avltree/avl_test-avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c 522 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl4.Tpo avltree/$(DEPDIR)/avl_test-avl4.Po 523 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl4.c' object='avltree/avl_test-avl4.o' libtool=no @AMDEPBACKSLASH@ 524 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 525 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl4.o `test -f 'avltree/avl4.c' || echo '$(srcdir)/'`avltree/avl4.c 526 527 avltree/avl_test-avl4.obj: avltree/avl4.c 528 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl4.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl4.Tpo -c -o avltree/avl_test-avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi` 529 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl4.Tpo avltree/$(DEPDIR)/avl_test-avl4.Po 530 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl4.c' object='avltree/avl_test-avl4.obj' libtool=no @AMDEPBACKSLASH@ 531 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 532 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl4.obj `if test -f 'avltree/avl4.c'; then $(CYGPATH_W) 'avltree/avl4.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl4.c'; fi` 533 534 avltree/avl_test-avl-private.o: avltree/avl-private.c 535 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl-private.o -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl-private.Tpo -c -o avltree/avl_test-avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c 536 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl-private.Tpo avltree/$(DEPDIR)/avl_test-avl-private.Po 537 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl-private.c' object='avltree/avl_test-avl-private.o' libtool=no @AMDEPBACKSLASH@ 538 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 539 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl-private.o `test -f 'avltree/avl-private.c' || echo '$(srcdir)/'`avltree/avl-private.c 540 541 avltree/avl_test-avl-private.obj: avltree/avl-private.c 542 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -MT avltree/avl_test-avl-private.obj -MD -MP -MF avltree/$(DEPDIR)/avl_test-avl-private.Tpo -c -o avltree/avl_test-avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi` 543 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) avltree/$(DEPDIR)/avl_test-avl-private.Tpo avltree/$(DEPDIR)/avl_test-avl-private.Po 544 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='avltree/avl-private.c' object='avltree/avl_test-avl-private.obj' libtool=no @AMDEPBACKSLASH@ 545 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 546 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(avl_test_CFLAGS) $(CFLAGS) -c -o avltree/avl_test-avl-private.obj `if test -f 'avltree/avl-private.c'; then $(CYGPATH_W) 'avltree/avl-private.c'; else $(CYGPATH_W) '$(srcdir)/avltree/avl-private.c'; fi` 547 548 fstream_test-fstream_test.o: fstream_test.c 549 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -MT fstream_test-fstream_test.o -MD -MP -MF $(DEPDIR)/fstream_test-fstream_test.Tpo -c -o fstream_test-fstream_test.o `test -f 'fstream_test.c' || echo '$(srcdir)/'`fstream_test.c 550 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/fstream_test-fstream_test.Tpo $(DEPDIR)/fstream_test-fstream_test.Po 551 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstream_test.c' object='fstream_test-fstream_test.o' libtool=no @AMDEPBACKSLASH@ 552 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 553 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -c -o fstream_test-fstream_test.o `test -f 'fstream_test.c' || echo '$(srcdir)/'`fstream_test.c 554 555 fstream_test-fstream_test.obj: fstream_test.c 556 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -MT fstream_test-fstream_test.obj -MD -MP -MF $(DEPDIR)/fstream_test-fstream_test.Tpo -c -o fstream_test-fstream_test.obj `if test -f 'fstream_test.c'; then $(CYGPATH_W) 'fstream_test.c'; else $(CYGPATH_W) '$(srcdir)/fstream_test.c'; fi` 557 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/fstream_test-fstream_test.Tpo $(DEPDIR)/fstream_test-fstream_test.Po 558 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstream_test.c' object='fstream_test-fstream_test.obj' libtool=no @AMDEPBACKSLASH@ 559 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 560 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -c -o fstream_test-fstream_test.obj `if test -f 'fstream_test.c'; then $(CYGPATH_W) 'fstream_test.c'; else $(CYGPATH_W) '$(srcdir)/fstream_test.c'; fi` 561 562 vector/vector_test-vector_int.o: vector/vector_int.c 563 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_int.o -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_int.Tpo -c -o vector/vector_test-vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c 564 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_int.Tpo vector/$(DEPDIR)/vector_test-vector_int.Po 565 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_int.c' object='vector/vector_test-vector_int.o' libtool=no @AMDEPBACKSLASH@ 566 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 567 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c 568 569 vector/vector_test-vector_int.obj: vector/vector_int.c 570 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_int.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_int.Tpo -c -o vector/vector_test-vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi` 571 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_int.Tpo vector/$(DEPDIR)/vector_test-vector_int.Po 572 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_int.c' object='vector/vector_test-vector_int.obj' libtool=no @AMDEPBACKSLASH@ 573 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 574 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi` 575 576 vector/vector_test-array.o: vector/array.c 577 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-array.o -MD -MP -MF vector/$(DEPDIR)/vector_test-array.Tpo -c -o vector/vector_test-array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c 578 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-array.Tpo vector/$(DEPDIR)/vector_test-array.Po 579 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/array.c' object='vector/vector_test-array.o' libtool=no @AMDEPBACKSLASH@ 580 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 581 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c 582 583 vector/vector_test-array.obj: vector/array.c 584 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-array.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-array.Tpo -c -o vector/vector_test-array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi` 585 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-array.Tpo vector/$(DEPDIR)/vector_test-array.Po 586 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/array.c' object='vector/vector_test-array.obj' libtool=no @AMDEPBACKSLASH@ 587 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 588 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi` 589 590 vector/vector_test-vector_test.o: vector/vector_test.c 591 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_test.o -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_test.Tpo -c -o vector/vector_test-vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c 592 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_test.Tpo vector/$(DEPDIR)/vector_test-vector_test.Po 593 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_test.c' object='vector/vector_test-vector_test.o' libtool=no @AMDEPBACKSLASH@ 594 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 595 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c 596 597 vector/vector_test-vector_test.obj: vector/vector_test.c 598 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_test.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_test.Tpo -c -o vector/vector_test-vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi` 599 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_test.Tpo vector/$(DEPDIR)/vector_test-vector_test.Po 600 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_test.c' object='vector/vector_test-vector_test.obj' libtool=no @AMDEPBACKSLASH@ 601 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 602 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi` 603 604 ID: $(am__tagged_files) 605 $(am__define_uniq_tagged_files); mkid -fID $$unique 606 tags: tags-am 607 TAGS: tags 608 609 tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 457 610 set x; \ 458 611 here=`pwd`; \ 459 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 460 unique=`for i in $$list; do \ 461 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 462 done | \ 463 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 464 END { if (nonempty) { for (i in files) print i; }; }'`; \ 612 $(am__define_uniq_tagged_files); \ 465 613 shift; \ 466 614 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ … … 474 622 fi; \ 475 623 fi 476 ctags: CTAGS 477 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ 478 $(TAGS_FILES) $(LISP) 479 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ 480 unique=`for i in $$list; do \ 481 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ 482 done | \ 483 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ 484 END { if (nonempty) { for (i in files) print i; }; }'`; \ 624 ctags: ctags-am 625 626 CTAGS: ctags 627 ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) 628 $(am__define_uniq_tagged_files); \ 485 629 test -z "$(CTAGS_ARGS)$$unique" \ 486 630 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ … … 491 635 && $(am__cd) $(top_srcdir) \ 492 636 && gtags -i $(GTAGS_ARGS) "$$here" 637 cscopelist: cscopelist-am 638 639 cscopelist-am: $(am__tagged_files) 640 list='$(am__tagged_files)'; \ 641 case "$(srcdir)" in \ 642 [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ 643 *) sdir=$(subdir)/$(srcdir) ;; \ 644 esac; \ 645 for i in $$list; do \ 646 if test -f "$$i"; then \ 647 echo "$(subdir)/$$i"; \ 648 else \ 649 echo "$$sdir/$$i"; \ 650 fi; \ 651 done >> $(top_builddir)/cscope.files 493 652 494 653 distclean-tags: … … 555 714 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) 556 715 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) 716 -rm -f avltree/$(DEPDIR)/$(am__dirstamp) 717 -rm -f avltree/$(am__dirstamp) 718 -rm -f vector/$(DEPDIR)/$(am__dirstamp) 719 -rm -f vector/$(am__dirstamp) 557 720 558 721 maintainer-clean-generic: … … 564 727 565 728 distclean: distclean-am 566 -rm -rf ./$(DEPDIR) 729 -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) vector/$(DEPDIR) 567 730 -rm -f Makefile 568 731 distclean-am: clean-am distclean-compile distclean-generic \ … … 610 773 611 774 maintainer-clean: maintainer-clean-am 612 -rm -rf ./$(DEPDIR) 775 -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) vector/$(DEPDIR) 613 776 -rm -f Makefile 614 777 maintainer-clean-am: distclean-am maintainer-clean-generic … … 630 793 .MAKE: install-am install-strip 631 794 632 .PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ 633 clean-generic clean-local ctags distclean distclean-compile \ 634 distclean-generic distclean-tags distdir dvi dvi-am html \ 635 html-am info info-am install install-am install-data \ 636 install-data-am install-dvi install-dvi-am install-exec \ 637 install-exec-am install-html install-html-am install-info \ 638 install-info-am install-man install-pdf install-pdf-am \ 639 install-ps install-ps-am install-strip installcheck \ 640 installcheck-am installdirs maintainer-clean \ 641 maintainer-clean-generic mostlyclean mostlyclean-compile \ 642 mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ 643 uninstall-am 795 .PHONY: CTAGS GTAGS TAGS all all-am all-local check check-am clean \ 796 clean-generic clean-local cscopelist-am ctags ctags-am \ 797 distclean distclean-compile distclean-generic distclean-tags \ 798 distdir dvi dvi-am html html-am info info-am install \ 799 install-am install-data install-data-am install-dvi \ 800 install-dvi-am install-exec install-exec-am install-html \ 801 install-html-am install-info install-info-am install-man \ 802 install-pdf install-pdf-am install-ps install-ps-am \ 803 install-strip installcheck installcheck-am installdirs \ 804 maintainer-clean maintainer-clean-generic mostlyclean \ 805 mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ 806 tags tags-am uninstall uninstall-am 807 808 .PRECIOUS: Makefile 644 809 645 810 … … 665 830 666 831 % : %.c @CFA_BINDIR@/@CFA_NAME@ 667 ${CC} ${ CFLAGS} ${<} -o ${@}832 ${CC} ${AM_CFLAGS} ${CFLAGS} ${<} -o ${@} 668 833 669 834 dtor-early-exit-ERR1: dtor-early-exit.c @CFA_BINDIR@/@CFA_NAME@ 670 ${CC} ${ CFLAGS} -DERR1 ${<} -o ${@}835 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@} 671 836 672 837 dtor-early-exit-ERR2: dtor-early-exit.c @CFA_BINDIR@/@CFA_NAME@ 673 ${CC} ${ CFLAGS} -DERR2 ${<} -o ${@}838 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR2 ${<} -o ${@} 674 839 675 840 declarationSpecifier: declarationSpecifier.c @CFA_BINDIR@/@CFA_NAME@ 676 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}841 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 677 842 678 843 gccExtensions : gccExtensions.c @CFA_BINDIR@/@CFA_NAME@ 679 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}844 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 680 845 681 846 extension : extension.c @CFA_BINDIR@/@CFA_NAME@ 682 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}847 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 683 848 684 849 attributes : attributes.c @CFA_BINDIR@/@CFA_NAME@ 685 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}850 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 686 851 687 852 KRfunctions : KRfunctions.c @CFA_BINDIR@/@CFA_NAME@ 688 ${CC} ${ CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@}853 ${CC} ${AM_CFLAGS} ${CFLAGS} -CFA -XCFA -p -XCFA -L ${<} -o ${@} 689 854 690 855 gmp : gmp.c @CFA_BINDIR@/@CFA_NAME@ 691 ${CC} ${ CFLAGS} -lgmp ${<} -o ${@}856 ${CC} ${AM_CFLAGS} ${CFLAGS} -lgmp ${<} -o ${@} 692 857 693 858 memberCtors-ERR1: memberCtors.c @CFA_BINDIR@/@CFA_NAME@ 694 ${CC} ${ CFLAGS} -DERR1 ${<} -o ${@}859 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@} 695 860 696 861 completeTypeError : completeTypeError.c @CFA_BINDIR@/@CFA_NAME@ 697 ${CC} ${ CFLAGS} -DERR1 ${<} -o ${@}862 ${CC} ${AM_CFLAGS} ${CFLAGS} -DERR1 ${<} -o ${@} 698 863 699 864 # Tell versions [3.59,3.63) of GNU make to not export all variables. -
src/tests/gmp.c
rfea3faa rb826e6b 10 10 // Created On : Tue Apr 19 08:55:51 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed May 24 22:05:38201713 // Update Count : 54 012 // Last Modified On : Thu Jul 13 16:35:01 2017 13 // Update Count : 541 14 14 // 15 15 … … 95 95 // Local Variables: // 96 96 // tab-width: 4 // 97 // compile-command: "cfa gmp.c -l gmp" //97 // compile-command: "cfa gmp.c -lgmp" // 98 98 // End: // -
src/tests/io.c
rfea3faa rb826e6b 10 10 // Created On : Wed Mar 2 16:56:02 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Ju n 8 09:52:10201713 // Update Count : 5112 // Last Modified On : Thu Jul 6 23:26:12 2017 13 // Update Count : 78 14 14 // 15 15 … … 42 42 sout | endl; 43 43 44 sout | "opening delimiters" | endl; 44 45 sout 45 // opening delimiters46 46 | "x (" | 1 47 47 | "x [" | 2 … … 54 54 | "x ¿" | 9 55 55 | "x «" | 10 56 | endl; 56 | endl | endl; 57 58 sout | "closing delimiters" | endl; 57 59 sout 58 // closing delimiters59 60 | 1 | ", x" 60 61 | 2 | ". x" … … 68 69 | 10 | "] x" 69 70 | 11 | "} x" 70 | endl; 71 | endl | endl; 72 73 sout | "opening/closing delimiters" | endl; 71 74 sout 72 // opening-closing delimiters73 75 | "x`" | 1 | "`x'" | 2 74 76 | "'x\"" | 3 | "\"x:" | 4 … … 76 78 | "\tx\f" | 7 | "\fx\v" | 8 77 79 | "\vx\n" | 9 | "\nx\r" | 10 78 | "\rx" | 79 endl; 80 | "\rx" 81 | endl | endl; 82 83 sout | "override opening/closing delimiters" | endl; 80 84 sout | "x ( " | 1 | " ) x" | 2 | " , x" | 3 | " :x: " | 4 | endl; 85 sout | endl; 81 86 82 87 ifstream in; // create / open file 83 88 open( &in, "io.data", "r" ); 84 89 90 sout | "input bacis types" | endl; 85 91 &in | &c // character 86 92 | &si | &usi | &i | &ui | &li | &uli | &lli | &ulli // integral … … 88 94 | &fc | &dc | &ldc // floating-point complex 89 95 | cstr( s1 ) | cstr( s2, size ); // C string, length unchecked and checked 96 sout | endl; 90 97 98 sout | "output basic types" | endl; 91 99 sout | c | ' ' | endl // character 92 100 | si | usi | i | ui | li | uli | lli | ulli | endl // integral … … 94 102 | fc | dc | ldc | endl; // complex 95 103 sout | endl; 96 sout | f | "" | d | "" | ld | endl // floating point without separator 97 | sepDisable | fc | dc | ldc | sepEnable | endl // complex without separator98 | sepOn | s1 | sepOff | s2 | endl // local separator removal99 | s1 | "" | s2 | endl; // C string without separator104 105 sout | "tuples" | endl; 106 [int, [ int, int ] ] t1 = [ 1, [ 2, 3 ] ], t2 = [ 4, [ 5, 6 ] ]; 107 sout | t1 | t2 | endl; // print tuple 100 108 sout | endl; 101 109 110 sout | "toggle separator" | endl; 111 sout | f | "" | d | "" | ld | endl // floating point without separator 112 | sepDisable | fc | dc | ldc | endl // complex without separator 113 | fc | sepOn | dc | ldc | endl // local separator add 114 | sepEnable | fc | dc | ldc | endl // complex with separator 115 | fc | sepOff | dc | ldc | endl // local separator removal 116 | s1 | sepOff | s2 | endl // local separator removal 117 | s1 | "" | s2 | endl; // local separator removal 118 sout | endl; 119 120 sout | "change separator" | endl; 121 sout | "from \"" | sep | "\""; 102 122 sepSet( sout, ", $" ); // change separator, maximum of 15 characters 123 sout | " to \"" | sep | "\"" | endl; 103 124 sout | f | d | ld | endl 104 125 | fc | dc | ldc | endl 105 | s1 | s2 | endl; 126 | s1 | s2 | endl 127 | t1 | t2 | endl; // print tuple 128 sout | endl; 129 sout | "from \"" | sep | "\" "; 130 sepSet( sout, " " ); // restore separator 131 sout | "to \"" | sep | "\"" | endl; 132 sout | f | d | ld | endl 133 | fc | dc | ldc | endl 134 | s1 | s2 | endl 135 | t1 | t2 | endl; // print tuple 106 136 sout | endl; 107 137 108 [int, int] t1 = [1, 2], t2 = [3, 4]; 109 sout | t1 | t2 | endl; // print tuple 138 sout | "check sepOn/sepOff" | endl; 139 sout | sepOn | 1 | 2 | 3 | sepOn | endl; // no separator at start/end of line 140 sout | 1 | sepOff | 2 | 3 | endl; // locally turn off implicit separator 141 sout | sepOn | sepOn | 1 | 2 | 3 | sepOn | sepOff | sepOn | '\n'; // no separator at start/end of line 142 sout | 1 | 2 | 3 | "\n\n" | sepOn; // no separator at start of next line 143 sout | 1 | 2 | 3 | endl; 144 sout | endl; 110 145 111 sepSet( sout, " " ); 112 sepSet( sout, ", $" ); // set separator from " " to ", $" 113 sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl; 114 sepSet( sout, " " ); // reset separator to " " 115 sout | 1 | 2 | 3 | " \"" | sepGet( sout ) | "\"" | endl; 116 117 sout | sepOn | 1 | 2 | 3 | sepOn | endl; // separator at start of line 118 sout | 1 | sepOff | 2 | 3 | endl; // locally turn off implicit separator 119 146 sout | "check enable/disable" | endl; 120 147 sout | sepDisable | 1 | 2 | 3 | endl; // globally turn off implicit separation 121 148 sout | 1 | sepOn | 2 | 3 | endl; // locally turn on implicit separator 122 sout | sepEnable | 1 | 2 | 3 | endl; // globally turn on implicit separation 149 sout | sepEnable | 1 | 2 | 3 | endl | sepDisable; // globally turn on/off implicit separation 150 sout | 1 | 2 | 3 | endl | sepEnable; // globally turn on implicit separation 151 sout | 1 | 2 | 3 | sepOn | sepDisable | endl; // ignore seperate at end of line 152 sout | 1 | 2 | 3 | sepOn | sepEnable | endl; // separator at end of line 153 sout | 1 | 2 | 3 | endl; 154 sout | endl; 155 156 // sout | fmt( d, "%8.3f" ) || endl; 157 // sout | endl; 123 158 124 159 sepSetTuple( sout, " " ); // set tuple separator from ", " to " " 125 sout | t1 | t2 | " \"" | sep GetTuple( sout )| "\"" | endl;160 sout | t1 | t2 | " \"" | sep | "\"" | endl; 126 161 sepSetTuple( sout, ", " ); // reset tuple separator to ", " 127 sout | t1 | t2 | " \"" | sepGetTuple( sout ) | "\"" | endl; 128 162 sout | t1 | t2 | " \"" | sep | "\"" | endl; 129 163 sout | t1 | t2 | endl; // print tuple 164 sout | endl; 130 165 131 166 [int, int, const char *, double] t3 = { 3, 4, "a", 7.2 }; -
src/tests/preempt_longrun/Makefile.am
rfea3faa rb826e6b 10 10 ## Author : Thierry Delisle 11 11 ## Created On : Fri Jun 16 10:57:34 2017 12 ## Last Modified By : 13 ## Last Modified On : 12 ## Last Modified By : 13 ## Last Modified On : 14 14 ## Update Count : 0 15 15 ############################################################################### 16 16 17 17 repeats=10 18 max_time=10 19 N=10ul 20 preempt=10_000ul 18 max_time=600 19 preempt=1_000ul 21 20 22 21 REPEAT = ${abs_top_srcdir}/tools/repeat -s 23 22 24 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -D N=${N} -DPREEMPTION_RATE=${preempt}23 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DPREEMPTION_RATE=${preempt} 25 24 CFLAGS = ${BUILD_FLAGS} 26 25 CC = @CFA_BINDIR@/@CFA_NAME@ 27 26 28 TESTS = barge block create disjoint processor stack wait yield27 TESTS = barge block create disjoint enter enter3 processor stack wait yield 29 28 30 29 .INTERMEDIATE: ${TESTS} 31 30 32 31 all-local: ${TESTS:=.run} 32 33 clean-local: 34 rm -f ${TESTS} 33 35 34 36 % : %.c ${CC} -
src/tests/preempt_longrun/Makefile.in
rfea3faa rb826e6b 1 # Makefile.in generated by automake 1.1 1.3from Makefile.am.1 # Makefile.in generated by automake 1.15 from Makefile.am. 2 2 # @configure_input@ 3 3 4 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 5 # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software 6 # Foundation, Inc. 4 # Copyright (C) 1994-2014 Free Software Foundation, Inc. 5 7 6 # This Makefile.in is free software; the Free Software Foundation 8 7 # gives unlimited permission to copy and/or distribute it, … … 19 18 ############################################################################### 20 19 VPATH = @srcdir@ 20 am__is_gnu_make = { \ 21 if test -z '$(MAKELEVEL)'; then \ 22 false; \ 23 elif test -n '$(MAKE_HOST)'; then \ 24 true; \ 25 elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ 26 true; \ 27 else \ 28 false; \ 29 fi; \ 30 } 31 am__make_running_with_option = \ 32 case $${target_option-} in \ 33 ?) ;; \ 34 *) echo "am__make_running_with_option: internal error: invalid" \ 35 "target option '$${target_option-}' specified" >&2; \ 36 exit 1;; \ 37 esac; \ 38 has_opt=no; \ 39 sane_makeflags=$$MAKEFLAGS; \ 40 if $(am__is_gnu_make); then \ 41 sane_makeflags=$$MFLAGS; \ 42 else \ 43 case $$MAKEFLAGS in \ 44 *\\[\ \ ]*) \ 45 bs=\\; \ 46 sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ 47 | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ 48 esac; \ 49 fi; \ 50 skip_next=no; \ 51 strip_trailopt () \ 52 { \ 53 flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ 54 }; \ 55 for flg in $$sane_makeflags; do \ 56 test $$skip_next = yes && { skip_next=no; continue; }; \ 57 case $$flg in \ 58 *=*|--*) continue;; \ 59 -*I) strip_trailopt 'I'; skip_next=yes;; \ 60 -*I?*) strip_trailopt 'I';; \ 61 -*O) strip_trailopt 'O'; skip_next=yes;; \ 62 -*O?*) strip_trailopt 'O';; \ 63 -*l) strip_trailopt 'l'; skip_next=yes;; \ 64 -*l?*) strip_trailopt 'l';; \ 65 -[dEDm]) skip_next=yes;; \ 66 -[JT]) skip_next=yes;; \ 67 esac; \ 68 case $$flg in \ 69 *$$target_option*) has_opt=yes; break;; \ 70 esac; \ 71 done; \ 72 test $$has_opt = yes 73 am__make_dryrun = (target_option=n; $(am__make_running_with_option)) 74 am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) 21 75 pkgdatadir = $(datadir)/@PACKAGE@ 22 76 pkgincludedir = $(includedir)/@PACKAGE@ … … 38 92 host_triplet = @host@ 39 93 subdir = src/tests/preempt_longrun 40 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in41 94 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 42 95 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 43 96 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ 44 97 $(ACLOCAL_M4) 98 DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) 45 99 mkinstalldirs = $(install_sh) -d 46 100 CONFIG_HEADER = $(top_builddir)/config.h 47 101 CONFIG_CLEAN_FILES = 48 102 CONFIG_CLEAN_VPATH_FILES = 103 AM_V_P = $(am__v_P_@AM_V@) 104 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) 105 am__v_P_0 = false 106 am__v_P_1 = : 49 107 AM_V_GEN = $(am__v_GEN_@AM_V@) 50 108 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) 51 am__v_GEN_0 = @echo " GEN " $@; 109 am__v_GEN_0 = @echo " GEN " $@; 110 am__v_GEN_1 = 52 111 AM_V_at = $(am__v_at_@AM_V@) 53 112 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) 54 113 am__v_at_0 = @ 114 am__v_at_1 = 55 115 SOURCES = 56 116 DIST_SOURCES = 57 am__tty_colors = \ 58 red=; grn=; lgn=; blu=; std= 117 am__can_run_installinfo = \ 118 case $$AM_UPDATE_INFO_DIR in \ 119 n|no|NO) false;; \ 120 *) (install-info --version) >/dev/null 2>&1;; \ 121 esac 122 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) 123 am__tty_colors_dummy = \ 124 mgn= red= grn= lgn= blu= brg= std=; \ 125 am__color_tests=no 126 am__tty_colors = { \ 127 $(am__tty_colors_dummy); \ 128 if test "X$(AM_COLOR_TESTS)" = Xno; then \ 129 am__color_tests=no; \ 130 elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ 131 am__color_tests=yes; \ 132 elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ 133 am__color_tests=yes; \ 134 fi; \ 135 if test $$am__color_tests = yes; then \ 136 red='[0;31m'; \ 137 grn='[0;32m'; \ 138 lgn='[1;32m'; \ 139 blu='[1;34m'; \ 140 mgn='[0;35m'; \ 141 brg='[1m'; \ 142 std='[m'; \ 143 fi; \ 144 } 145 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; 146 am__vpath_adj = case $$p in \ 147 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ 148 *) f=$$p;; \ 149 esac; 150 am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; 151 am__install_max = 40 152 am__nobase_strip_setup = \ 153 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` 154 am__nobase_strip = \ 155 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" 156 am__nobase_list = $(am__nobase_strip_setup); \ 157 for p in $$list; do echo "$$p $$p"; done | \ 158 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ 159 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ 160 if (++n[$$2] == $(am__install_max)) \ 161 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ 162 END { for (dir in files) print dir, files[dir] }' 163 am__base_list = \ 164 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ 165 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' 166 am__uninstall_files_from_dir = { \ 167 test -z "$$files" \ 168 || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ 169 || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ 170 $(am__cd) "$$dir" && rm -f $$files; }; \ 171 } 172 am__recheck_rx = ^[ ]*:recheck:[ ]* 173 am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* 174 am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* 175 # A command that, given a newline-separated list of test names on the 176 # standard input, print the name of the tests that are to be re-run 177 # upon "make recheck". 178 am__list_recheck_tests = $(AWK) '{ \ 179 recheck = 1; \ 180 while ((rc = (getline line < ($$0 ".trs"))) != 0) \ 181 { \ 182 if (rc < 0) \ 183 { \ 184 if ((getline line2 < ($$0 ".log")) < 0) \ 185 recheck = 0; \ 186 break; \ 187 } \ 188 else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ 189 { \ 190 recheck = 0; \ 191 break; \ 192 } \ 193 else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ 194 { \ 195 break; \ 196 } \ 197 }; \ 198 if (recheck) \ 199 print $$0; \ 200 close ($$0 ".trs"); \ 201 close ($$0 ".log"); \ 202 }' 203 # A command that, given a newline-separated list of test names on the 204 # standard input, create the global log from their .trs and .log files. 205 am__create_global_log = $(AWK) ' \ 206 function fatal(msg) \ 207 { \ 208 print "fatal: making $@: " msg | "cat >&2"; \ 209 exit 1; \ 210 } \ 211 function rst_section(header) \ 212 { \ 213 print header; \ 214 len = length(header); \ 215 for (i = 1; i <= len; i = i + 1) \ 216 printf "="; \ 217 printf "\n\n"; \ 218 } \ 219 { \ 220 copy_in_global_log = 1; \ 221 global_test_result = "RUN"; \ 222 while ((rc = (getline line < ($$0 ".trs"))) != 0) \ 223 { \ 224 if (rc < 0) \ 225 fatal("failed to read from " $$0 ".trs"); \ 226 if (line ~ /$(am__global_test_result_rx)/) \ 227 { \ 228 sub("$(am__global_test_result_rx)", "", line); \ 229 sub("[ ]*$$", "", line); \ 230 global_test_result = line; \ 231 } \ 232 else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ 233 copy_in_global_log = 0; \ 234 }; \ 235 if (copy_in_global_log) \ 236 { \ 237 rst_section(global_test_result ": " $$0); \ 238 while ((rc = (getline line < ($$0 ".log"))) != 0) \ 239 { \ 240 if (rc < 0) \ 241 fatal("failed to read from " $$0 ".log"); \ 242 print line; \ 243 }; \ 244 printf "\n"; \ 245 }; \ 246 close ($$0 ".trs"); \ 247 close ($$0 ".log"); \ 248 }' 249 # Restructured Text title. 250 am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } 251 # Solaris 10 'make', and several other traditional 'make' implementations, 252 # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it 253 # by disabling -e (using the XSI extension "set +e") if it's set. 254 am__sh_e_setup = case $$- in *e*) set +e;; esac 255 # Default flags passed to test drivers. 256 am__common_driver_flags = \ 257 --color-tests "$$am__color_tests" \ 258 --enable-hard-errors "$$am__enable_hard_errors" \ 259 --expect-failure "$$am__expect_failure" 260 # To be inserted before the command running the test. Creates the 261 # directory for the log if needed. Stores in $dir the directory 262 # containing $f, in $tst the test, in $log the log. Executes the 263 # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and 264 # passes TESTS_ENVIRONMENT. Set up options for the wrapper that 265 # will run the test scripts (or their associated LOG_COMPILER, if 266 # thy have one). 267 am__check_pre = \ 268 $(am__sh_e_setup); \ 269 $(am__vpath_adj_setup) $(am__vpath_adj) \ 270 $(am__tty_colors); \ 271 srcdir=$(srcdir); export srcdir; \ 272 case "$@" in \ 273 */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ 274 *) am__odir=.;; \ 275 esac; \ 276 test "x$$am__odir" = x"." || test -d "$$am__odir" \ 277 || $(MKDIR_P) "$$am__odir" || exit $$?; \ 278 if test -f "./$$f"; then dir=./; \ 279 elif test -f "$$f"; then dir=; \ 280 else dir="$(srcdir)/"; fi; \ 281 tst=$$dir$$f; log='$@'; \ 282 if test -n '$(DISABLE_HARD_ERRORS)'; then \ 283 am__enable_hard_errors=no; \ 284 else \ 285 am__enable_hard_errors=yes; \ 286 fi; \ 287 case " $(XFAIL_TESTS) " in \ 288 *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ 289 am__expect_failure=yes;; \ 290 *) \ 291 am__expect_failure=no;; \ 292 esac; \ 293 $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) 294 # A shell command to get the names of the tests scripts with any registered 295 # extension removed (i.e., equivalently, the names of the test logs, with 296 # the '.log' extension removed). The result is saved in the shell variable 297 # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, 298 # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", 299 # since that might cause problem with VPATH rewrites for suffix-less tests. 300 # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. 301 am__set_TESTS_bases = \ 302 bases='$(TEST_LOGS)'; \ 303 bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ 304 bases=`echo $$bases` 305 RECHECK_LOGS = $(TEST_LOGS) 306 AM_RECURSIVE_TARGETS = check recheck 307 TEST_SUITE_LOG = test-suite.log 308 TEST_EXTENSIONS = @EXEEXT@ .test 309 LOG_DRIVER = $(SHELL) $(top_srcdir)/automake/test-driver 310 LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) 311 am__set_b = \ 312 case '$@' in \ 313 */*) \ 314 case '$*' in \ 315 */*) b='$*';; \ 316 *) b=`echo '$@' | sed 's/\.log$$//'`; \ 317 esac;; \ 318 *) \ 319 b='$*';; \ 320 esac 321 am__test_logs1 = $(TESTS:=.log) 322 am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) 323 TEST_LOGS = $(am__test_logs2:.test.log=.log) 324 TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/automake/test-driver 325 TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ 326 $(TEST_LOG_FLAGS) 327 am__DIST_COMMON = $(srcdir)/Makefile.in \ 328 $(top_srcdir)/automake/test-driver 59 329 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) 60 330 ACLOCAL = @ACLOCAL@ … … 169 439 program_transform_name = @program_transform_name@ 170 440 psdir = @psdir@ 441 runstatedir = @runstatedir@ 171 442 sbindir = @sbindir@ 172 443 sharedstatedir = @sharedstatedir@ … … 178 449 top_srcdir = @top_srcdir@ 179 450 repeats = 10 180 max_time = 10 181 N = 10ul 182 preempt = 10_000ul 451 max_time = 600 452 preempt = 1_000ul 183 453 REPEAT = ${abs_top_srcdir}/tools/repeat -s 184 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -D N=${N} -DPREEMPTION_RATE=${preempt}185 TESTS = barge block create disjoint processor stack wait yield454 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DPREEMPTION_RATE=${preempt} 455 TESTS = barge block create disjoint enter enter3 processor stack wait yield 186 456 all: all-am 187 457 188 458 .SUFFIXES: 459 .SUFFIXES: .log .test .test$(EXEEXT) .trs 189 460 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) 190 461 @for dep in $?; do \ … … 199 470 $(am__cd) $(top_srcdir) && \ 200 471 $(AUTOMAKE) --foreign src/tests/preempt_longrun/Makefile 201 .PRECIOUS: Makefile202 472 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status 203 473 @case '$?' in \ … … 217 487 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh 218 488 $(am__aclocal_m4_deps): 219 tags: TAGS 220 TAGS: 221 222 ctags: CTAGS 223 CTAGS: 224 225 226 check-TESTS: $(TESTS) 227 @failed=0; all=0; xfail=0; xpass=0; skip=0; \ 228 srcdir=$(srcdir); export srcdir; \ 229 list=' $(TESTS) '; \ 230 $(am__tty_colors); \ 231 if test -n "$$list"; then \ 232 for tst in $$list; do \ 233 if test -f ./$$tst; then dir=./; \ 234 elif test -f $$tst; then dir=; \ 235 else dir="$(srcdir)/"; fi; \ 236 if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ 237 all=`expr $$all + 1`; \ 238 case " $(XFAIL_TESTS) " in \ 239 *[\ \ ]$$tst[\ \ ]*) \ 240 xpass=`expr $$xpass + 1`; \ 241 failed=`expr $$failed + 1`; \ 242 col=$$red; res=XPASS; \ 243 ;; \ 244 *) \ 245 col=$$grn; res=PASS; \ 246 ;; \ 247 esac; \ 248 elif test $$? -ne 77; then \ 249 all=`expr $$all + 1`; \ 250 case " $(XFAIL_TESTS) " in \ 251 *[\ \ ]$$tst[\ \ ]*) \ 252 xfail=`expr $$xfail + 1`; \ 253 col=$$lgn; res=XFAIL; \ 254 ;; \ 255 *) \ 256 failed=`expr $$failed + 1`; \ 257 col=$$red; res=FAIL; \ 258 ;; \ 259 esac; \ 489 tags TAGS: 490 491 ctags CTAGS: 492 493 cscope cscopelist: 494 495 496 # Recover from deleted '.trs' file; this should ensure that 497 # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create 498 # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells 499 # to avoid problems with "make -n". 500 .log.trs: 501 rm -f $< $@ 502 $(MAKE) $(AM_MAKEFLAGS) $< 503 504 # Leading 'am--fnord' is there to ensure the list of targets does not 505 # expand to empty, as could happen e.g. with make check TESTS=''. 506 am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) 507 am--force-recheck: 508 @: 509 510 $(TEST_SUITE_LOG): $(TEST_LOGS) 511 @$(am__set_TESTS_bases); \ 512 am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ 513 redo_bases=`for i in $$bases; do \ 514 am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ 515 done`; \ 516 if test -n "$$redo_bases"; then \ 517 redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ 518 redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ 519 if $(am__make_dryrun); then :; else \ 520 rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ 521 fi; \ 522 fi; \ 523 if test -n "$$am__remaking_logs"; then \ 524 echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ 525 "recursion detected" >&2; \ 526 elif test -n "$$redo_logs"; then \ 527 am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ 528 fi; \ 529 if $(am__make_dryrun); then :; else \ 530 st=0; \ 531 errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ 532 for i in $$redo_bases; do \ 533 test -f $$i.trs && test -r $$i.trs \ 534 || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ 535 test -f $$i.log && test -r $$i.log \ 536 || { echo "$$errmsg $$i.log" >&2; st=1; }; \ 537 done; \ 538 test $$st -eq 0 || exit 1; \ 539 fi 540 @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ 541 ws='[ ]'; \ 542 results=`for b in $$bases; do echo $$b.trs; done`; \ 543 test -n "$$results" || results=/dev/null; \ 544 all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ 545 pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ 546 fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ 547 skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ 548 xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ 549 xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ 550 error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ 551 if test `expr $$fail + $$xpass + $$error` -eq 0; then \ 552 success=true; \ 553 else \ 554 success=false; \ 555 fi; \ 556 br='==================='; br=$$br$$br$$br$$br; \ 557 result_count () \ 558 { \ 559 if test x"$$1" = x"--maybe-color"; then \ 560 maybe_colorize=yes; \ 561 elif test x"$$1" = x"--no-color"; then \ 562 maybe_colorize=no; \ 260 563 else \ 261 skip=`expr $$skip + 1`; \ 262 col=$$blu; res=SKIP; \ 564 echo "$@: invalid 'result_count' usage" >&2; exit 4; \ 263 565 fi; \ 264 echo "$${col}$$res$${std}: $$tst"; \ 265 done; \ 266 if test "$$all" -eq 1; then \ 267 tests="test"; \ 268 All=""; \ 269 else \ 270 tests="tests"; \ 271 All="All "; \ 272 fi; \ 273 if test "$$failed" -eq 0; then \ 274 if test "$$xfail" -eq 0; then \ 275 banner="$$All$$all $$tests passed"; \ 566 shift; \ 567 desc=$$1 count=$$2; \ 568 if test $$maybe_colorize = yes && test $$count -gt 0; then \ 569 color_start=$$3 color_end=$$std; \ 276 570 else \ 277 if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ 278 banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ 571 color_start= color_end=; \ 279 572 fi; \ 280 else \ 281 if test "$$xpass" -eq 0; then \ 282 banner="$$failed of $$all $$tests failed"; \ 283 else \ 284 if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ 285 banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ 286 fi; \ 287 fi; \ 288 dashes="$$banner"; \ 289 skipped=""; \ 290 if test "$$skip" -ne 0; then \ 291 if test "$$skip" -eq 1; then \ 292 skipped="($$skip test was not run)"; \ 293 else \ 294 skipped="($$skip tests were not run)"; \ 295 fi; \ 296 test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ 297 dashes="$$skipped"; \ 298 fi; \ 299 report=""; \ 300 if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ 301 report="Please report to $(PACKAGE_BUGREPORT)"; \ 302 test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ 303 dashes="$$report"; \ 304 fi; \ 305 dashes=`echo "$$dashes" | sed s/./=/g`; \ 306 if test "$$failed" -eq 0; then \ 307 col="$$grn"; \ 308 else \ 309 col="$$red"; \ 310 fi; \ 311 echo "$${col}$$dashes$${std}"; \ 312 echo "$${col}$$banner$${std}"; \ 313 test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ 314 test -z "$$report" || echo "$${col}$$report$${std}"; \ 315 echo "$${col}$$dashes$${std}"; \ 316 test "$$failed" -eq 0; \ 317 else :; fi 573 echo "$${color_start}# $$desc $$count$${color_end}"; \ 574 }; \ 575 create_testsuite_report () \ 576 { \ 577 result_count $$1 "TOTAL:" $$all "$$brg"; \ 578 result_count $$1 "PASS: " $$pass "$$grn"; \ 579 result_count $$1 "SKIP: " $$skip "$$blu"; \ 580 result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ 581 result_count $$1 "FAIL: " $$fail "$$red"; \ 582 result_count $$1 "XPASS:" $$xpass "$$red"; \ 583 result_count $$1 "ERROR:" $$error "$$mgn"; \ 584 }; \ 585 { \ 586 echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ 587 $(am__rst_title); \ 588 create_testsuite_report --no-color; \ 589 echo; \ 590 echo ".. contents:: :depth: 2"; \ 591 echo; \ 592 for b in $$bases; do echo $$b; done \ 593 | $(am__create_global_log); \ 594 } >$(TEST_SUITE_LOG).tmp || exit 1; \ 595 mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ 596 if $$success; then \ 597 col="$$grn"; \ 598 else \ 599 col="$$red"; \ 600 test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ 601 fi; \ 602 echo "$${col}$$br$${std}"; \ 603 echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ 604 echo "$${col}$$br$${std}"; \ 605 create_testsuite_report --maybe-color; \ 606 echo "$$col$$br$$std"; \ 607 if $$success; then :; else \ 608 echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ 609 if test -n "$(PACKAGE_BUGREPORT)"; then \ 610 echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ 611 fi; \ 612 echo "$$col$$br$$std"; \ 613 fi; \ 614 $$success || exit 1 615 616 check-TESTS: 617 @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list 618 @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list 619 @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 620 @set +e; $(am__set_TESTS_bases); \ 621 log_list=`for i in $$bases; do echo $$i.log; done`; \ 622 trs_list=`for i in $$bases; do echo $$i.trs; done`; \ 623 log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ 624 $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ 625 exit $$?; 626 recheck: all 627 @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 628 @set +e; $(am__set_TESTS_bases); \ 629 bases=`for i in $$bases; do echo $$i; done \ 630 | $(am__list_recheck_tests)` || exit 1; \ 631 log_list=`for i in $$bases; do echo $$i.log; done`; \ 632 log_list=`echo $$log_list`; \ 633 $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ 634 am__force_recheck=am--force-recheck \ 635 TEST_LOGS="$$log_list"; \ 636 exit $$? 637 barge.log: barge 638 @p='barge'; \ 639 b='barge'; \ 640 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 641 --log-file $$b.log --trs-file $$b.trs \ 642 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 643 "$$tst" $(AM_TESTS_FD_REDIRECT) 644 block.log: block 645 @p='block'; \ 646 b='block'; \ 647 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 648 --log-file $$b.log --trs-file $$b.trs \ 649 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 650 "$$tst" $(AM_TESTS_FD_REDIRECT) 651 create.log: create 652 @p='create'; \ 653 b='create'; \ 654 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 655 --log-file $$b.log --trs-file $$b.trs \ 656 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 657 "$$tst" $(AM_TESTS_FD_REDIRECT) 658 disjoint.log: disjoint 659 @p='disjoint'; \ 660 b='disjoint'; \ 661 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 662 --log-file $$b.log --trs-file $$b.trs \ 663 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 664 "$$tst" $(AM_TESTS_FD_REDIRECT) 665 enter.log: enter 666 @p='enter'; \ 667 b='enter'; \ 668 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 669 --log-file $$b.log --trs-file $$b.trs \ 670 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 671 "$$tst" $(AM_TESTS_FD_REDIRECT) 672 enter3.log: enter3 673 @p='enter3'; \ 674 b='enter3'; \ 675 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 676 --log-file $$b.log --trs-file $$b.trs \ 677 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 678 "$$tst" $(AM_TESTS_FD_REDIRECT) 679 processor.log: processor 680 @p='processor'; \ 681 b='processor'; \ 682 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 683 --log-file $$b.log --trs-file $$b.trs \ 684 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 685 "$$tst" $(AM_TESTS_FD_REDIRECT) 686 stack.log: stack 687 @p='stack'; \ 688 b='stack'; \ 689 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 690 --log-file $$b.log --trs-file $$b.trs \ 691 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 692 "$$tst" $(AM_TESTS_FD_REDIRECT) 693 wait.log: wait 694 @p='wait'; \ 695 b='wait'; \ 696 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 697 --log-file $$b.log --trs-file $$b.trs \ 698 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 699 "$$tst" $(AM_TESTS_FD_REDIRECT) 700 yield.log: yield 701 @p='yield'; \ 702 b='yield'; \ 703 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ 704 --log-file $$b.log --trs-file $$b.trs \ 705 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ 706 "$$tst" $(AM_TESTS_FD_REDIRECT) 707 .test.log: 708 @p='$<'; \ 709 $(am__set_b); \ 710 $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ 711 --log-file $$b.log --trs-file $$b.trs \ 712 $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ 713 "$$tst" $(AM_TESTS_FD_REDIRECT) 714 @am__EXEEXT_TRUE@.test$(EXEEXT).log: 715 @am__EXEEXT_TRUE@ @p='$<'; \ 716 @am__EXEEXT_TRUE@ $(am__set_b); \ 717 @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ 718 @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ 719 @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ 720 @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 318 721 319 722 distdir: $(DISTFILES) … … 372 775 fi 373 776 mostlyclean-generic: 777 -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) 778 -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) 779 -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 374 780 375 781 clean-generic: … … 384 790 clean: clean-am 385 791 386 clean-am: clean-generic mostlyclean-am792 clean-am: clean-generic clean-local mostlyclean-am 387 793 388 794 distclean: distclean-am … … 451 857 452 858 .PHONY: all all-am all-local check check-TESTS check-am clean \ 453 clean-generic distclean distclean-generic distdir dvi dvi-am \ 454 html html-am info info-am install install-am install-data \ 455 install-data-am install-dvi install-dvi-am install-exec \ 456 install-exec-am install-html install-html-am install-info \ 457 install-info-am install-man install-pdf install-pdf-am \ 458 install-ps install-ps-am install-strip installcheck \ 459 installcheck-am installdirs maintainer-clean \ 460 maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ 461 pdf-am ps ps-am uninstall uninstall-am 859 clean-generic clean-local cscopelist-am ctags-am distclean \ 860 distclean-generic distdir dvi dvi-am html html-am info info-am \ 861 install install-am install-data install-data-am install-dvi \ 862 install-dvi-am install-exec install-exec-am install-html \ 863 install-html-am install-info install-info-am install-man \ 864 install-pdf install-pdf-am install-ps install-ps-am \ 865 install-strip installcheck installcheck-am installdirs \ 866 maintainer-clean maintainer-clean-generic mostlyclean \ 867 mostlyclean-generic pdf pdf-am ps ps-am recheck tags-am \ 868 uninstall uninstall-am 869 870 .PRECIOUS: Makefile 462 871 463 872 … … 465 874 466 875 all-local: ${TESTS:=.run} 876 877 clean-local: 878 rm -f ${TESTS} 467 879 468 880 % : %.c ${CC} -
src/tests/preempt_longrun/create.c
rfea3faa rb826e6b 10 10 } 11 11 12 thread Worker{};12 thread worker_t {}; 13 13 14 void main( Worker* this) {}14 void main(worker_t * this) {} 15 15 16 16 int main(int argc, char* argv[]) { 17 for(int i = 0; i < 100_000ul; i++) { 18 Worker w; 17 processor p; 18 for(int i = 0; i < 10_000ul; i++) { 19 worker_t w[7]; 19 20 } 20 21 } -
src/tests/preempt_longrun/processor.c
rfea3faa rb826e6b 10 10 } 11 11 12 thread Worker{};12 thread worker_t {}; 13 13 14 void main( Worker* this) {}14 void main(worker_t * this) {} 15 15 16 16 int main(int argc, char* argv[]) { 17 for(int i = 0; i < 10 0_000ul; i++) {17 for(int i = 0; i < 10_000ul; i++) { 18 18 processor p; 19 19 } -
src/tests/preempt_longrun/stack.c
rfea3faa rb826e6b 12 12 } 13 13 14 thread Worker{};14 thread worker_t {}; 15 15 16 void main( Worker* this) {16 void main(worker_t * this) { 17 17 volatile long p = 5_021_609ul; 18 18 volatile long a = 326_417ul; 19 19 volatile long n = 1l; 20 for (volatile long i = 0; i < p; i++) { 21 n *= a; 22 n %= p; 20 for (volatile long i = 0; i < p; i++) { 21 n *= a; 22 n %= p; 23 23 } 24 24 25 25 if( n != a ) { 26 26 abort(); … … 28 28 } 29 29 30 extern "C" { 31 static worker_t * workers; 32 } 33 30 34 int main(int argc, char* argv[]) { 31 35 processor p; 32 36 { 33 Worker w[7]; 37 worker_t w[7]; 38 workers = w; 34 39 } 35 40 } -
src/tests/preempt_longrun/yield.c
rfea3faa rb826e6b 10 10 } 11 11 12 thread Worker{};12 thread worker_t {}; 13 13 14 void main( Worker* this) {15 for(int i = 0; i < 100_000ul; i++) {14 void main(worker_t * this) { 15 for(int i = 0; i < 325_000ul; i++) { 16 16 yield(); 17 17 } 18 } 19 20 extern "C" { 21 static worker_t * workers; 18 22 } 19 23 … … 21 25 processor p; 22 26 { 23 Worker w[7]; 27 worker_t w[7]; 28 workers = w; 24 29 } 25 30 } -
src/tests/sched-int-barge.c
rfea3faa rb826e6b 4 4 #include <stdlib> 5 5 #include <thread> 6 7 #ifndef N 8 #define N 100_000 9 #endif 6 10 7 11 enum state_t { WAIT, SIGNAL, BARGE }; … … 73 77 } 74 78 75 if( c->counter >= 100_000) c->done = true;79 if( c->counter >= N ) c->done = true; 76 80 return !c->done; 77 81 } -
src/tests/sched-int-block.c
rfea3faa rb826e6b 6 6 7 7 #ifndef N 8 #define N 10 0_0008 #define N 10_000 9 9 #endif 10 10 … … 31 31 //------------------------------------------------------------------------------ 32 32 void wait_op( global_data_t * mutex a, global_data_t * mutex b, unsigned i ) { 33 wait( &cond, (uintptr_t)this_thread ());33 wait( &cond, (uintptr_t)this_thread ); 34 34 35 35 yield( ((unsigned)rand48()) % 10 ); … … 40 40 } 41 41 42 a->last_thread = b->last_thread = this_thread ();42 a->last_thread = b->last_thread = this_thread; 43 43 44 44 yield( ((unsigned)rand48()) % 10 ); … … 56 56 yield( ((unsigned)rand48()) % 10 ); 57 57 58 a->last_thread = b->last_thread = a->last_signaller = b->last_signaller = this_thread ();58 a->last_thread = b->last_thread = a->last_signaller = b->last_signaller = this_thread; 59 59 60 60 if( !is_empty( &cond ) ) { … … 86 86 //------------------------------------------------------------------------------ 87 87 void barge_op( global_data_t * mutex a ) { 88 a->last_thread = this_thread ();88 a->last_thread = this_thread; 89 89 } 90 90 -
src/tests/sched-int-disjoint.c
rfea3faa rb826e6b 5 5 6 6 #ifndef N 7 #define N 10 0_0007 #define N 10_000 8 8 #endif 9 9 … … 42 42 43 43 void main( Barger * this ) { 44 while( !all_done ) { 44 while( !all_done ) { 45 45 barge( &data ); 46 yield(); 46 yield(); 47 47 } 48 48 } … … 53 53 wait( &cond ); 54 54 if( d->state != SIGNAL ) { 55 sout | "ERROR barging!" | endl; 55 sout | "ERROR barging!" | endl; 56 56 } 57 57 … … 85 85 bool running = data.counter < N && data.counter > 0; 86 86 if( data.state != SIGNAL && running ) { 87 sout | "ERROR Eager signal" | data.state | endl; 87 sout | "ERROR Eager signal" | data.state | endl; 88 88 } 89 89 } … … 92 92 93 93 void main( Signaller * this ) { 94 while( !all_done ) { 94 while( !all_done ) { 95 95 logic( &mut ); 96 yield(); 96 yield(); 97 97 } 98 98 } … … 111 111 sout | "All waiter done" | endl; 112 112 all_done = true; 113 } 113 } 114 114 } -
src/tests/sched-int-wait.c
rfea3faa rb826e6b 50 50 unsigned action = (unsigned)rand48() % 4; 51 51 switch( action ) { 52 case 0: 52 case 0: 53 53 signal( &condABC, &globalA, &globalB, &globalC ); 54 54 break; 55 case 1: 55 case 1: 56 56 signal( &condAB , &globalA, &globalB ); 57 57 break; 58 case 2: 58 case 2: 59 59 signal( &condBC , &globalB, &globalC ); 60 60 break; 61 case 3: 61 case 3: 62 62 signal( &condAC , &globalA, &globalC ); 63 63 break; … … 67 67 } 68 68 yield(); 69 } 69 } 70 70 } 71 71 -
src/tests/test.py
rfea3faa rb826e6b 161 161 162 162 # remove any outputs from the previous tests to prevent side effects 163 rm( (out_file, test.name), dry_run )163 rm( (out_file, err_file, test.name), dry_run ) 164 164 165 165 options = "-debug" if debug else "-nodebug" 166 166 167 167 # build, skipping to next test on error 168 make_ret, _ = sh("""%s test=yes EXTRA_FLAGS="%s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run)168 make_ret, _ = sh("""%s test=yes DEBUG_FLAGS="%s" %s 2> %s 1> /dev/null""" % (make_cmd, options, test.name, out_file), dry_run) 169 169 170 170 retcode = 0 … … 202 202 error = myfile.read() 203 203 204 204 205 205 # clean the executable 206 206 sh("rm -f %s > /dev/null 2>&1" % test.name, dry_run) … … 221 221 if retcode == TestResult.SUCCESS: result_txt = "Done" 222 222 elif retcode == TestResult.TIMEOUT: result_txt = "TIMEOUT" 223 else : result_txt = "ERROR "223 else : result_txt = "ERROR code %d" % retcode 224 224 else : 225 225 if retcode == TestResult.SUCCESS: result_txt = "PASSED" 226 226 elif retcode == TestResult.TIMEOUT: result_txt = "TIMEOUT" 227 else : result_txt = "FAILED "227 else : result_txt = "FAILED with code %d" % retcode 228 228 229 229 #print result with error if needed -
src/tests/thread.c
rfea3faa rb826e6b 4 4 #include <thread> 5 5 6 // thread First;7 // void main(First* this);6 thread First { semaphore* lock; }; 7 thread Second { semaphore* lock; }; 8 8 9 // thread Second; 10 // void main(Second* this); 11 12 thread First { signal_once* lock; }; 13 thread Second { signal_once* lock; }; 14 15 void ?{}( First * this, signal_once* lock ) { this->lock = lock; } 16 void ?{}( Second * this, signal_once* lock ) { this->lock = lock; } 9 void ?{}( First * this, semaphore* lock ) { this->lock = lock; } 10 void ?{}( Second * this, semaphore* lock ) { this->lock = lock; } 17 11 18 12 void main(First* this) { … … 21 15 yield(); 22 16 } 23 signal(this->lock);17 V(this->lock); 24 18 } 25 19 26 20 void main(Second* this) { 27 wait(this->lock);21 P(this->lock); 28 22 for(int i = 0; i < 10; i++) { 29 23 sout | "Second : Suspend No." | i + 1 | endl; … … 34 28 35 29 int main(int argc, char* argv[]) { 36 s ignal_once lock;30 semaphore lock = { 0 }; 37 31 sout | "User main begin" | endl; 38 32 {
Note:
See TracChangeset
for help on using the changeset viewer.