- Timestamp:
- Mar 16, 2017, 8:47:36 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:
- fb04321
- Parents:
- 26ba208
- Location:
- src
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.cc
r26ba208 rddfd945 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 08: 06:05201713 // Update Count : 33 712 // Last Modified On : Thu Mar 16 08:35:33 2017 13 // Update Count : 338 14 14 // 15 15 … … 301 301 functionNesting > 0 ? Type::StorageClasses() : Type::StorageClasses( Type::Static ), 302 302 LinkageSpec::AutoGen, layoutFnType, new CompoundStmt( noLabels ), 303 std::list< Attribute * >(), DeclarationNode::FuncSpecifiers( DeclarationNode::Inline ) );303 std::list< Attribute * >(), Type::FuncSpecifiers( Type::Inline ) ); 304 304 layoutDecl->fixUniqueId(); 305 305 return layoutDecl; -
src/Parser/DeclarationNode.cc
r26ba208 rddfd945 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:59:40201713 // Update Count : 100 312 // Last Modified On : Thu Mar 16 08:37:57 2017 13 // Update Count : 1006 14 14 // 15 15 … … 33 33 34 34 // These must remain in the same order as the corresponding DeclarationNode enumerations. 35 const char * DeclarationNode::FuncSpecifiers::Names[] = { "inline", "fortran", "_Noreturn", "NoFunctionSpecifierNames" };36 35 const char * DeclarationNode::basicTypeNames[] = { "void", "_Bool", "char", "int", "float", "double", "long double", "NoBasicTypeNames" }; 37 36 const char * DeclarationNode::complexTypeNames[] = { "_Complex", "_Imaginary", "NoComplexTypeNames" }; … … 186 185 } // DeclarationNode::newStorageClass 187 186 188 DeclarationNode * DeclarationNode::newFuncSpecifier( FuncSpecifiers fs ) {187 DeclarationNode * DeclarationNode::newFuncSpecifier( Type::FuncSpecifiers fs ) { 189 188 DeclarationNode * newnode = new DeclarationNode; 190 189 newnode->funcSpecs = fs; … … 448 447 void DeclarationNode::checkSpecifiers( DeclarationNode * src ) { 449 448 if ( (funcSpecs.val & src->funcSpecs.val) != 0 ) { // duplicates ? 450 for ( unsigned int i = 0; i < NumFuncSpecifier; i += 1 ) { // find duplicates449 for ( unsigned int i = 0; i < Type::NumFuncSpecifier; i += 1 ) { // find duplicates 451 450 if ( funcSpecs[i] && src->funcSpecs[i] ) { 452 appendError( error, string( "duplicate " ) + FuncSpecifiers::Names[i] );451 appendError( error, string( "duplicate " ) + Type::FuncSpecifiers::Names[i] ); 453 452 } // if 454 453 } // for -
src/Parser/ParseNode.h
r26ba208 rddfd945 10 10 // Created On : Sat May 16 13:28:16 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:46:33 201713 // Update Count : 77 212 // Last Modified On : Thu Mar 16 08:32:43 2017 13 // Update Count : 776 14 14 // 15 15 … … 201 201 class DeclarationNode : public ParseNode { 202 202 public: 203 enum { Inline = 1 << 0, Noreturn = 1 << 1, Fortran = 1 << 2, NumFuncSpecifier = 3 };204 union FuncSpecifiers {205 static const char * Names[];206 unsigned int val;207 struct {208 bool is_inline : 1;209 bool is_noreturn : 1;210 bool is_fortran : 1;211 };212 FuncSpecifiers() : val( 0 ) {}213 FuncSpecifiers( unsigned int val ) : val( val ) {}214 bool operator[]( unsigned int i ) const { return val & (1 << i); }215 bool any() const { return val != 0; }216 void print( std::ostream & os ) const {217 if ( (*this).any() ) { // any function specifiers ?218 for ( unsigned int i = 0; i < NumFuncSpecifier; i += 1 ) {219 if ( (*this)[i] ) {220 os << FuncSpecifiers::Names[i] << ' ';221 } // if222 } // for223 } // if224 }225 }; // FuncSpecifiers226 227 203 enum BasicType { Void, Bool, Char, Int, Float, Double, LongDouble, NoBasicType }; 228 204 enum ComplexType { Complex, Imaginary, NoComplexType }; … … 242 218 243 219 static DeclarationNode * newStorageClass( Type::StorageClasses ); 244 static DeclarationNode * newFuncSpecifier( FuncSpecifiers );220 static DeclarationNode * newFuncSpecifier( Type::FuncSpecifiers ); 245 221 static DeclarationNode * newTypeQualifier( Type::Qualifiers ); 246 222 static DeclarationNode * newBasicType( BasicType ); … … 339 315 TypeData * type; 340 316 317 Type::FuncSpecifiers funcSpecs; 341 318 Type::StorageClasses storageClasses; 342 FuncSpecifiers funcSpecs;343 319 344 320 ExpressionNode * bitfieldWidth; -
src/Parser/TypeData.cc
r26ba208 rddfd945 10 10 // Created On : Sat May 16 15:12:51 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:54:50201713 // Update Count : 55 812 // Last Modified On : Thu Mar 16 08:32:42 2017 13 // Update Count : 559 14 14 // 15 15 … … 778 778 } // buildTypeof 779 779 780 Declaration * buildDecl( const TypeData * td, const string &name, Type::StorageClasses scs, Expression * bitfieldWidth, DeclarationNode::FuncSpecifiers funcSpec, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) {780 Declaration * buildDecl( const TypeData * td, const string &name, Type::StorageClasses scs, Expression * bitfieldWidth, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) { 781 781 if ( td->kind == TypeData::Function ) { 782 782 if ( td->function.idList ) { // KR function ? … … 814 814 break; 815 815 default: 816 ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType * >( buildDecl( td->base, "", Type::StorageClasses(), nullptr, DeclarationNode::FuncSpecifiers(), LinkageSpec::Cforall, nullptr ) ) );816 ft->get_returnVals().push_back( dynamic_cast< DeclarationWithType * >( buildDecl( td->base, "", Type::StorageClasses(), nullptr, Type::FuncSpecifiers(), LinkageSpec::Cforall, nullptr ) ) ); 817 817 } // switch 818 818 } else { -
src/Parser/TypeData.h
r26ba208 rddfd945 10 10 // Created On : Sat May 16 15:18:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:53:41201713 // Update Count : 18 412 // Last Modified On : Thu Mar 16 08:32:39 2017 13 // Update Count : 185 14 14 // 15 15 … … 109 109 TupleType * buildTuple( const TypeData * ); 110 110 TypeofType * buildTypeof( const TypeData * ); 111 Declaration * buildDecl( const TypeData *, const std::string &, Type::StorageClasses, Expression *, DeclarationNode::FuncSpecifiers funcSpec, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );111 Declaration * buildDecl( const TypeData *, const std::string &, Type::StorageClasses, Expression *, Type::FuncSpecifiers funcSpec, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() ); 112 112 FunctionType * buildFunction( const TypeData * ); 113 113 void buildKRFunction( const TypeData::Function_t & function ); -
src/Parser/parser.yy
r26ba208 rddfd945 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 08: 00:59201713 // Update Count : 23 0912 // Last Modified On : Thu Mar 16 08:36:17 2017 13 // Update Count : 2310 14 14 // 15 15 … … 1460 1460 // Put function specifiers here to simplify parsing rules, but separate them semantically. 1461 1461 | INLINE // C99 1462 { $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Inline ); }1462 { $$ = DeclarationNode::newFuncSpecifier( Type::Inline ); } 1463 1463 | FORTRAN // C99 1464 { $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Fortran ); }1464 { $$ = DeclarationNode::newFuncSpecifier( Type::Fortran ); } 1465 1465 | NORETURN // C11 1466 { $$ = DeclarationNode::newFuncSpecifier( DeclarationNode::Noreturn ); }1466 { $$ = DeclarationNode::newFuncSpecifier( Type::Noreturn ); } 1467 1467 ; 1468 1468 -
src/SymTab/Autogen.cc
r26ba208 rddfd945 10 10 // Created On : Thu Mar 03 15:45:56 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 08: 03:35201713 // Update Count : 5 612 // Last Modified On : Thu Mar 16 08:37:22 2017 13 // Update Count : 59 14 14 // 15 15 … … 165 165 LinkageSpec::Spec spec = isIntrinsic ? LinkageSpec::Intrinsic : LinkageSpec::AutoGen; 166 166 FunctionDecl * decl = new FunctionDecl( fname, scs, spec, ftype, new CompoundStmt( noLabels ), 167 std::list< Attribute * >(), DeclarationNode::FuncSpecifiers( DeclarationNode::Inline ) );167 std::list< Attribute * >(), Type::FuncSpecifiers( Type::Inline ) ); 168 168 decl->fixUniqueId(); 169 169 return decl; … … 720 720 TypeInstType * inst = new TypeInstType( Type::Qualifiers(), newDecl->get_name(), newDecl ); 721 721 newDecl->get_assertions().push_back( new FunctionDecl( "?=?", Type::StorageClasses(), LinkageSpec::Cforall, genAssignType( inst ), nullptr, 722 std::list< Attribute * >(), DeclarationNode::FuncSpecifiers( DeclarationNode::Inline ) ) );722 std::list< Attribute * >(), Type::FuncSpecifiers( Type::Inline ) ) ); 723 723 newDecl->get_assertions().push_back( new FunctionDecl( "?{}", Type::StorageClasses(), LinkageSpec::Cforall, genDefaultType( inst ), nullptr, 724 std::list< Attribute * >(), DeclarationNode::FuncSpecifiers( DeclarationNode::Inline ) ) );724 std::list< Attribute * >(), Type::FuncSpecifiers( Type::Inline ) ) ); 725 725 newDecl->get_assertions().push_back( new FunctionDecl( "?{}", Type::StorageClasses(), LinkageSpec::Cforall, genCopyType( inst ), nullptr, 726 std::list< Attribute * >(), DeclarationNode::FuncSpecifiers( DeclarationNode::Inline ) ) );726 std::list< Attribute * >(), Type::FuncSpecifiers( Type::Inline ) ) ); 727 727 newDecl->get_assertions().push_back( new FunctionDecl( "^?{}", Type::StorageClasses(), LinkageSpec::Cforall, genDefaultType( inst ), nullptr, 728 std::list< Attribute * >(), DeclarationNode::FuncSpecifiers( DeclarationNode::Inline ) ) );728 std::list< Attribute * >(), Type::FuncSpecifiers( Type::Inline ) ) ); 729 729 typeParams.push_back( newDecl ); 730 730 done.insert( ty->get_baseType() ); -
src/SynTree/Declaration.h
r26ba208 rddfd945 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:48:23201713 // Update Count : 11 712 // Last Modified On : Thu Mar 16 08:34:11 2017 13 // Update Count : 118 14 14 // 15 15 … … 64 64 class DeclarationWithType : public Declaration { 65 65 public: 66 DeclarationWithType( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, DeclarationNode::FuncSpecifiers fs );66 DeclarationWithType( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, Type::FuncSpecifiers fs ); 67 67 DeclarationWithType( const DeclarationWithType &other ); 68 68 virtual ~DeclarationWithType(); … … 82 82 const std::list< Attribute * >& get_attributes() const { return attributes; } 83 83 84 DeclarationNode::FuncSpecifiers get_funcSpec() const { return fs; }85 //void set_functionSpecifiers( DeclarationNode::FuncSpecifiers newValue ) { fs = newValue; }84 Type::FuncSpecifiers get_funcSpec() const { return fs; } 85 //void set_functionSpecifiers( Type::FuncSpecifiers newValue ) { fs = newValue; } 86 86 87 87 virtual DeclarationWithType *clone() const = 0; … … 98 98 ConstantExpr *asmName; 99 99 std::list< Attribute * > attributes; 100 DeclarationNode::FuncSpecifiers fs;100 Type::FuncSpecifiers fs; 101 101 }; 102 102 … … 105 105 public: 106 106 ObjectDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, 107 const std::list< Attribute * > attributes = std::list< Attribute * >(), DeclarationNode::FuncSpecifiers fs = DeclarationNode::FuncSpecifiers() );107 const std::list< Attribute * > attributes = std::list< Attribute * >(), Type::FuncSpecifiers fs = Type::FuncSpecifiers() ); 108 108 ObjectDecl( const ObjectDecl &other ); 109 109 virtual ~ObjectDecl(); … … 133 133 public: 134 134 FunctionDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, 135 const std::list< Attribute * > attributes = std::list< Attribute * >(), DeclarationNode::FuncSpecifiers fs = DeclarationNode::FuncSpecifiers() );135 const std::list< Attribute * > attributes = std::list< Attribute * >(), Type::FuncSpecifiers fs = Type::FuncSpecifiers() ); 136 136 FunctionDecl( const FunctionDecl &other ); 137 137 virtual ~FunctionDecl(); -
src/SynTree/DeclarationWithType.cc
r26ba208 rddfd945 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:49:27201713 // Update Count : 2 412 // Last Modified On : Thu Mar 16 08:34:35 2017 13 // Update Count : 25 14 14 // 15 15 … … 19 19 #include "Common/utility.h" 20 20 21 DeclarationWithType::DeclarationWithType( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, DeclarationNode::FuncSpecifiers fs )21 DeclarationWithType::DeclarationWithType( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, const std::list< Attribute * > & attributes, Type::FuncSpecifiers fs ) 22 22 : Declaration( name, scs, linkage ), asmName( nullptr ), attributes( attributes ), fs( fs ) { 23 23 } -
src/SynTree/FunctionDecl.cc
r26ba208 rddfd945 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:49:35201713 // Update Count : 7 312 // Last Modified On : Thu Mar 16 08:33:41 2017 13 // Update Count : 74 14 14 // 15 15 … … 26 26 extern bool translation_unit_nomain; 27 27 28 FunctionDecl::FunctionDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, std::list< Attribute * > attributes, DeclarationNode::FuncSpecifiers fs )28 FunctionDecl::FunctionDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, FunctionType *type, CompoundStmt *statements, std::list< Attribute * > attributes, Type::FuncSpecifiers fs ) 29 29 : Parent( name, scs, linkage, attributes, fs ), type( type ), statements( statements ) { 30 30 // hack forcing the function "main" to have Cforall linkage to replace main even if it is inside an extern -
src/SynTree/ObjectDecl.cc
r26ba208 rddfd945 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:49:51201713 // Update Count : 5 812 // Last Modified On : Thu Mar 16 08:34:27 2017 13 // Update Count : 59 14 14 // 15 15 … … 22 22 #include "Statement.h" 23 23 24 ObjectDecl::ObjectDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, DeclarationNode::FuncSpecifiers fs )24 ObjectDecl::ObjectDecl( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage, Expression *bitfieldWidth, Type *type, Initializer *init, const std::list< Attribute * > attributes, Type::FuncSpecifiers fs ) 25 25 : Parent( name, scs, linkage, attributes, fs ), type( type ), init( init ), bitfieldWidth( bitfieldWidth ) { 26 26 } -
src/SynTree/Type.cc
r26ba208 rddfd945 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:57:45201713 // Update Count : 2 012 // Last Modified On : Thu Mar 16 08:32:44 2017 13 // Update Count : 22 14 14 // 15 15 … … 60 60 61 61 // These must remain in the same order as the corresponding bit fields. 62 const char * Type::FuncSpecifiers::Names[] = { "inline", "fortran", "_Noreturn" }; 62 63 const char * Type::StorageClasses::Names[] = { "extern", "static", "auto", "register", "_Thread_local" }; 63 64 const char * Type::Qualifiers::Names[] = { "const", "restrict", "volatile", "lvalue", "mutex", "_Atomic" }; -
src/SynTree/Type.h
r26ba208 rddfd945 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 0 7:45:29201713 // Update Count : 9 012 // Last Modified On : Thu Mar 16 08:28:02 2017 13 // Update Count : 91 14 14 // 15 15 … … 25 25 public: 26 26 // enum must remain in the same order as the corresponding bit fields. 27 28 enum { Inline = 1 << 0, Noreturn = 1 << 1, Fortran = 1 << 2, NumFuncSpecifier = 3 }; 29 union FuncSpecifiers { 30 static const char * Names[]; 31 unsigned int val; 32 struct { 33 bool is_inline : 1; 34 bool is_noreturn : 1; 35 bool is_fortran : 1; 36 }; 37 FuncSpecifiers() : val( 0 ) {} 38 FuncSpecifiers( unsigned int val ) : val( val ) {} 39 bool operator[]( unsigned int i ) const { return val & (1 << i); } 40 bool any() const { return val != 0; } 41 void print( std::ostream & os ) const { 42 if ( (*this).any() ) { // any function specifiers ? 43 for ( unsigned int i = 0; i < NumFuncSpecifier; i += 1 ) { 44 if ( (*this)[i] ) { 45 os << FuncSpecifiers::Names[i] << ' '; 46 } // if 47 } // for 48 } // if 49 } 50 }; // FuncSpecifiers 27 51 28 52 enum { Extern = 1 << 0, Static = 1 << 1, Auto = 1 << 2, Register = 1 << 3, Threadlocal = 1 << 4, NumStorageClass = 5 };
Note: See TracChangeset
for help on using the changeset viewer.