Changes in / [9c23f31:2298f728]
- Files:
-
- 8 deleted
- 44 edited
-
doc/aaron_comp_II/Efficient Type Resolution in Cforall.pptx (deleted)
-
doc/aaron_comp_II/conversion_dag.png (deleted)
-
doc/aaron_comp_II/resolution_dag.png (deleted)
-
doc/aaron_comp_II/resolution_dag2.odg (deleted)
-
doc/aaron_comp_II/resolution_dag2.png (deleted)
-
src/CodeGen/GenType.cc (modified) (2 diffs)
-
src/InitTweak/FixInit.cc (modified) (7 diffs)
-
src/InitTweak/InitTweak.cc (modified) (4 diffs)
-
src/Makefile.in (modified) (6 diffs)
-
src/Parser/parser.cc (deleted)
-
src/Parser/parser.yy (modified) (2 diffs)
-
src/ResolvExpr/AdjustExprType.cc (modified) (2 diffs)
-
src/ResolvExpr/AlternativeFinder.cc (modified) (6 diffs)
-
src/ResolvExpr/AlternativeFinder.h (modified) (3 diffs)
-
src/ResolvExpr/CommonType.cc (modified) (5 diffs)
-
src/ResolvExpr/ConversionCost.cc (modified) (3 diffs)
-
src/ResolvExpr/ConversionCost.h (modified) (1 diff)
-
src/ResolvExpr/PtrsAssignable.cc (modified) (2 diffs)
-
src/ResolvExpr/PtrsCastable.cc (modified) (2 diffs)
-
src/ResolvExpr/RenameVars.cc (modified) (1 diff)
-
src/ResolvExpr/RenameVars.h (modified) (1 diff)
-
src/ResolvExpr/Resolver.cc (modified) (2 diffs)
-
src/ResolvExpr/Unify.cc (modified) (2 diffs)
-
src/SymTab/FixFunction.cc (modified) (1 diff)
-
src/SymTab/FixFunction.h (modified) (1 diff)
-
src/SymTab/ImplementationType.cc (modified) (2 diffs)
-
src/SymTab/Mangler.cc (modified) (1 diff)
-
src/SymTab/Mangler.h (modified) (1 diff)
-
src/SymTab/TypeEquality.cc (modified) (2 diffs)
-
src/SymTab/Validate.cc (modified) (4 diffs)
-
src/SynTree/Expression.cc (modified) (4 diffs)
-
src/SynTree/Expression.h (modified) (2 diffs)
-
src/SynTree/Mutator.cc (modified) (3 diffs)
-
src/SynTree/Mutator.h (modified) (2 diffs)
-
src/SynTree/SynTree.h (modified) (2 diffs)
-
src/SynTree/Type.h (modified) (1 diff)
-
src/SynTree/TypeSubstitution.cc (modified) (2 diffs)
-
src/SynTree/TypeSubstitution.h (modified) (1 diff)
-
src/SynTree/Visitor.cc (modified) (3 diffs)
-
src/SynTree/Visitor.h (modified) (2 diffs)
-
src/SynTree/ZeroOneType.cc (deleted)
-
src/SynTree/module.mk (modified) (1 diff)
-
src/examples/gc_no_raii/src/internal/card_table.h (modified) (1 diff)
-
src/examples/gc_no_raii/src/internal/memory_pool.c (modified) (3 diffs)
-
src/examples/gc_no_raii/src/internal/memory_pool.h (modified) (2 diffs)
-
src/examples/gc_no_raii/src/internal/state.c (modified) (1 diff)
-
src/include/assert.h (modified) (1 diff)
-
src/libcfa/containers/vector (modified) (13 diffs)
-
src/libcfa/containers/vector.c (modified) (6 diffs)
-
src/libcfa/prelude.cf (modified) (2 diffs)
-
src/tests/.expect/libcfa_vector.txt (deleted)
-
src/tests/libcfa_vector.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/GenType.cc
r9c23f31 r2298f728 42 42 virtual void visit( TypeInstType *typeInst ); 43 43 virtual void visit( VarArgsType *varArgsType ); 44 virtual void visit( ZeroType *zeroType );45 virtual void visit( OneType *oneType );46 44 47 45 private: … … 202 200 } 203 201 204 void GenType::visit( ZeroType *zeroType ) {205 // ideally these wouldn't hit codegen at all, but should be safe to make them ints206 typeString = "int " + typeString;207 handleQualifiers( zeroType );208 }209 210 void GenType::visit( OneType *oneType ) {211 // ideally these wouldn't hit codegen at all, but should be safe to make them ints212 typeString = "int " + typeString;213 handleQualifiers( oneType );214 }215 216 202 void GenType::handleQualifiers( Type *type ) { 217 203 if ( type->get_isConst() ) { -
src/InitTweak/FixInit.cc
r9c23f31 r2298f728 33 33 #include "SymTab/Autogen.h" 34 34 #include "GenPoly/PolyMutator.h" 35 #include "GenPoly/DeclMutator.h"36 35 #include "SynTree/AddStmtVisitor.h" 37 36 #include "CodeGen/GenType.h" // for warnings … … 217 216 SymTab::Indexer & indexer; 218 217 }; 219 220 class FixCtorExprs : public GenPoly::DeclMutator {221 public:222 /// expands ConstructorExpr nodes into comma expressions, using a temporary for the first argument223 static void fix( std::list< Declaration * > & translationUnit );224 225 virtual Expression * mutate( ConstructorExpr * ctorExpr );226 };227 218 } // namespace 228 219 … … 230 221 // fixes ConstructorInit for global variables. should happen before fixInitializers. 231 222 InitTweak::fixGlobalInit( translationUnit, filename, inLibrary ); 232 233 223 234 224 InsertImplicitCalls::insert( translationUnit ); … … 241 231 242 232 GenStructMemberCalls::generate( translationUnit ); 243 // xxx - ctor expansion currently has to be after FixCopyCtors, because there is currently a244 // hack in the way untyped assignments are generated, where the first argument cannot have245 // its address taken because of the way codegeneration handles UntypedExpr vs. ApplicationExpr.246 // Thus such assignment exprs must never pushed through expression resolution (and thus should247 // not go through the FixCopyCtors pass), otherwise they will fail -- guaranteed.248 // Also needs to happen after GenStructMemberCalls, since otherwise member constructors exprs249 // don't look right, and a member can be constructed more than once.250 FixCtorExprs::fix( translationUnit );251 233 } 252 234 … … 301 283 throw warner.errors; 302 284 } 303 }304 305 void FixCtorExprs::fix( std::list< Declaration * > & translationUnit ) {306 FixCtorExprs fixer;307 fixer.mutateDeclarationList( translationUnit );308 285 } 309 286 … … 503 480 retExpr = deref; 504 481 } // if 505 retExpr->set_env( env->clone() ); 482 // xxx - might need to set env on retExpr... 483 // retExpr->set_env( env->clone() ); 506 484 return retExpr; 507 485 } else { … … 936 914 return safe_dynamic_cast< ApplicationExpr * >( ResolvExpr::findVoidExpression( untypedExpr, indexer ) ); 937 915 } 938 939 Expression * FixCtorExprs::mutate( ConstructorExpr * ctorExpr ) {940 static UniqueName tempNamer( "_tmp_ctor_expr" );941 assert( ctorExpr->get_results().size() == 1 );942 ObjectDecl * tmp = new ObjectDecl( tempNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, ctorExpr->get_results().front()->clone(), nullptr );943 addDeclaration( tmp );944 945 ApplicationExpr * callExpr = safe_dynamic_cast< ApplicationExpr * > ( ctorExpr->get_callExpr() );946 TypeSubstitution * env = ctorExpr->get_env();947 ctorExpr->set_callExpr( nullptr );948 ctorExpr->set_env( nullptr );949 950 Expression *& firstArg = callExpr->get_args().front();951 UntypedExpr * assign = new UntypedExpr( new NameExpr( "?=?" ) );952 assign->get_args().push_back( new VariableExpr( tmp ) );953 assign->get_args().push_back( firstArg );954 cloneAll( ctorExpr->get_results(), assign->get_results() );955 firstArg = assign;956 957 CommaExpr * commaExpr = new CommaExpr( callExpr, new VariableExpr( tmp ) );958 commaExpr->set_env( env );959 delete ctorExpr;960 return commaExpr;961 }962 916 } // namespace 963 917 } // namespace InitTweak -
src/InitTweak/InitTweak.cc
r9c23f31 r2298f728 358 358 template<typename CallExpr> 359 359 Expression *& callArg( CallExpr * callExpr, unsigned int pos ) { 360 if ( pos >= callExpr->get_args().size() ) assert f( false,"asking for argument that doesn't exist. Return NULL/throw exception?" );360 if ( pos >= callExpr->get_args().size() ) assert( false && "asking for argument that doesn't exist. Return NULL/throw exception?" ); 361 361 for ( Expression *& arg : callExpr->get_args() ) { 362 362 if ( pos == 0 ) return arg; … … 373 373 return callArg( untypedExpr, pos ); 374 374 } else { 375 assert f( false,"Unexpected expression type passed to getCallArg" );375 assert( false && "Unexpected expression type passed to getCallArg" ); 376 376 } 377 377 } … … 387 387 } else if ( MemberExpr * memberExpr = dynamic_cast< MemberExpr * >( func ) ) { 388 388 return memberExpr->get_member()->get_name(); 389 } else if ( UntypedMemberExpr * memberExpr = dynamic_cast< UntypedMemberExpr * > ( func ) ) {390 return memberExpr->get_member();391 389 } else { 392 assert f( false,"Unexpected expression type being called as a function in call expression" );390 assert( false && "Unexpected expression type being called as a function in call expression" ); 393 391 } 394 392 } … … 402 400 } else { 403 401 std::cerr << expr << std::endl; 404 assert f( false,"Unexpected expression type passed to getFunctionName" );402 assert( false && "Unexpected expression type passed to getFunctionName" ); 405 403 } 406 404 } -
src/Makefile.in
r9c23f31 r2298f728 165 165 SynTree/driver_cfa_cpp-AttrType.$(OBJEXT) \ 166 166 SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT) \ 167 SynTree/driver_cfa_cpp-ZeroOneType.$(OBJEXT) \168 167 SynTree/driver_cfa_cpp-Constant.$(OBJEXT) \ 169 168 SynTree/driver_cfa_cpp-Expression.$(OBJEXT) \ … … 391 390 SynTree/ReferenceToType.cc SynTree/TupleType.cc \ 392 391 SynTree/TypeofType.cc SynTree/AttrType.cc \ 393 SynTree/VarArgsType.cc SynTree/ ZeroOneType.cc \394 SynTree/ Constant.cc SynTree/Expression.cc SynTree/TupleExpr.cc \392 SynTree/VarArgsType.cc SynTree/Constant.cc \ 393 SynTree/Expression.cc SynTree/TupleExpr.cc \ 395 394 SynTree/CommaExpr.cc SynTree/TypeExpr.cc \ 396 395 SynTree/ApplicationExpr.cc SynTree/AddressExpr.cc \ … … 716 715 SynTree/driver_cfa_cpp-VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \ 717 716 SynTree/$(DEPDIR)/$(am__dirstamp) 718 SynTree/driver_cfa_cpp-ZeroOneType.$(OBJEXT): SynTree/$(am__dirstamp) \719 SynTree/$(DEPDIR)/$(am__dirstamp)720 717 SynTree/driver_cfa_cpp-Constant.$(OBJEXT): SynTree/$(am__dirstamp) \ 721 718 SynTree/$(DEPDIR)/$(am__dirstamp) … … 880 877 -rm -f SynTree/driver_cfa_cpp-Visitor.$(OBJEXT) 881 878 -rm -f SynTree/driver_cfa_cpp-VoidType.$(OBJEXT) 882 -rm -f SynTree/driver_cfa_cpp-ZeroOneType.$(OBJEXT)883 879 -rm -f Tuples/driver_cfa_cpp-NameMatcher.$(OBJEXT) 884 880 -rm -f Tuples/driver_cfa_cpp-TupleAssignment.$(OBJEXT) … … 986 982 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-Visitor.Po@am__quote@ 987 983 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-VoidType.Po@am__quote@ 988 @AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Po@am__quote@989 984 @AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/driver_cfa_cpp-NameMatcher.Po@am__quote@ 990 985 @AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/driver_cfa_cpp-TupleAssignment.Po@am__quote@ … … 2069 2064 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 2070 2065 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-VarArgsType.obj `if test -f 'SynTree/VarArgsType.cc'; then $(CYGPATH_W) 'SynTree/VarArgsType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/VarArgsType.cc'; fi` 2071 2072 SynTree/driver_cfa_cpp-ZeroOneType.o: SynTree/ZeroOneType.cc2073 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-ZeroOneType.o -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Tpo -c -o SynTree/driver_cfa_cpp-ZeroOneType.o `test -f 'SynTree/ZeroOneType.cc' || echo '$(srcdir)/'`SynTree/ZeroOneType.cc2074 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Po2075 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SynTree/ZeroOneType.cc' object='SynTree/driver_cfa_cpp-ZeroOneType.o' libtool=no @AMDEPBACKSLASH@2076 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2077 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-ZeroOneType.o `test -f 'SynTree/ZeroOneType.cc' || echo '$(srcdir)/'`SynTree/ZeroOneType.cc2078 2079 SynTree/driver_cfa_cpp-ZeroOneType.obj: SynTree/ZeroOneType.cc2080 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT SynTree/driver_cfa_cpp-ZeroOneType.obj -MD -MP -MF SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Tpo -c -o SynTree/driver_cfa_cpp-ZeroOneType.obj `if test -f 'SynTree/ZeroOneType.cc'; then $(CYGPATH_W) 'SynTree/ZeroOneType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/ZeroOneType.cc'; fi`2081 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Tpo SynTree/$(DEPDIR)/driver_cfa_cpp-ZeroOneType.Po2082 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SynTree/ZeroOneType.cc' object='SynTree/driver_cfa_cpp-ZeroOneType.obj' libtool=no @AMDEPBACKSLASH@2083 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@2084 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o SynTree/driver_cfa_cpp-ZeroOneType.obj `if test -f 'SynTree/ZeroOneType.cc'; then $(CYGPATH_W) 'SynTree/ZeroOneType.cc'; else $(CYGPATH_W) '$(srcdir)/SynTree/ZeroOneType.cc'; fi`2085 2066 2086 2067 SynTree/driver_cfa_cpp-Constant.o: SynTree/Constant.cc -
src/Parser/parser.yy
r9c23f31 r2298f728 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Sep 24 1 2:16:53201613 // Update Count : 199 212 // Last Modified On : Sat Sep 24 11:30:40 2016 13 // Update Count : 1991 14 14 // 15 15 … … 390 390 { 391 391 Token fn; 392 fn.str = new st d::string( "?{}" ); // location undefined - use location of '{'?393 $$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 )) ) );392 fn.str = new string( "?{}" ); // location undefined 393 $$ = new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ); 394 394 } 395 395 ; -
src/ResolvExpr/AdjustExprType.cc
r9c23f31 r2298f728 37 37 virtual Type* mutate( TupleType *tupleType ); 38 38 virtual Type* mutate( VarArgsType *varArgsType ); 39 virtual Type* mutate( ZeroType *zeroType );40 virtual Type* mutate( OneType *oneType );41 39 42 40 const TypeEnvironment &env; … … 119 117 return varArgsType; 120 118 } 121 122 Type *AdjustExprType::mutate( ZeroType *zeroType ) {123 return zeroType;124 }125 126 Type *AdjustExprType::mutate( OneType *oneType ) {127 return oneType;128 }129 119 } // namespace ResolvExpr 130 120 -
src/ResolvExpr/AlternativeFinder.cc
r9c23f31 r2298f728 197 197 } 198 198 199 void AlternativeFinder::find( Expression *expr, bool adjust , bool prune) {199 void AlternativeFinder::find( Expression *expr, bool adjust ) { 200 200 expr->accept( *this ); 201 201 if ( alternatives.empty() ) { … … 207 207 } 208 208 } 209 if ( prune ) { 210 PRINT( 211 std::cerr << "alternatives before prune:" << std::endl; 212 printAlts( alternatives, std::cerr ); 213 ) 214 AltList::iterator oldBegin = alternatives.begin(); 215 pruneAlternatives( alternatives.begin(), alternatives.end(), front_inserter( alternatives ), indexer ); 216 if ( alternatives.begin() == oldBegin ) { 217 std::ostringstream stream; 218 stream << "Can't choose between alternatives for expression "; 219 expr->print( stream ); 220 stream << "Alternatives are:"; 221 AltList winners; 222 findMinCost( alternatives.begin(), alternatives.end(), back_inserter( winners ) ); 223 printAlts( winners, stream, 8 ); 224 throw SemanticError( stream.str() ); 225 } 226 alternatives.erase( oldBegin, alternatives.end() ); 227 PRINT( 228 std::cerr << "there are " << alternatives.size() << " alternatives after elimination" << std::endl; 229 ) 230 } 209 PRINT( 210 std::cerr << "alternatives before prune:" << std::endl; 211 printAlts( alternatives, std::cerr ); 212 ) 213 AltList::iterator oldBegin = alternatives.begin(); 214 pruneAlternatives( alternatives.begin(), alternatives.end(), front_inserter( alternatives ), indexer ); 215 if ( alternatives.begin() == oldBegin ) { 216 std::ostringstream stream; 217 stream << "Can't choose between alternatives for expression "; 218 expr->print( stream ); 219 stream << "Alternatives are:"; 220 AltList winners; 221 findMinCost( alternatives.begin(), alternatives.end(), back_inserter( winners ) ); 222 printAlts( winners, stream, 8 ); 223 throw SemanticError( stream.str() ); 224 } 225 alternatives.erase( oldBegin, alternatives.end() ); 226 PRINT( 227 std::cerr << "there are " << alternatives.size() << " alternatives after elimination" << std::endl; 228 ) 231 229 232 230 // Central location to handle gcc extension keyword for all expression types. … … 236 234 } 237 235 238 void AlternativeFinder::findWithAdjustment( Expression *expr , bool prune) {239 find( expr, true , prune);236 void AlternativeFinder::findWithAdjustment( Expression *expr ) { 237 find( expr, true ); 240 238 } 241 239 242 240 template< typename StructOrUnionType > 243 void AlternativeFinder::addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const TypeEnvironment & env, conststd::string &name ) {241 void AlternativeFinder::addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const std::string &name ) { 244 242 std::list< Declaration* > members; 245 243 aggInst->lookup( name, members ); … … 762 760 if ( agg->expr->get_results().size() == 1 ) { 763 761 if ( StructInstType *structInst = dynamic_cast< StructInstType* >( agg->expr->get_results().front() ) ) { 764 addAggMembers( structInst, agg->expr, agg->cost, agg->env,memberExpr->get_member() );762 addAggMembers( structInst, agg->expr, agg->cost, memberExpr->get_member() ); 765 763 } else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( agg->expr->get_results().front() ) ) { 766 addAggMembers( unionInst, agg->expr, agg->cost, agg->env,memberExpr->get_member() );764 addAggMembers( unionInst, agg->expr, agg->cost, memberExpr->get_member() ); 767 765 } // if 768 766 } // if … … 791 789 renameTypes( alternatives.back().expr ); 792 790 if ( StructInstType *structInst = dynamic_cast< StructInstType* >( (*i)->get_type() ) ) { 793 addAggMembers( structInst, &newExpr, Cost( 0, 0, 1 ), env,"" );791 addAggMembers( structInst, &newExpr, Cost( 0, 0, 1 ), "" ); 794 792 } else if ( UnionInstType *unionInst = dynamic_cast< UnionInstType* >( (*i)->get_type() ) ) { 795 addAggMembers( unionInst, &newExpr, Cost( 0, 0, 1 ), env,"" );793 addAggMembers( unionInst, &newExpr, Cost( 0, 0, 1 ), "" ); 796 794 } // if 797 795 } // for … … 1014 1012 alternatives.push_back( Alternative( impCpCtorExpr->clone(), env, Cost::zero ) ); 1015 1013 } 1016 1017 void AlternativeFinder::visit( ConstructorExpr * ctorExpr ) {1018 AlternativeFinder finder( indexer, env );1019 // don't prune here, since it's guaranteed all alternatives will have the same type1020 // (giving the alternatives different types is half of the point of ConstructorExpr nodes)1021 finder.findWithAdjustment( ctorExpr->get_callExpr(), false );1022 for ( Alternative & alt : finder.alternatives ) {1023 alternatives.push_back( Alternative( new ConstructorExpr( alt.expr->clone() ), alt.env, alt.cost ) );1024 }1025 }1026 1014 } // namespace ResolvExpr 1027 1015 -
src/ResolvExpr/AlternativeFinder.h
r9c23f31 r2298f728 29 29 public: 30 30 AlternativeFinder( const SymTab::Indexer &indexer, const TypeEnvironment &env ); 31 void find( Expression *expr, bool adjust = false , bool prune = true);31 void find( Expression *expr, bool adjust = false ); 32 32 /// Calls find with the adjust flag set; adjustment turns array and function types into equivalent pointer types 33 void findWithAdjustment( Expression *expr , bool prune = true);33 void findWithAdjustment( Expression *expr ); 34 34 AltList &get_alternatives() { return alternatives; } 35 35 … … 66 66 virtual void visit( TupleExpr *tupleExpr ); 67 67 virtual void visit( ImplicitCopyCtorExpr * impCpCtorExpr ); 68 virtual void visit( ConstructorExpr * ctorExpr );69 68 public: // xxx - temporary hack - should make Tuples::TupleAssignment a friend 70 69 template< typename InputIterator, typename OutputIterator > … … 73 72 private: 74 73 /// Adds alternatives for member expressions, given the aggregate, conversion cost for that aggregate, and name of the member 75 template< typename StructOrUnionType > void addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const TypeEnvironment & env, conststd::string &name );74 template< typename StructOrUnionType > void addAggMembers( StructOrUnionType *aggInst, Expression *expr, const Cost &newCost, const std::string &name ); 76 75 /// Adds alternatives for offsetof expressions, given the base type and name of the member 77 76 template< typename StructOrUnionType > void addOffsetof( StructOrUnionType *aggInst, const std::string &name ); -
src/ResolvExpr/CommonType.cc
r9c23f31 r2298f728 39 39 virtual void visit( TupleType *tupleType ); 40 40 virtual void visit( VarArgsType *varArgsType ); 41 virtual void visit( ZeroType *zeroType );42 virtual void visit( OneType *oneType );43 41 44 42 template< typename RefType > void handleRefType( RefType *inst, Type *other ); … … 136 134 result = new BasicType( basicType->get_qualifiers() + otherBasic->get_qualifiers(), newType ); 137 135 } // if 138 } else if ( dynamic_cast< EnumInstType * > ( type2 ) || dynamic_cast< ZeroType* >( type2 ) || dynamic_cast< OneType* >( type2 ) ) {139 // use signed int in lieu of the enum /zero/onetype136 } else if ( EnumInstType *enumInstType = dynamic_cast< EnumInstType * > ( type2 ) ) { 137 // use signed int in lieu of the enum type 140 138 BasicType::Kind newType = combinedType[ basicType->get_kind() ][ BasicType::SignedInt ]; 141 if ( ( ( newType == basicType->get_kind() && basicType->get_qualifiers() >= type2->get_qualifiers() ) || widenFirst ) && ( ( newType != basicType->get_kind() && basicType->get_qualifiers() <= type2->get_qualifiers() ) || widenSecond ) ) {142 result = new BasicType( basicType->get_qualifiers() + type2->get_qualifiers(), newType );139 if ( ( ( newType == basicType->get_kind() && basicType->get_qualifiers() >= enumInstType->get_qualifiers() ) || widenFirst ) && ( ( newType != basicType->get_kind() && basicType->get_qualifiers() <= enumInstType->get_qualifiers() ) || widenSecond ) ) { 140 result = new BasicType( basicType->get_qualifiers() + enumInstType->get_qualifiers(), newType ); 143 141 } // if 144 142 } // if … … 173 171 otherPointer->get_base()->get_qualifiers() = tq2; 174 172 } // if 175 } else if ( widenSecond && dynamic_cast< ZeroType* >( type2 ) ) {176 result = pointerType->clone();177 result->get_qualifiers() += type2->get_qualifiers();178 173 } // if 179 174 } … … 195 190 196 191 void CommonType::visit( EnumInstType *enumInstType ) { 197 if ( dynamic_cast< BasicType * >( type2 ) || dynamic_cast< ZeroType* >( type2 ) || dynamic_cast< OneType* >( type2 )) {192 if ( dynamic_cast< BasicType * >( type2 ) ) { 198 193 // reuse BasicType, EnumInstType code by swapping type2 with enumInstType 199 194 Type * temp = type2; … … 235 230 void CommonType::visit( VarArgsType *varArgsType ) { 236 231 } 237 238 void CommonType::visit( ZeroType *zeroType ) {239 if ( widenFirst ) {240 if ( dynamic_cast< BasicType* >( type2 ) || dynamic_cast< PointerType* >( type2 ) || dynamic_cast< EnumInstType* >( type2 ) ) {241 if ( widenSecond || zeroType->get_qualifiers() <= type2->get_qualifiers() ) {242 result = type2->clone();243 result->get_qualifiers() += zeroType->get_qualifiers();244 }245 }246 }247 }248 249 void CommonType::visit( OneType *oneType ) {250 if ( widenFirst ) {251 if ( dynamic_cast< BasicType* >( type2 ) || dynamic_cast< EnumInstType* >( type2 ) ) {252 if ( widenSecond || oneType->get_qualifiers() <= type2->get_qualifiers() ) {253 result = type2->clone();254 result->get_qualifiers() += oneType->get_qualifiers();255 }256 }257 }258 }259 232 } // namespace ResolvExpr 260 233 -
src/ResolvExpr/ConversionCost.cc
r9c23f31 r2298f728 160 160 // xxx - not positive this is correct, but appears to allow casting int => enum 161 161 cost = Cost( 1, 0, 0 ); 162 } else if ( dynamic_cast< ZeroType* >( dest ) != nullptr || dynamic_cast< OneType* >( dest ) != nullptr ) { 163 cost = Cost( 1, 0, 0 ); 164 } // if 162 } // if 165 163 } 166 164 … … 177 175 } // if 178 176 } // if 179 } else if ( dynamic_cast< ZeroType* >( dest ) != nullptr || dynamic_cast< OneType* >( dest ) != nullptr ) {180 cost = Cost( 1, 0, 0 );181 177 } // if 182 178 } … … 260 256 } 261 257 } 262 263 void ConversionCost::visit(ZeroType *zeroType) {264 if ( dynamic_cast< ZeroType* >( dest ) ) {265 cost = Cost::zero;266 } else if ( BasicType *destAsBasic = dynamic_cast< BasicType* >( dest ) ) {267 // copied from visit(BasicType*) for signed int, but +1 for safe conversions268 int tableResult = costMatrix[ BasicType::SignedInt ][ destAsBasic->get_kind() ];269 if ( tableResult == -1 ) {270 cost = Cost( 1, 0, 0 );271 } else {272 cost = Cost( 0, 0, tableResult + 1 );273 }274 } else if ( dynamic_cast< PointerType* >( dest ) ) {275 cost = Cost( 0, 0, 1 );276 }277 }278 279 void ConversionCost::visit(OneType *oneType) {280 if ( dynamic_cast< OneType* >( dest ) ) {281 cost = Cost::zero;282 } else if ( BasicType *destAsBasic = dynamic_cast< BasicType* >( dest ) ) {283 // copied from visit(BasicType*) for signed int, but +1 for safe conversions284 int tableResult = costMatrix[ BasicType::SignedInt ][ destAsBasic->get_kind() ];285 if ( tableResult == -1 ) {286 cost = Cost( 1, 0, 0 );287 } else {288 cost = Cost( 0, 0, tableResult + 1 );289 }290 }291 }292 258 } // namespace ResolvExpr 293 259 -
src/ResolvExpr/ConversionCost.h
r9c23f31 r2298f728 41 41 virtual void visit(TupleType *tupleType); 42 42 virtual void visit(VarArgsType *varArgsType); 43 virtual void visit(ZeroType *zeroType);44 virtual void visit(OneType *oneType);45 43 protected: 46 44 Type *dest; -
src/ResolvExpr/PtrsAssignable.cc
r9c23f31 r2298f728 39 39 virtual void visit( TupleType *tupleType ); 40 40 virtual void visit( VarArgsType *varArgsType ); 41 virtual void visit( ZeroType *zeroType );42 virtual void visit( OneType *oneType );43 41 private: 44 42 Type *dest; … … 143 141 void PtrsAssignable::visit( VarArgsType *varArgsType ) { 144 142 } 145 146 void PtrsAssignable::visit( ZeroType *zeroType ) {147 }148 149 void PtrsAssignable::visit( OneType *oneType ) {150 }151 152 143 } // namespace ResolvExpr 153 144 -
src/ResolvExpr/PtrsCastable.cc
r9c23f31 r2298f728 40 40 virtual void visit(TupleType *tupleType); 41 41 virtual void visit(VarArgsType *varArgsType); 42 virtual void visit(ZeroType *zeroType);43 virtual void visit(OneType *oneType);44 42 private: 45 43 Type *dest; … … 146 144 result = objectCast( dest, env, indexer ); 147 145 } 148 149 void PtrsCastable::visit(ZeroType *zeroType) {150 result = objectCast( dest, env, indexer );151 }152 153 void PtrsCastable::visit(OneType *oneType) {154 result = objectCast( dest, env, indexer );155 }156 146 } // namespace ResolvExpr 157 147 -
src/ResolvExpr/RenameVars.cc
r9c23f31 r2298f728 110 110 } 111 111 112 void RenameVars::visit( ZeroType *zeroType ) {113 typeBefore( zeroType );114 typeAfter( zeroType );115 }116 117 void RenameVars::visit( OneType *oneType ) {118 typeBefore( oneType );119 typeAfter( oneType );120 }121 122 112 void RenameVars::typeBefore( Type *type ) { 123 113 if ( ! type->get_forall().empty() ) { -
src/ResolvExpr/RenameVars.h
r9c23f31 r2298f728 44 44 virtual void visit( TupleType *tupleType ); 45 45 virtual void visit( VarArgsType *varArgsType ); 46 virtual void visit( ZeroType *zeroType );47 virtual void visit( OneType *oneType );48 46 49 47 void typeBefore( Type *type ); -
src/ResolvExpr/Resolver.cc
r9c23f31 r2298f728 133 133 } else if ( BasicType *bt = dynamic_cast< BasicType * >( type ) ) { 134 134 return bt->isInteger(); 135 } else if ( dynamic_cast< ZeroType* >( type ) != nullptr || dynamic_cast< OneType* >( type ) != nullptr ) {136 return true;137 135 } else { 138 136 return false; … … 461 459 } 462 460 } else { 463 assert( dynamic_cast< BasicType * >( initContext ) || dynamic_cast< PointerType * >( initContext ) 464 || dynamic_cast< ZeroType * >( initContext ) || dynamic_cast< OneType * >( initContext ) ); 461 assert( dynamic_cast< BasicType * >( initContext ) || dynamic_cast< PointerType * >( initContext ) ); 465 462 // basic types are handled here 466 463 Visitor::visit( listInit ); -
src/ResolvExpr/Unify.cc
r9c23f31 r2298f728 60 60 virtual void visit(TupleType *tupleType); 61 61 virtual void visit(VarArgsType *varArgsType); 62 virtual void visit(ZeroType *zeroType);63 virtual void visit(OneType *oneType);64 62 65 63 template< typename RefType > void handleRefType( RefType *inst, Type *other ); … … 590 588 } 591 589 592 void Unify::visit(ZeroType *zeroType) {593 result = dynamic_cast< ZeroType* >( type2 );594 }595 596 void Unify::visit(OneType *oneType) {597 result = dynamic_cast< OneType* >( type2 );598 }599 600 590 } // namespace ResolvExpr 601 591 -
src/SymTab/FixFunction.cc
r9c23f31 r2298f728 77 77 return varArgsType; 78 78 } 79 80 Type * FixFunction::mutate(ZeroType *zeroType) {81 return zeroType;82 }83 84 Type * FixFunction::mutate(OneType *oneType) {85 return oneType;86 }87 79 } // namespace SymTab 88 80 -
src/SymTab/FixFunction.h
r9c23f31 r2298f728 42 42 virtual Type* mutate(TupleType *tupleType); 43 43 virtual Type* mutate(VarArgsType *varArgsType); 44 virtual Type* mutate(ZeroType *zeroType);45 virtual Type* mutate(OneType *oneType);46 44 47 45 bool isVoid; -
src/SymTab/ImplementationType.cc
r9c23f31 r2298f728 41 41 virtual void visit(TupleType *tupleType); 42 42 virtual void visit(VarArgsType *varArgsType); 43 virtual void visit(ZeroType *zeroType);44 virtual void visit(OneType *oneType);45 43 46 44 Type *result; // synthesized … … 122 120 void ImplementationType::visit(VarArgsType *varArgsType) { 123 121 } 124 125 void ImplementationType::visit(ZeroType *zeroType) {126 }127 128 void ImplementationType::visit(OneType *oneType) {129 }130 122 } // namespace SymTab 131 123 -
src/SymTab/Mangler.cc
r9c23f31 r2298f728 229 229 printQualifiers( varArgsType ); 230 230 mangleName << "VARGS"; 231 }232 233 void Mangler::visit( ZeroType *zeroType ) {234 mangleName << "Z";235 }236 237 void Mangler::visit( OneType *oneType ) {238 mangleName << "O";239 231 } 240 232 -
src/SymTab/Mangler.h
r9c23f31 r2298f728 46 46 virtual void visit( TupleType *tupleType ); 47 47 virtual void visit( VarArgsType *varArgsType ); 48 virtual void visit( ZeroType *zeroType );49 virtual void visit( OneType *oneType );50 48 51 49 std::string get_mangleName() { return mangleName.str(); } -
src/SymTab/TypeEquality.cc
r9c23f31 r2298f728 42 42 virtual void visit( TypeInstType *typeInst ); 43 43 virtual void visit( VarArgsType *varArgsType ); 44 virtual void visit( ZeroType *zeroType );45 virtual void visit( OneType *oneType );46 44 47 45 void handleQualifiers( Type * t ); … … 201 199 } 202 200 } 203 204 void TypeEquality::visit( ZeroType *zeroType ) {205 handleQualifiers( zeroType );206 if ( ! dynamic_cast< ZeroType * >( other ) ) {207 result = false;208 }209 }210 211 void TypeEquality::visit( OneType *oneType ) {212 handleQualifiers( oneType );213 if ( ! dynamic_cast< OneType * >( other ) ) {214 result = false;215 }216 }217 201 } // namespace SymTab -
src/SymTab/Validate.cc
r9c23f31 r2298f728 60 60 #include "ResolvExpr/typeops.h" 61 61 #include <algorithm> 62 #include "InitTweak/InitTweak.h"63 62 64 63 #define debugPrint( x ) if ( doDebug ) { std::cout << x; } … … 172 171 }; 173 172 174 class VerifyCtorDtor Assign: public Visitor {173 class VerifyCtorDtor : public Visitor { 175 174 public: 176 /// ensure that constructors , destructors, and assignmenthave at least one177 /// parameter, the first of which must be a pointer, and that ctor/dtors haveno175 /// ensure that constructors and destructors have at least one 176 /// parameter, the first of which must be a pointer, and no 178 177 /// return values. 179 178 static void verify( std::list< Declaration * > &translationUnit ); … … 203 202 compoundliteral.mutateDeclarationList( translationUnit ); 204 203 acceptAll( translationUnit, pass3 ); 205 VerifyCtorDtor Assign::verify( translationUnit );204 VerifyCtorDtor::verify( translationUnit ); 206 205 } 207 206 … … 688 687 } 689 688 690 void VerifyCtorDtor Assign::verify( std::list< Declaration * > & translationUnit ) {691 VerifyCtorDtor Assignverifier;689 void VerifyCtorDtor::verify( std::list< Declaration * > & translationUnit ) { 690 VerifyCtorDtor verifier; 692 691 acceptAll( translationUnit, verifier ); 693 692 } 694 693 695 void VerifyCtorDtor Assign::visit( FunctionDecl * funcDecl ) {694 void VerifyCtorDtor::visit( FunctionDecl * funcDecl ) { 696 695 FunctionType * funcType = funcDecl->get_functionType(); 697 696 std::list< DeclarationWithType * > &returnVals = funcType->get_returnVals(); 698 697 std::list< DeclarationWithType * > ¶ms = funcType->get_parameters(); 699 698 700 if ( InitTweak::isCtorDtorAssign( funcDecl->get_name() )) {699 if ( funcDecl->get_name() == "?{}" || funcDecl->get_name() == "^?{}" ) { 701 700 if ( params.size() == 0 ) { 702 throw SemanticError( "Constructors , destructors, and assignment functions require at least one parameter ", funcDecl );701 throw SemanticError( "Constructors and destructors require at least one parameter ", funcDecl ); 703 702 } 704 703 if ( ! dynamic_cast< PointerType * >( params.front()->get_type() ) ) { 705 throw SemanticError( "First parameter of a constructor , destructor, or assignment functionmust be a pointer ", funcDecl );704 throw SemanticError( "First parameter of a constructor or destructor must be a pointer ", funcDecl ); 706 705 } 707 if ( InitTweak::isCtorDtor( funcDecl->get_name() ) &&returnVals.size() != 0 ) {706 if ( returnVals.size() != 0 ) { 708 707 throw SemanticError( "Constructors and destructors cannot have explicit return values ", funcDecl ); 709 708 } -
src/SynTree/Expression.cc
r9c23f31 r2298f728 28 28 #include "TypeSubstitution.h" 29 29 #include "Common/utility.h" 30 #include "InitTweak/InitTweak.h"31 30 32 31 … … 494 493 495 494 void ImplicitCopyCtorExpr::print( std::ostream &os, int indent ) const { 496 os << "Implicit Copy Constructor Expression: " << std::endl;495 os << std::string( indent, ' ' ) << "Implicit Copy Constructor Expression: " << std::endl; 497 496 assert( callExpr ); 498 497 callExpr->print( os, indent + 2 ); … … 504 503 } 505 504 506 507 ConstructorExpr::ConstructorExpr( Expression * callExpr ) : callExpr( callExpr ) { 508 // allow resolver to type a constructor used as an expression as if it has the same type as its first argument 509 assert( callExpr ); 510 Expression * arg = InitTweak::getCallArg( callExpr, 0 ); 511 assert( arg ); 512 cloneAll( arg->get_results(), results ); 513 } 514 515 ConstructorExpr::ConstructorExpr( const ConstructorExpr & other ) : Expression( other ), callExpr( maybeClone( other.callExpr ) ) { 516 } 517 518 ConstructorExpr::~ConstructorExpr() { 519 delete callExpr; 520 } 521 522 void ConstructorExpr::print( std::ostream &os, int indent ) const { 523 os << "Constructor Expression: " << std::endl; 524 assert( callExpr ); 525 os << std::string( indent+2, ' ' ); 526 callExpr->print( os, indent + 2 ); 527 Expression::print( os, indent ); 505 UntypedValofExpr::UntypedValofExpr( const UntypedValofExpr & other ) : Expression( other ), body ( maybeClone( other.body ) ) {} 506 507 UntypedValofExpr::~UntypedValofExpr() { delete body; } 508 509 void UntypedValofExpr::print( std::ostream &os, int indent ) const { 510 os << std::string( indent, ' ' ) << "Valof Expression: " << std::endl; 511 if ( get_body() != 0 ) 512 get_body()->print( os, indent + 2 ); 528 513 } 529 514 … … 544 529 if ( type ) type->print( os, indent + 2 ); 545 530 if ( initializer ) initializer->print( os, indent + 2 ); 546 }547 548 UntypedValofExpr::UntypedValofExpr( const UntypedValofExpr & other ) : Expression( other ), body ( maybeClone( other.body ) ) {}549 550 UntypedValofExpr::~UntypedValofExpr() { delete body; }551 552 void UntypedValofExpr::print( std::ostream &os, int indent ) const {553 os << std::string( indent, ' ' ) << "Valof Expression: " << std::endl;554 if ( get_body() != 0 )555 get_body()->print( os, indent + 2 );556 531 } 557 532 -
src/SynTree/Expression.h
r9c23f31 r2298f728 595 595 }; 596 596 597 /// ConstructorExpr represents the use of a constructor in an expression context, e.g. int * x = malloc() { 5 };598 class ConstructorExpr : public Expression {599 public:600 ConstructorExpr( Expression * callExpr );601 ConstructorExpr( const ConstructorExpr & other );602 ~ConstructorExpr();603 604 Expression *get_ callExpr() const { return callExpr; }605 void set_callExpr( Expression *newValue ) { callExpr = newValue; }606 607 virtual ConstructorExpr *clone() const { return new ConstructorExpr( *this ); }608 virtual void accept( Visitor &v ) { v.visit( this ); } 609 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); } 610 virtual void print( std::ostream &os, int indent = 0 ) const; 611 private:612 Expression * callExpr;597 /// ValofExpr represents a GCC 'lambda expression' 598 class UntypedValofExpr : public Expression { 599 public: 600 UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {} 601 UntypedValofExpr( const UntypedValofExpr & other ); 602 virtual ~UntypedValofExpr(); 603 604 Expression *get_value(); 605 Statement *get_body() const { return body; } 606 607 virtual UntypedValofExpr *clone() const { return new UntypedValofExpr( *this ); } 608 virtual void accept( Visitor &v ) { v.visit( this ); } 609 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); } 610 virtual void print( std::ostream &os, int indent = 0 ) const; 611 private: 612 Statement *body; 613 613 }; 614 614 … … 635 635 }; 636 636 637 /// ValofExpr represents a GCC 'lambda expression'638 class UntypedValofExpr : public Expression {639 public:640 UntypedValofExpr( Statement *_body, Expression *_aname = nullptr ) : Expression( _aname ), body ( _body ) {}641 UntypedValofExpr( const UntypedValofExpr & other );642 virtual ~UntypedValofExpr();643 644 Expression *get_value();645 Statement *get_body() const { return body; }646 647 virtual UntypedValofExpr *clone() const { return new UntypedValofExpr( *this ); }648 virtual void accept( Visitor &v ) { v.visit( this ); }649 virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }650 virtual void print( std::ostream &os, int indent = 0 ) const;651 private:652 Statement *body;653 };654 655 /// RangeExpr represents a range e.g. '3 ... 5' or '1~10'656 637 class RangeExpr : public Expression { 657 638 public: -
src/SynTree/Mutator.cc
r9c23f31 r2298f728 339 339 } 340 340 341 Expression* Mutator::mutate( ConstructorExpr *ctorExpr ) { 342 mutateAll( ctorExpr->get_results(), *this ); 343 ctorExpr->set_callExpr( maybeMutate( ctorExpr->get_callExpr(), *this ) ); 344 return ctorExpr; 341 Expression *Mutator::mutate( UntypedValofExpr *valofExpr ) { 342 mutateAll( valofExpr->get_results(), *this ); 343 return valofExpr; 345 344 } 346 345 … … 350 349 compLitExpr->set_initializer( maybeMutate( compLitExpr->get_initializer(), *this ) ); 351 350 return compLitExpr; 352 }353 354 Expression *Mutator::mutate( UntypedValofExpr *valofExpr ) {355 mutateAll( valofExpr->get_results(), *this );356 return valofExpr;357 351 } 358 352 … … 453 447 } 454 448 455 Type *Mutator::mutate( ZeroType *zeroType ) {456 mutateAll( zeroType->get_forall(), *this );457 return zeroType;458 }459 460 Type *Mutator::mutate( OneType *oneType ) {461 mutateAll( oneType->get_forall(), *this );462 return oneType;463 }464 465 449 Initializer *Mutator::mutate( SingleInit *singleInit ) { 466 450 singleInit->set_value( singleInit->get_value()->acceptMutator( *this ) ); -
src/SynTree/Mutator.h
r9c23f31 r2298f728 76 76 virtual Expression* mutate( AsmExpr *asmExpr ); 77 77 virtual Expression* mutate( ImplicitCopyCtorExpr *impCpCtorExpr ); 78 virtual Expression* mutate( ConstructorExpr *ctorExpr );78 virtual Expression* mutate( UntypedValofExpr *valofExpr ); 79 79 virtual Expression* mutate( CompoundLiteralExpr *compLitExpr ); 80 virtual Expression* mutate( UntypedValofExpr *valofExpr );81 80 virtual Expression* mutate( RangeExpr *rangeExpr ); 82 81 … … 95 94 virtual Type* mutate( AttrType *attrType ); 96 95 virtual Type* mutate( VarArgsType *varArgsType ); 97 virtual Type* mutate( ZeroType *zeroType );98 virtual Type* mutate( OneType *oneType );99 96 100 97 virtual Initializer* mutate( SingleInit *singleInit ); -
src/SynTree/SynTree.h
r9c23f31 r2298f728 81 81 class AsmExpr; 82 82 class ImplicitCopyCtorExpr; 83 class ConstructorExpr;83 class UntypedValofExpr; 84 84 class CompoundLiteralExpr; 85 class UntypedValofExpr;86 85 class RangeExpr; 87 86 … … 102 101 class AttrType; 103 102 class VarArgsType; 104 class ZeroType;105 class OneType;106 103 107 104 class Initializer; -
src/SynTree/Type.h
r9c23f31 r2298f728 418 418 }; 419 419 420 /// Represents a zero constant421 class ZeroType : public Type {422 public:423 ZeroType();424 ZeroType( Type::Qualifiers tq );425 426 virtual ZeroType *clone() const { return new ZeroType( *this ); }427 virtual void accept( Visitor &v ) { v.visit( this ); }428 virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }429 virtual void print( std::ostream &os, int indent = 0 ) const;430 };431 432 /// Represents a one constant433 class OneType : public Type {434 public:435 OneType();436 OneType( Type::Qualifiers tq );437 438 virtual OneType *clone() const { return new OneType( *this ); }439 virtual void accept( Visitor &v ) { v.visit( this ); }440 virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }441 virtual void print( std::ostream &os, int indent = 0 ) const;442 };443 444 420 inline Type::Qualifiers &Type::Qualifiers::operator+=( const Type::Qualifiers &other ) { 445 421 isConst |= other.isConst; -
src/SynTree/TypeSubstitution.cc
r9c23f31 r2298f728 179 179 } 180 180 181 Type * TypeSubstitution::mutate( VoidType * voidType ) {182 return handleType( voidType );181 Type * TypeSubstitution::mutate( VoidType *basicType ) { 182 return handleType( basicType ); 183 183 } 184 184 … … 221 221 Type * TypeSubstitution::mutate( VarArgsType *varArgsType ) { 222 222 return handleType( varArgsType ); 223 }224 225 Type * TypeSubstitution::mutate( ZeroType *zeroType ) {226 return handleType( zeroType );227 }228 229 Type * TypeSubstitution::mutate( OneType *oneType ) {230 return handleType( oneType );231 223 } 232 224 -
src/SynTree/TypeSubstitution.h
r9c23f31 r2298f728 76 76 virtual Type* mutate(TupleType *tupleType); 77 77 virtual Type* mutate(VarArgsType *varArgsType); 78 virtual Type* mutate(ZeroType *zeroType);79 virtual Type* mutate(OneType *oneType);80 78 81 79 // TODO: worry about traversing into a forall-qualified function type or type decl with assertions -
src/SynTree/Visitor.cc
r9c23f31 r2298f728 287 287 } 288 288 289 void Visitor::visit( ConstructorExpr * ctorExpr ) {290 acceptAll( ctorExpr->get_results(), *this );291 maybeAccept( ctorExpr->get_callExpr(), *this );289 void Visitor::visit( UntypedValofExpr *valofExpr ) { 290 acceptAll( valofExpr->get_results(), *this ); 291 maybeAccept( valofExpr->get_body(), *this ); 292 292 } 293 293 … … 296 296 maybeAccept( compLitExpr->get_type(), *this ); 297 297 maybeAccept( compLitExpr->get_initializer(), *this ); 298 }299 300 void Visitor::visit( UntypedValofExpr *valofExpr ) {301 acceptAll( valofExpr->get_results(), *this );302 maybeAccept( valofExpr->get_body(), *this );303 298 } 304 299 … … 383 378 } 384 379 385 void Visitor::visit( ZeroType *zeroType ) {386 acceptAll( zeroType->get_forall(), *this );387 }388 389 void Visitor::visit( OneType *oneType ) {390 acceptAll( oneType->get_forall(), *this );391 }392 393 380 void Visitor::visit( SingleInit *singleInit ) { 394 381 singleInit->get_value()->accept( *this ); -
src/SynTree/Visitor.h
r9c23f31 r2298f728 76 76 virtual void visit( AsmExpr *asmExpr ); 77 77 virtual void visit( ImplicitCopyCtorExpr *impCpCtorExpr ); 78 virtual void visit( ConstructorExpr * ctorExpr );78 virtual void visit( UntypedValofExpr *valofExpr ); 79 79 virtual void visit( CompoundLiteralExpr *compLitExpr ); 80 virtual void visit( UntypedValofExpr *valofExpr );81 80 virtual void visit( RangeExpr *rangeExpr ); 82 81 … … 95 94 virtual void visit( AttrType *attrType ); 96 95 virtual void visit( VarArgsType *varArgsType ); 97 virtual void visit( ZeroType *zeroType );98 virtual void visit( OneType *oneType );99 96 100 97 virtual void visit( SingleInit *singleInit ); -
src/SynTree/module.mk
r9c23f31 r2298f728 26 26 SynTree/AttrType.cc \ 27 27 SynTree/VarArgsType.cc \ 28 SynTree/ZeroOneType.cc \29 28 SynTree/Constant.cc \ 30 29 SynTree/Expression.cc \ -
src/examples/gc_no_raii/src/internal/card_table.h
r9c23f31 r2298f728 18 18 }; 19 19 20 static inline void ?{}(card_table_t*this)20 static inline void ctor_card(card_table_t* const this) 21 21 { 22 22 this->count = 0; 23 23 } 24 24 25 static inline void ^?{}(card_table_t*this)25 static inline void dtor_card(card_table_t* const this) 26 26 { 27 27 -
src/examples/gc_no_raii/src/internal/memory_pool.c
r9c23f31 r2298f728 11 11 const size_t gc_pool_header_size = (size_t)( &(((gc_memory_pool*)NULL)->start_p) ); 12 12 13 void ?{}(gc_memory_pool*this, size_t size, gc_memory_pool* next, gc_memory_pool* mirror, uint8_t type)13 void ctor(gc_memory_pool *const this, size_t size, gc_memory_pool* next, gc_memory_pool* mirror, uint8_t type) 14 14 { 15 15 this->mirror = mirror; … … 17 17 this->type_code = type; 18 18 19 this->cards = ( (card_table_t*)malloc(sizeof(card_table_t)) ){}; 19 card_table_t* new = (card_table_t*)malloc(sizeof(card_table_t)); 20 this->cards = new; 21 ctor_card(this->cards); 20 22 21 23 this->end_p = ((uint8_t*)this) + size; … … 27 29 } 28 30 29 void ^?{}(gc_memory_pool*this)31 void dtor(gc_memory_pool *const this) 30 32 { 31 ^(&this->cards){};33 dtor_card(this->cards); 32 34 free(this->cards); 33 35 } -
src/examples/gc_no_raii/src/internal/memory_pool.h
r9c23f31 r2298f728 27 27 }; 28 28 29 void ?{}( gc_memory_pool*this,29 void ctor( gc_memory_pool *const this, 30 30 size_t size, 31 31 gc_memory_pool* next, … … 34 34 ); 35 35 36 void ^?{}(gc_memory_pool*this);36 void dtor(gc_memory_pool *const this); 37 37 38 38 struct gc_pool_object_iterator -
src/examples/gc_no_raii/src/internal/state.c
r9c23f31 r2298f728 131 131 132 132 this->from_space = (gc_memory_pool*)(pal_allocPool(POOL_SIZE_BYTES, 1)); 133 this->to_space = (gc_memory_pool*)(pal_allocPool(POOL_SIZE_BYTES, 1));134 135 this->from_space{ POOL_SIZE_BYTES, old_from_space, this->to_space, this->from_code };136 this->to_space { POOL_SIZE_BYTES, old_to_space, this->from_space, (~this->from_code) & 0x01 };133 this->to_space = (gc_memory_pool*)(pal_allocPool(POOL_SIZE_BYTES, 1)); 134 135 ctor(this->from_space, POOL_SIZE_BYTES, old_from_space, this->to_space, this->from_code); 136 ctor(this->to_space, POOL_SIZE_BYTES, old_to_space, this->from_space, (~this->from_code) & 0x01); 137 137 138 138 this->total_space += gc_pool_size_used(this->from_space); -
src/include/assert.h
r9c23f31 r2298f728 22 22 #define assertf(expr, fmt, ...) ((expr) ? static_cast<void>(0) : __assert_fail_f(__VSTRINGIFY__(expr), __FILE__, __LINE__, __PRETTY_FUNCTION__, fmt, ## __VA_ARGS__ )) 23 23 24 void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ) __attribute__((noreturn));24 void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ); 25 25 26 26 template<typename T, typename U> -
src/libcfa/containers/vector
r9c23f31 r2298f728 20 20 } 21 21 22 #define DESTROY(x) 23 22 24 //------------------------------------------------------------------------------ 23 25 //Declaration 24 26 trait allocator_c(otype T, otype allocator_t) 25 27 { 26 void realloc_storage(allocator_t*, size_t); 27 T* data(allocator_t*); 28 void ctor(allocator_t* const); 29 void dtor(allocator_t* const); 30 void realloc_storage(allocator_t* const, size_t); 31 T* data(allocator_t* const); 28 32 }; 29 30 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))31 struct vector;32 33 //------------------------------------------------------------------------------34 //Initialization35 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))36 void ?{}(vector(T, allocator_t)* this);37 38 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))39 void ?{}(vector(T, allocator_t)* this, vector(T, allocator_t) rhs);40 41 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))42 vector(T, allocator_t) ?=?(vector(T, allocator_t)* this, vector(T, allocator_t) rhs);43 44 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))45 void ^?{}(vector(T, allocator_t)* this);46 33 47 34 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) … … 53 40 54 41 //------------------------------------------------------------------------------ 42 //Initialization 43 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 44 void ctor(vector(T, allocator_t) *const this); 45 46 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 47 void dtor(vector(T, allocator_t) *const this); 48 49 //------------------------------------------------------------------------------ 55 50 //Capacity 56 51 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 57 static inline bool empty(vector(T, allocator_t) *this)52 static inline bool empty(vector(T, allocator_t) *const this) 58 53 { 59 54 return this->size == 0; … … 61 56 62 57 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 63 static inline size_t size(vector(T, allocator_t) *this)58 static inline size_t size(vector(T, allocator_t) *const this) 64 59 { 65 60 return this->size; … … 67 62 68 63 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 69 static inline void reserve(vector(T, allocator_t) *this, size_t size)64 static inline void reserve(vector(T, allocator_t) *const this, size_t size) 70 65 { 71 66 realloc_storage(&this->storage, this->size+1); … … 75 70 //Element access 76 71 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 77 static inline T at(vector(T, allocator_t) *this, size_t index)72 static inline T at(vector(T, allocator_t) *const this, size_t index) 78 73 { 79 74 return data(&this->storage)[index]; … … 81 76 82 77 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 83 static inline T ?[?](vector(T, allocator_t) *this, size_t index)78 static inline T ?[?](vector(T, allocator_t) *const this, size_t index) 84 79 { 85 80 return data(&this->storage)[index]; … … 87 82 88 83 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 89 static inline T front(vector(T, allocator_t) *this)84 static inline T front(vector(T, allocator_t) *const this) 90 85 { 91 86 return data(&this->storage)[0]; … … 93 88 94 89 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 95 static inline T back(vector(T, allocator_t) *this)90 static inline T back(vector(T, allocator_t) *const this) 96 91 { 97 92 return data(&this->storage)[this->size - 1]; … … 101 96 //Modifiers 102 97 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 103 void push_back(vector(T, allocator_t) *this, T value);98 void push_back(vector(T, allocator_t) *const this, T value); 104 99 105 100 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 106 void pop_back(vector(T, allocator_t) *this);101 void pop_back(vector(T, allocator_t) *const this); 107 102 108 103 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 109 void clear(vector(T, allocator_t) *this);104 void clear(vector(T, allocator_t) *const this); 110 105 111 106 //------------------------------------------------------------------------------ 112 107 //Iterators 113 108 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 114 static inline T* begin(vector(T, allocator_t) *this)109 static inline T* begin(vector(T, allocator_t) *const this) 115 110 { 116 111 return data(&this->storage); … … 118 113 119 114 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 120 static inline const T* cbegin(const vector(T, allocator_t) *this)115 static inline const T* cbegin(const vector(T, allocator_t) *const this) 121 116 { 122 117 return data(&this->storage); … … 124 119 125 120 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 126 static inline T* end(vector(T, allocator_t) *this)121 static inline T* end(vector(T, allocator_t) *const this) 127 122 { 128 123 return data(&this->storage) + this->size; … … 130 125 131 126 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 132 static inline const T* cend(const vector(T, allocator_t) *this)127 static inline const T* cend(const vector(T, allocator_t) *const this) 133 128 { 134 129 return data(&this->storage) + this->size; … … 145 140 146 141 forall(otype T) 147 void ?{}(heap_allocator(T)*this);142 void ctor(heap_allocator(T) *const this); 148 143 149 144 forall(otype T) 150 void ?{}(heap_allocator(T)* this, heap_allocator(T) rhs);145 void dtor(heap_allocator(T) *const this); 151 146 152 147 forall(otype T) 153 heap_allocator(T) ?=?(heap_allocator(T)* this, heap_allocator(T) rhs);148 void realloc_storage(heap_allocator(T) *const this, size_t size); 154 149 155 150 forall(otype T) 156 void ^?{}(heap_allocator(T)* this); 157 158 forall(otype T) 159 void realloc_storage(heap_allocator(T)* this, size_t size); 160 161 forall(otype T) 162 static inline T* data(heap_allocator(T)* this) 151 static inline T* data(heap_allocator(T) *const this) 163 152 { 164 153 return this->storage; -
src/libcfa/containers/vector.c
r9c23f31 r2298f728 18 18 #include <stdlib> 19 19 20 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))21 void copy_internal(vector(T, allocator_t)* this, vector(T, allocator_t)* other);22 23 20 //------------------------------------------------------------------------------ 24 21 //Initialization 25 22 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 26 void ?{}(vector(T, allocator_t)*this)23 void ctor(vector(T, allocator_t) *const this) 27 24 { 28 (&this->storage){};25 ctor(&this->storage); 29 26 this->size = 0; 30 27 } 31 28 32 29 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 33 void ?{}(vector(T, allocator_t)* this, vector(T, allocator_t) rhs) 34 { 35 (&this->storage){ rhs.storage }; 36 copy_internal(this, &rhs); 37 } 38 39 // forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 40 // vector(T, allocator_t) ?=?(vector(T, allocator_t)* this, vector(T, allocator_t) rhs) 41 // { 42 // (&this->storage){}; 43 // copy_internal(this, &rhs); 44 // return *this; 45 // } 46 47 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 48 void ^?{}(vector(T, allocator_t)* this) 30 void dtor(vector(T, allocator_t) *const this) 49 31 { 50 32 clear(this); 51 ^(&this->storage){};33 dtor(&this->storage); 52 34 } 53 35 … … 55 37 //Modifiers 56 38 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 57 void push_back(vector(T, allocator_t) *this, T value)39 void push_back(vector(T, allocator_t) *const this, T value) 58 40 { 59 41 realloc_storage(&this->storage, this->size+1); … … 63 45 64 46 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 65 void pop_back(vector(T, allocator_t) *this)47 void pop_back(vector(T, allocator_t) *const this) 66 48 { 67 49 this->size--; 68 ^(&data(&this->storage)[this->size]){};50 DESTROY(data(&this->storage)[this->size]); 69 51 } 70 52 71 53 forall(otype T, otype allocator_t | allocator_c(T, allocator_t)) 72 void clear(vector(T, allocator_t) *this)54 void clear(vector(T, allocator_t) *const this) 73 55 { 74 56 for(size_t i = 0; i < this->size; i++) 75 57 { 76 ^(&data(&this->storage)[this->size]){};58 DESTROY(data(&this->storage)[this->size]); 77 59 } 78 60 this->size = 0; … … 80 62 81 63 //------------------------------------------------------------------------------ 82 //Internal Helpers83 84 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))85 void copy_internal(vector(T, allocator_t)* this, vector(T, allocator_t)* other)86 {87 this->size = other->size;88 for(size_t i = 0; i < this->size; i++) {89 (&data(&this->storage)[this->size]){ data(&other->storage)[other->size] };90 }91 }92 93 //------------------------------------------------------------------------------94 64 //Allocator 95 65 forall(otype T) 96 void ?{}(heap_allocator(T)*this)66 void ctor(heap_allocator(T) *const this) 97 67 { 98 68 this->storage = 0; … … 101 71 102 72 forall(otype T) 103 void ?{}(heap_allocator(T)* this, heap_allocator(T) rhs) 104 { 105 this->capacity = rhs.capacity; 106 this->storage = (T*)realloc((void*)this->storage, this->capacity * sizeof(T)); 107 } 108 109 forall(otype T) 110 heap_allocator(T) ?=?(heap_allocator(T)* this, heap_allocator(T) rhs) 111 { 112 this->capacity = rhs.capacity; 113 this->storage = (T*)realloc((void*)this->storage, this->capacity * sizeof(T)); 114 return *this; 115 } 116 117 forall(otype T) 118 void ^?{}(heap_allocator(T)* this) 73 void dtor(heap_allocator(T) *const this) 119 74 { 120 75 free(this->storage); … … 122 77 123 78 forall(otype T) 124 inline void realloc_storage(heap_allocator(T) *this, size_t size)79 inline void realloc_storage(heap_allocator(T) *const this, size_t size) 125 80 { 126 81 enum { GROWTH_RATE = 2 }; -
src/libcfa/prelude.cf
r9c23f31 r2298f728 636 636 637 637 // default ctor 638 void ?{}( _Bool * ) ;639 void ?{}( char * ) ;640 void ?{}( unsigned char * ) ;641 void ?{}( char signed * ) ;642 void ?{}( int short * ) ;643 void ?{}( int short unsigned * ) ;644 void ?{}( signed int * ) ;645 void ?{}( unsigned int * ) ;646 void ?{}( signed long int * ) ;647 void ?{}( unsigned long int * ) ;648 void ?{}( signed long long int * ) ;649 void ?{}( unsigned long long int * ) ;650 void ?{}( float * ) ;651 void ?{}( double * ) ;652 void ?{}( long double * ) ;653 void ?{}( float _Complex * ) ;654 void ?{}( double _Complex * ) ;655 void ?{}( long double _Complex * ) ;638 void ?{}( _Bool * ), ?{}( volatile _Bool * ); 639 void ?{}( char * ), ?{}( volatile char * ); 640 void ?{}( unsigned char * ), ?{}( volatile unsigned char * ); 641 void ?{}( char signed * ), ?{}( volatile char signed * ); 642 void ?{}( int short * ), ?{}( volatile int short * ); 643 void ?{}( int short unsigned * ), ?{}( volatile int short unsigned * ); 644 void ?{}( signed int * ), ?{}( volatile signed int * ); 645 void ?{}( unsigned int * ), ?{}( volatile unsigned int * ); 646 void ?{}( signed long int * ), ?{}( volatile signed long int * ); 647 void ?{}( unsigned long int * ), ?{}( volatile unsigned long int * ); 648 void ?{}( signed long long int * ), ?{}( volatile signed long long int * ); 649 void ?{}( unsigned long long int * ), ?{}( volatile unsigned long long int * ); 650 void ?{}( float * ), ?{}( volatile float * ); 651 void ?{}( double * ), ?{}( volatile double * ); 652 void ?{}( long double * ), ?{}( volatile long double * ); 653 void ?{}( float _Complex * ), ?{}( volatile float _Complex * ); 654 void ?{}( double _Complex * ), ?{}( volatile double _Complex * ); 655 void ?{}( long double _Complex * ), ?{}( volatile long double _Complex * ); 656 656 657 657 // copy ctor 658 void ?{}( _Bool *, _Bool ) ;659 void ?{}( char *, char ) ;660 void ?{}( unsigned char *, unsigned char ) ;661 void ?{}( char signed *, char signed ) ;662 void ?{}( int short *, int short ) ;663 void ?{}( int short unsigned *, int short unsigned ) ;664 void ?{}( signed int *, signed int) ;665 void ?{}( unsigned int *, unsigned int) ;666 void ?{}( signed long int *, signed long int) ;667 void ?{}( unsigned long int *, unsigned long int) ;668 void ?{}( signed long long int *, signed long long int) ;669 void ?{}( unsigned long long int *, unsigned long long int) ;670 void ?{}( float *, float) ;671 void ?{}( double *, double) ;672 void ?{}( long double *, long double) ;673 void ?{}( float _Complex *, float _Complex) ;674 void ?{}( double _Complex *, double _Complex) ;675 void ?{}( long double _Complex *, long double _Complex) ;658 void ?{}( _Bool *, _Bool ), ?{}( volatile _Bool *, _Bool ); 659 void ?{}( char *, char ), ?{}( volatile char *, char ); 660 void ?{}( unsigned char *, unsigned char ), ?{}( volatile unsigned char *, unsigned char ); 661 void ?{}( char signed *, char signed ), ?{}( volatile char signed *, char signed ); 662 void ?{}( int short *, int short ), ?{}( volatile int short *, int short ); 663 void ?{}( int short unsigned *, int short unsigned ), ?{}( volatile int short unsigned *, int short unsigned ); 664 void ?{}( signed int *, signed int), ?{}( volatile signed int *, signed int ); 665 void ?{}( unsigned int *, unsigned int), ?{}( volatile unsigned int *, unsigned int ); 666 void ?{}( signed long int *, signed long int), ?{}( volatile signed long int *, signed long int ); 667 void ?{}( unsigned long int *, unsigned long int), ?{}( volatile unsigned long int *, unsigned long int ); 668 void ?{}( signed long long int *, signed long long int), ?{}( volatile signed long long int *, signed long long int ); 669 void ?{}( unsigned long long int *, unsigned long long int), ?{}( volatile unsigned long long int *, unsigned long long int ); 670 void ?{}( float *, float), ?{}( volatile float *, float ); 671 void ?{}( double *, double), ?{}( volatile double *, double ); 672 void ?{}( long double *, long double), ?{}( volatile long double *, long double ); 673 void ?{}( float _Complex *, float _Complex), ?{}( volatile float _Complex *, float _Complex ); 674 void ?{}( double _Complex *, double _Complex), ?{}( volatile double _Complex *, double _Complex ); 675 void ?{}( long double _Complex *, long double _Complex), ?{}( volatile long double _Complex *, long double _Complex ); 676 676 677 677 // dtor 678 void ^?{}( _Bool * ) ;679 void ^?{}( char * ) ;680 void ^?{}( char unsigned * ) ;681 void ^?{}( char signed * ) ;682 void ^?{}( int short * ) ;683 void ^?{}( int short unsigned * ) ;684 void ^?{}( signed int * ) ;685 void ^?{}( unsigned int * ) ;686 void ^?{}( signed long int * ) ;687 void ^?{}( unsigned long int * ) ;688 void ^?{}( signed long long int * ) ;689 void ^?{}( unsigned long long int * ) ;690 void ^?{}( float * ) ;691 void ^?{}( double * ) ;692 void ^?{}( long double * ) ;693 void ^?{}( float _Complex * ) ;694 void ^?{}( double _Complex * ) ;695 void ^?{}( long double _Complex * ) ;678 void ^?{}( _Bool * ), ^?{}( volatile _Bool * ); 679 void ^?{}( char * ), ^?{}( volatile char * ); 680 void ^?{}( char unsigned * ), ^?{}( volatile char unsigned * ); 681 void ^?{}( char signed * ), ^?{}( volatile char signed * ); 682 void ^?{}( int short * ), ^?{}( volatile int short * ); 683 void ^?{}( int short unsigned * ), ^?{}( volatile int short unsigned * ); 684 void ^?{}( signed int * ), ^?{}( volatile signed int * ); 685 void ^?{}( unsigned int * ), ^?{}( volatile unsigned int * ); 686 void ^?{}( signed long int * ), ^?{}( volatile signed long int * ); 687 void ^?{}( unsigned long int * ), ^?{}( volatile unsigned long int * ); 688 void ^?{}( signed long long int * ), ^?{}( volatile signed long long int * ); 689 void ^?{}( unsigned long long int * ), ^?{}( volatile unsigned long long int * ); 690 void ^?{}( float * ), ^?{}( volatile float * ); 691 void ^?{}( double * ), ^?{}( volatile double * ); 692 void ^?{}( long double * ), ^?{}( volatile long double * ); 693 void ^?{}( float _Complex * ), ^?{}( volatile float _Complex * ); 694 void ^?{}( double _Complex * ), ^?{}( volatile double _Complex * ); 695 void ^?{}( long double _Complex * ), ^?{}( volatile long double _Complex * ); 696 696 697 697 // // default ctor … … 719 719 720 720 forall( dtype DT ) void ?{}( DT * *, DT * ); 721 forall( dtype DT ) void ?{}( DT * volatile *, DT * ); 721 722 forall( dtype DT ) void ?{}( const DT * *, DT * ); 723 forall( dtype DT ) void ?{}( const DT * volatile *, DT * ); 722 724 forall( dtype DT ) void ?{}( const DT * *, const DT * ); 725 forall( dtype DT ) void ?{}( const DT * volatile *, const DT * ); 723 726 forall( dtype DT ) void ?{}( volatile DT * *, DT * ); 727 forall( dtype DT ) void ?{}( volatile DT * volatile *, DT * ); 724 728 forall( dtype DT ) void ?{}( volatile DT * *, volatile DT * ); 729 forall( dtype DT ) void ?{}( volatile DT * volatile *, volatile DT * ); 725 730 726 731 forall( dtype DT ) void ?{}( const volatile DT * *, DT * ); 732 forall( dtype DT ) void ?{}( const volatile DT * volatile *, DT * ); 727 733 forall( dtype DT ) void ?{}( const volatile DT * *, const DT * ); 734 forall( dtype DT ) void ?{}( const volatile DT * volatile *, const DT * ); 728 735 forall( dtype DT ) void ?{}( const volatile DT * *, volatile DT * ); 736 forall( dtype DT ) void ?{}( const volatile DT * volatile *, volatile DT * ); 729 737 forall( dtype DT ) void ?{}( const volatile DT * *, const volatile DT * ); 738 forall( dtype DT ) void ?{}( const volatile DT * volatile *, const volatile DT * ); 730 739 731 740 forall( dtype DT ) void ?{}( DT * *, void * ); 741 forall( dtype DT ) void ?{}( DT * volatile *, void * ); 732 742 forall( dtype DT ) void ?{}( const DT * *, void * ); 743 forall( dtype DT ) void ?{}( const DT * volatile *, void * ); 733 744 forall( dtype DT ) void ?{}( const DT * *, const void * ); 745 forall( dtype DT ) void ?{}( const DT * volatile *, const void * ); 734 746 forall( dtype DT ) void ?{}( volatile DT * *, void * ); 747 forall( dtype DT ) void ?{}( volatile DT * volatile *, void * ); 735 748 forall( dtype DT ) void ?{}( volatile DT * *, volatile void * ); 749 forall( dtype DT ) void ?{}( volatile DT * volatile *, volatile void * ); 736 750 737 751 forall( dtype DT ) void ?{}( const volatile DT * *, void * ); 752 forall( dtype DT ) void ?{}( const volatile DT * volatile *, void * ); 738 753 forall( dtype DT ) void ?{}( const volatile DT * *, const void * ); 754 forall( dtype DT ) void ?{}( const volatile DT * volatile *, const void * ); 739 755 forall( dtype DT ) void ?{}( const volatile DT * *, volatile void * ); 756 forall( dtype DT ) void ?{}( const volatile DT * volatile *, volatile void * ); 740 757 forall( dtype DT ) void ?{}( const volatile DT * *, const volatile void * ); 758 forall( dtype DT ) void ?{}( const volatile DT * volatile *, const volatile void * ); 741 759 742 760 forall( dtype DT ) void ?{}( void * *, DT * ); 761 forall( dtype DT ) void ?{}( void * volatile *, DT * ); 743 762 forall( dtype DT ) void ?{}( const void * *, DT * ); 763 forall( dtype DT ) void ?{}( const void * volatile *, DT * ); 744 764 forall( dtype DT ) void ?{}( const void * *, const DT * ); 765 forall( dtype DT ) void ?{}( const void * volatile *, const DT * ); 745 766 forall( dtype DT ) void ?{}( volatile void * *, DT * ); 767 forall( dtype DT ) void ?{}( volatile void * volatile *, DT * ); 746 768 forall( dtype DT ) void ?{}( volatile void * *, volatile DT * ); 769 forall( dtype DT ) void ?{}( volatile void * volatile *, volatile DT * ); 747 770 forall( dtype DT ) void ?{}( const volatile void * *, DT * ); 771 forall( dtype DT ) void ?{}( const volatile void * volatile *, DT * ); 748 772 forall( dtype DT ) void ?{}( const volatile void * *, const DT * ); 773 forall( dtype DT ) void ?{}( const volatile void * volatile *, const DT * ); 749 774 forall( dtype DT ) void ?{}( const volatile void * *, volatile DT * ); 775 forall( dtype DT ) void ?{}( const volatile void * volatile *, volatile DT * ); 750 776 forall( dtype DT ) void ?{}( const volatile void * *, const volatile DT * ); 777 forall( dtype DT ) void ?{}( const volatile void * volatile *, const volatile DT * ); 751 778 752 779 void ?{}( void * *, void * ); 780 void ?{}( void * volatile *, void * ); 753 781 void ?{}( const void * *, void * ); 782 void ?{}( const void * volatile *, void * ); 754 783 void ?{}( const void * *, const void * ); 784 void ?{}( const void * volatile *, const void * ); 755 785 void ?{}( volatile void * *, void * ); 786 void ?{}( volatile void * volatile *, void * ); 756 787 void ?{}( volatile void * *, volatile void * ); 788 void ?{}( volatile void * volatile *, volatile void * ); 757 789 void ?{}( const volatile void * *, void * ); 790 void ?{}( const volatile void * volatile *, void * ); 758 791 void ?{}( const volatile void * *, const void * ); 792 void ?{}( const volatile void * volatile *, const void * ); 759 793 void ?{}( const volatile void * *, volatile void * ); 794 void ?{}( const volatile void * volatile *, volatile void * ); 760 795 void ?{}( const volatile void * *, const volatile void * ); 796 void ?{}( const volatile void * volatile *, const volatile void * ); 761 797 762 798 //forall( dtype DT ) void ?{}( DT * *, forall( dtype DT2 ) const DT2 * ); 763 799 //forall( dtype DT ) void ?{}( DT * volatile *, forall( dtype DT2 ) const DT2 * ); 764 800 forall( dtype DT ) void ?{}( const DT * *, forall( dtype DT2 ) const DT2 * ); 801 forall( dtype DT ) void ?{}( const DT * volatile *, forall( dtype DT2 ) const DT2 * ); 765 802 //forall( dtype DT ) void ?{}( volatile DT * *, forall( dtype DT2 ) const DT2 * ); 766 803 //forall( dtype DT ) void ?{}( volatile DT * volatile *, forall( dtype DT2 ) const DT2 * ); 767 804 forall( dtype DT ) void ?{}( const volatile DT * *, forall( dtype DT2 ) const DT2 * ); 805 forall( dtype DT ) void ?{}( const volatile DT * volatile *, forall( dtype DT2 ) const DT2 * ); 768 806 769 807 forall( ftype FT ) void ?{}( FT * *, forall( ftype FT2 ) FT2 * ); 808 forall( ftype FT ) void ?{}( FT * volatile *, forall( ftype FT2 ) FT2 * ); 770 809 771 810 // default ctors 772 811 forall( ftype FT ) void ?{}( FT * * ); 812 forall( ftype FT ) void ?{}( FT * volatile * ); 773 813 774 814 forall( dtype DT ) void ?{}( DT * *); 815 forall( dtype DT ) void ?{}( DT * volatile *); 775 816 forall( dtype DT ) void ?{}( const DT * *); 817 forall( dtype DT ) void ?{}( const DT * volatile *); 776 818 forall( dtype DT ) void ?{}( volatile DT * *); 819 forall( dtype DT ) void ?{}( volatile DT * volatile *); 777 820 forall( dtype DT ) void ?{}( const volatile DT * *); 821 forall( dtype DT ) void ?{}( const volatile DT * volatile *); 778 822 779 823 void ?{}( void * *); 824 void ?{}( void * volatile *); 780 825 void ?{}( const void * *); 826 void ?{}( const void * volatile *); 781 827 void ?{}( volatile void * *); 828 void ?{}( volatile void * volatile *); 782 829 void ?{}( const volatile void * *); 830 void ?{}( const volatile void * volatile *); 783 831 784 832 // dtors 785 833 forall( ftype FT ) void ^?{}( FT * * ); 834 forall( ftype FT ) void ^?{}( FT * volatile * ); 786 835 787 836 forall( dtype DT ) void ^?{}( DT * *); 837 forall( dtype DT ) void ^?{}( DT * volatile *); 788 838 forall( dtype DT ) void ^?{}( const DT * *); 839 forall( dtype DT ) void ^?{}( const DT * volatile *); 789 840 forall( dtype DT ) void ^?{}( volatile DT * *); 841 forall( dtype DT ) void ^?{}( volatile DT * volatile *); 790 842 forall( dtype DT ) void ^?{}( const volatile DT * *); 843 forall( dtype DT ) void ^?{}( const volatile DT * volatile *); 791 844 792 845 void ^?{}( void * *); 846 void ^?{}( void * volatile *); 793 847 void ^?{}( const void * *); 848 void ^?{}( const void * volatile *); 794 849 void ^?{}( volatile void * *); 850 void ^?{}( volatile void * volatile *); 795 851 void ^?{}( const volatile void * *); 852 void ^?{}( const volatile void * volatile *); 796 853 797 854 // Local Variables: // -
src/tests/libcfa_vector.c
r9c23f31 r2298f728 1 // 1 // 2 2 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo 3 3 // 4 4 // The contents of this file are covered under the licence agreement in the 5 5 // file "LICENCE" distributed with Cforall. 6 // 7 // libcfa_vector.c -- 8 // 6 // 7 // libcfa_vector.c -- 8 // 9 9 // Author : Thierry Delisle 10 10 // Created On : Mon Jul 4 23:36:19 2016 … … 12 12 // Last Modified On : Tue Jul 5 15:08:05 2016 13 13 // Update Count : 26 14 // 14 // 15 15 16 16 #include <fstream> … … 28 28 int main() { 29 29 vector( int, heap_allocator(int) ) iv; 30 ctor( &iv ); 30 31 31 32 assert( empty( &iv ) );
Note:
See TracChangeset
for help on using the changeset viewer.