3 public class ASTDeclaration : ASTStmtOrDecl
7 // ASTSpecifier extStorage;
9 // AccessMode declMode;
11 ASTDeclaration ::parse(SpecsList specs, InitDeclList decls)
13 if(peekToken().type == ';')
15 return DeclarationInit { specifiers = specs, declarators = decls };
19 public class DeclarationInit : ASTDeclaration
23 InitDeclList declarators;
30 if(declarators) Print(" ");
32 if(declarators) declarators.print();
37 public class DeclarationInstance : ASTDeclaration
39 ASTInstantiation inst;
42 public class DeclarationDefine : ASTDeclaration
48 public class ASTFunctionDefinition : ASTNode
52 ASTDeclarator declarator;
53 List<ASTDeclaration> oldStyleDeclarations;
73 ASTFunctionDefinition ::parse(SpecsList specs, InitDeclList decls)
75 ASTFunctionDefinition function { };
76 ASTDeclarator decl = (decls && decls[0]) ? decls[0].declarator : null;
77 if(decl && decls[0]) decls[0].declarator = null;
79 function.specifiers = specs;
80 function.declarator = decl;
81 function.body = StmtCompound::parse();
86 OldList attached; // For IDE
93 bool propertyNoThis; // Not used yet; might use to support both this = and return syntax for conversion properties
100 ASTFunctionDefinition function;
102 ASTDeclaration declaration;
113 ImportType importType;
117 public class AST : ASTList<ASTNode>
119 ASTNode ::ParseExternalDeclaration()
121 SpecsList specs = SpecsList::parse();
122 InitDeclList decls = InitDeclList::parse();
124 if(peekToken().type == '{')
125 return ASTFunctionDefinition::parse(specs, decls);
126 else if(specs || decls)
127 return ASTDeclaration::parse(specs, decls);
130 readToken(); // Error
138 while(peekToken().type)
140 ASTNode n = ParseExternalDeclaration();