Changes in src/MakeLibCfa.cc [f1e012b:d3b7937]
- File:
-
- 1 edited
-
src/MakeLibCfa.cc (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/MakeLibCfa.cc
rf1e012b rd3b7937 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // MakeLibCfa.cc -- 7 // MakeLibCfa.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sat May 16 10:33:33 2015 11 // Last Modified By : Rob Schluntz12 // Last Modified On : Tue Jan 19 13:20:26 201613 // Update Count : 4014 // 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jun 26 16:52:59 2015 13 // Update Count : 14 14 // 15 15 16 16 #include "MakeLibCfa.h" … … 22 22 #include "SynTree/Initializer.h" 23 23 #include "CodeGen/OperatorTable.h" 24 #include " UniqueName.h"24 #include "Common/UniqueName.h" 25 25 26 26 namespace LibCfa { … … 29 29 void visit( FunctionDecl* funcDecl ); 30 30 void visit( ObjectDecl* objDecl ); 31 31 32 32 std::list< Declaration* > &get_newDecls() { return newDecls; } 33 33 private: … … 43 43 void MakeLibCfa::visit( FunctionDecl* origFuncDecl ) { 44 44 if ( origFuncDecl->get_linkage() != LinkageSpec::Intrinsic ) return; 45 45 46 46 FunctionDecl *funcDecl = origFuncDecl->clone(); 47 47 CodeGen::OperatorInfo opInfo; … … 54 54 assert( param != funcDecl->get_functionType()->get_parameters().end() ); 55 55 56 for ( ; param != funcDecl->get_functionType()->get_parameters().end(); ++param ) { 57 if ( (*param)->get_name() == "" ) { 58 (*param)->set_name( paramNamer.newName() ); 59 (*param)->set_linkage( LinkageSpec::C ); 60 } 61 newExpr->get_args().push_back( new VariableExpr( *param ) ); 62 } // for 63 64 funcDecl->set_statements( new CompoundStmt( std::list< Label >() ) ); 65 newDecls.push_back( funcDecl ); 56 if ( (*param)->get_name() == "" ) { 57 (*param)->set_name( paramNamer.newName() ); 58 (*param)->set_linkage( LinkageSpec::C ); 59 } // if 66 60 67 61 switch ( opInfo.type ) { … … 71 65 case CodeGen::OT_POSTFIX: 72 66 case CodeGen::OT_INFIX: 67 newExpr->get_args().push_back( new VariableExpr( *param ) ); 68 break; 73 69 case CodeGen::OT_PREFIXASSIGN: 74 70 case CodeGen::OT_POSTFIXASSIGN: 75 71 case CodeGen::OT_INFIXASSIGN: 76 funcDecl->get_statements()->get_kids().push_back( new ReturnStmt( std::list< Label >(), newExpr ) ); 72 { 73 newExpr->get_args().push_back( new VariableExpr( *param ) ); 74 // UntypedExpr *deref = new UntypedExpr( new NameExpr( "*?" ) ); 75 // deref->get_args().push_back( new VariableExpr( *param ) ); 76 // newExpr->get_args().push_back( deref ); 77 77 break; 78 case CodeGen::OT_CTOR: 79 // ctors don't return a value 80 if ( funcDecl->get_functionType()->get_parameters().size() == 1 ) { 81 // intrinsic default constructors should do nothing 82 // delete newExpr; 83 break; 84 } else { 85 assert( funcDecl->get_functionType()->get_parameters().size() == 2 ); 86 // anything else is a single parameter constructor that is effectively a C-style assignment 87 // delete newExpr->get_function(); 88 assert(newExpr->get_args().size()==2); 89 newExpr->set_function( new NameExpr( "?=?" ) ); 90 funcDecl->get_statements()->get_kids().push_back( new ExprStmt( std::list< Label >(), newExpr ) ); 91 } 92 break; 93 case CodeGen::OT_DTOR: 94 // intrinsic destructors should do nothing 95 // delete newExpr; 96 break; 78 } 97 79 case CodeGen::OT_CONSTANT: 98 80 case CodeGen::OT_LABELADDRESS: … … 100 82 assert( false ); 101 83 } // switch 84 85 for ( param++; param != funcDecl->get_functionType()->get_parameters().end(); ++param ) { 86 if ( (*param)->get_name() == "" ) { 87 (*param)->set_name( paramNamer.newName() ); 88 (*param)->set_linkage( LinkageSpec::C ); 89 } 90 newExpr->get_args().push_back( new VariableExpr( *param ) ); 91 } // for 92 funcDecl->set_statements( new CompoundStmt( std::list< Label >() ) ); 93 funcDecl->get_statements()->get_kids().push_back( new ReturnStmt( std::list< Label >(), newExpr ) ); 94 newDecls.push_back( funcDecl ); 102 95 } 103 96 104 97 void MakeLibCfa::visit( ObjectDecl* origObjDecl ) { 105 98 if ( origObjDecl->get_linkage() != LinkageSpec::Intrinsic ) return; 106 99 107 100 ObjectDecl *objDecl = origObjDecl->clone(); 108 101 assert( ! objDecl->get_init() ); 109 102 std::list< Expression* > noDesignators; 110 objDecl->set_init( new SingleInit( new NameExpr( objDecl->get_name() ), noDesignators , false ) ); // cannot be constructed103 objDecl->set_init( new SingleInit( new NameExpr( objDecl->get_name() ), noDesignators ) ); 111 104 newDecls.push_back( objDecl ); 112 105 } 113 106 } // namespace LibCfa 107 108 // Local Variables: // 109 // tab-width: 4 // 110 // mode: c++ // 111 // compile-command: "make install" // 112 // End: //
Note:
See TracChangeset
for help on using the changeset viewer.