Changes in src/Parser/ParseNode.h [faddbd8:aefcc3b]
- File:
-
- 1 edited
-
src/Parser/ParseNode.h (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/ParseNode.h
rfaddbd8 raefcc3b 10 10 // Created On : Sat May 16 13:28:16 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Oct 3 18:03:08201613 // Update Count : 6 3612 // Last Modified On : Mon Sep 12 08:00:05 2016 13 // Update Count : 603 14 14 // 15 15 … … 41 41 public: 42 42 ParseNode() {}; 43 virtual ~ParseNode() { delete next; delete name; }; 43 ParseNode( const std::string * name ) : name( * name ) { assert( false ); delete name; } 44 ParseNode( const std::string &name ) : name( name ) { assert( false ); } 45 virtual ~ParseNode() { delete next; }; 44 46 virtual ParseNode * clone() const = 0; 45 47 46 48 ParseNode * get_next() const { return next; } 47 49 ParseNode * set_next( ParseNode * newlink ) { next = newlink; return this; } 48 49 50 ParseNode * get_last() { 50 51 ParseNode * current; 51 for ( current = this; current->get_next() != nullptr; current = current->get_next() );52 for ( current = this; current->get_next() != 0; current = current->get_next() ); 52 53 return current; 53 54 } 54 55 ParseNode * set_last( ParseNode * newlast ) { 55 if ( newlast != nullptr) get_last()->set_next( newlast );56 if ( newlast != 0 ) get_last()->set_next( newlast ); 56 57 return this; 57 58 } 59 60 const std::string &get_name() const { return name; } 61 void set_name( const std::string &newValue ) { name = newValue; } 58 62 59 63 virtual void print( std::ostream &os, int indent = 0 ) const {} 60 64 virtual void printList( std::ostream &os, int indent = 0 ) const {} 61 65 private: 62 66 static int indent_by; 63 67 64 68 ParseNode * next = nullptr; 65 std::string * name = nullptr;69 std::string name; 66 70 }; // ParseNode 67 71 … … 70 74 class InitializerNode : public ParseNode { 71 75 public: 72 InitializerNode( ExpressionNode *, bool aggrp = false, ExpressionNode * des = nullptr);73 InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode * des = nullptr);76 InitializerNode( ExpressionNode *, bool aggrp = false, ExpressionNode * des = 0 ); 77 InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode * des = 0 ); 74 78 ~InitializerNode(); 75 79 virtual InitializerNode * clone() const { assert( false ); return nullptr; } … … 102 106 public: 103 107 ExpressionNode( Expression * expr = nullptr ) : expr( expr ) {} 108 ExpressionNode( Expression * expr, const std::string * name ) : ParseNode( name ), expr( expr ) {} 104 109 ExpressionNode( const ExpressionNode &other ); 105 110 virtual ~ExpressionNode() {} … … 160 165 161 166 Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node ); 162 Expression * build_fieldSel( ExpressionNode * expr_node, NameExpr* member );163 Expression * build_pfieldSel( ExpressionNode * expr_node, NameExpr* member );167 Expression * build_fieldSel( ExpressionNode * expr_node, Expression * member ); 168 Expression * build_pfieldSel( ExpressionNode * expr_node, Expression * member ); 164 169 Expression * build_addressOf( ExpressionNode * expr_node ); 165 170 Expression * build_sizeOfexpr( ExpressionNode * expr_node ); … … 178 183 Expression * build_attrexpr( NameExpr * var, ExpressionNode * expr_node ); 179 184 Expression * build_attrtype( NameExpr * var, DeclarationNode * decl_node ); 180 Expression * build_tuple( ExpressionNode * expr_node = nullptr);185 Expression * build_tuple( ExpressionNode * expr_node = 0 ); 181 186 Expression * build_func( ExpressionNode * function, ExpressionNode * expr_node ); 182 187 Expression * build_range( ExpressionNode * low, ExpressionNode * high ); … … 198 203 enum Signedness { Signed, Unsigned, NoSignedness }; 199 204 enum Length { Short, Long, LongLong, NoLength }; 200 enum Aggregate { Struct, Union, Trait , NoAggregate};201 enum TypeClass { Otype, Dtype, Ftype , NoTypeClass};205 enum Aggregate { Struct, Union, Trait }; 206 enum TypeClass { Otype, Dtype, Ftype }; 202 207 enum BuiltinType { Valist }; 203 208 … … 214 219 static DeclarationNode * newFunction( std::string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body, bool newStyle = false ); 215 220 static DeclarationNode * newQualifier( Qualifier ); 216 static DeclarationNode * newForall( DeclarationNode * );221 static DeclarationNode * newForall( DeclarationNode *); 217 222 static DeclarationNode * newStorageClass( StorageClass ); 218 223 static DeclarationNode * newBasicType( BasicType ); … … 221 226 static DeclarationNode * newLength( Length lnth ); 222 227 static DeclarationNode * newBuiltinType( BuiltinType ); 223 static DeclarationNode * newFromTypedef( std::string * );228 static DeclarationNode * newFromTypedef( std::string *); 224 229 static DeclarationNode * newAggregate( Aggregate kind, const std::string * name, ExpressionNode * actuals, DeclarationNode * fields, bool body ); 225 230 static DeclarationNode * newEnum( std::string * name, DeclarationNode * constants ); 226 231 static DeclarationNode * newEnumConstant( std::string * name, ExpressionNode * constant ); 227 static DeclarationNode * newName( std::string * );232 static DeclarationNode * newName( std::string *); 228 233 static DeclarationNode * newFromTypeGen( std::string *, ExpressionNode * params ); 229 static DeclarationNode * newTypeParam( TypeClass, std::string * );230 static DeclarationNode * newTrait( conststd::string * name, DeclarationNode * params, DeclarationNode * asserts );231 static DeclarationNode * newTraitUse( conststd::string * name, ExpressionNode * params );234 static DeclarationNode * newTypeParam( TypeClass, std::string *); 235 static DeclarationNode * newTrait( std::string * name, DeclarationNode * params, DeclarationNode * asserts ); 236 static DeclarationNode * newTraitUse( std::string * name, ExpressionNode * params ); 232 237 static DeclarationNode * newTypeDecl( std::string * name, DeclarationNode * typeParams ); 233 238 static DeclarationNode * newPointer( DeclarationNode * qualifiers ); … … 244 249 DeclarationNode * clone() const; 245 250 246 DeclarationNode * addQualifiers( DeclarationNode * );251 DeclarationNode * addQualifiers( DeclarationNode *); 247 252 void checkQualifiers( const TypeData *, const TypeData * ); 248 void checkStorageClasses( DeclarationNode * );249 DeclarationNode * copyStorageClasses( DeclarationNode * );250 DeclarationNode * addType( DeclarationNode * );253 void checkStorageClasses( DeclarationNode *q ); 254 DeclarationNode * copyStorageClasses( DeclarationNode *); 255 DeclarationNode * addType( DeclarationNode *); 251 256 DeclarationNode * addTypedef(); 252 DeclarationNode * addAssertions( DeclarationNode * );253 DeclarationNode * addName( std::string * );257 DeclarationNode * addAssertions( DeclarationNode *); 258 DeclarationNode * addName( std::string *); 254 259 DeclarationNode * addBitfield( ExpressionNode * size ); 255 260 DeclarationNode * addVarArgs(); … … 265 270 266 271 DeclarationNode * cloneType( std::string * newName ); 272 DeclarationNode * cloneType( DeclarationNode * existing ); 273 DeclarationNode * cloneType( int ) { return cloneType( ( std::string *)0 ); } 274 DeclarationNode * cloneBaseType( std::string * newName ); 267 275 DeclarationNode * cloneBaseType( DeclarationNode * newdecl ); 268 276 … … 278 286 279 287 bool get_hasEllipsis() const; 288 const std::string &get_name() const { return name; } 280 289 LinkageSpec::Spec get_linkage() const { return linkage; } 281 290 DeclarationNode * extractAggregate() const; … … 286 295 DeclarationNode * set_extension( bool exten ) { extension = exten; return this; } 287 296 public: 297 // StorageClass buildStorageClass() const; 298 // bool buildFuncSpecifier( StorageClass key ) const; 299 288 300 struct Variable_t { 289 // const std::string * name;290 301 DeclarationNode::TypeClass tyClass; 302 std::string name; 291 303 DeclarationNode * assertions; 292 304 }; … … 294 306 295 307 struct Attr_t { 296 // const std::string *name;308 std::string name; 297 309 ExpressionNode * expr; 298 310 DeclarationNode * type; … … 303 315 304 316 TypeData * type; 317 std::string name; 305 318 StorageClass storageClass; 306 319 bool isInline, isNoreturn; … … 318 331 319 332 Type * buildType( TypeData * type ); 333 //Type::Qualifiers buildQualifiers( const TypeData::Qualifiers & qualifiers ); 320 334 321 335 static inline Type * maybeMoveBuildType( const DeclarationNode * orig ) { … … 379 393 Statement * build_finally( StatementNode * stmt ); 380 394 Statement * build_compound( StatementNode * first ); 381 Statement * build_asmstmt( bool voltile, ConstantExpr * instruction, ExpressionNode * output = nullptr, ExpressionNode * input = nullptr, ExpressionNode * clobber = nullptr, LabelNode * gotolabels = nullptr);382 383 //############################################################################## 384 385 template< typename SynTreeType, typename NodeType >386 void buildList( const NodeType * firstNode, std::list< SynTreeType *> &outputList ) {395 Statement * build_asmstmt( bool voltile, ConstantExpr * instruction, ExpressionNode * output = 0, ExpressionNode * input = 0, ExpressionNode * clobber = 0, LabelNode * gotolabels = 0 ); 396 397 //############################################################################## 398 399 template< typename SynTreeType, typename NodeType, template< typename, typename...> class Container, typename... Args > 400 void buildList( const NodeType * firstNode, Container< SynTreeType *, Args... > &outputList ) { 387 401 SemanticError errors; 388 std::back_insert_iterator< std::list< SynTreeType *> > out( outputList );402 std::back_insert_iterator< Container< SynTreeType *, Args... > > out( outputList ); 389 403 const NodeType * cur = firstNode; 390 404
Note:
See TracChangeset
for help on using the changeset viewer.