dmd.cparse
Takes a token stream from the lexer, and parses it into an abstract syntax tree.
Specification: C11
License
Source: cparse.d
Documentation: https://dlang.org/phobos/dmd_cparse.html
- 
  DeclarationclassCParser(AST): Parser!AST;- 
  DeclarationbooladdFuncName;add declaration of _func__ to function symbol table 
- 
  DeclarationboolimportBuiltins;seen use of C compiler builtins, so import _builtins; 
- 
  DeclarationArray!(void*)typedefTab;Array of AST.Type[Identifier], typedef's indexed by Identifier 
- 
  DeclarationAST.Dsymbols*parseModule();Parse translation unit. C11 6.9 translation-unit: external-declaration translation-unit external-declaration Discussionexternal-declaration: function-definition declaration Return Valuearray of Dsymbols that were declared 
- 
  DeclarationAST.StatementcparseStatement(intflags, const(char)**endPtr= null, Loc*pEndloc= null);Statement Parser DiscussionC11 6.8 statement: labeled-statement compound-statement expression-statement selection-statement iteration-statement jump-statement ParametersintflagsPSxxxx const(char)**endPtrstore location of closing brace Loc*pEndlocif { ... statements ... }, store location of closing brace, otherwise loc of last token of statement Return Valueparsed statement 
- 
  DeclarationAST.ExpressioncparseExpression();Expression Parser DiscussionC11 6.5.17 expression: assignment-expression expression , assignment-expression 
- 
  DeclarationAST.ExpressioncparsePrimaryExp();C11 6.5.1 primary-expression: identifier constant string-literal ( expression ) generic-selection _builtin_va_arg(assign_expression, type) 
- 
  DeclarationAST.ExpressioncparseAssignExp();C11 6.5.16 assignment-expression: conditional-expression unary-expression assignment-operator assignment-expression Discussionassignment-operator: = *= /= %= += -= <<= >>= &= ^= |= 
- 
  DeclarationvoidcparseDeclaration(LVLlevel);Declaration Parser DiscussionC11 6.7 declaration: declaration-specifiers init-declarator-list (opt) ; static_assert-declaration 
 init-declarator-list: init-declarator init-declarator-list , init-declarator
 init-declarator: declarator declarator = initializerParametersLVLleveldeclaration context 
- 
  DeclarationAST.DsymbolcparseFunctionDefinition(Identifierid, AST.TypeFunctionft, ref Specifierspecifier);C11 Function Definitions function-definition declaration-specifiers declarator declaration-list (opt) compound-statement Discussiondeclaration-list: declaration declaration-list declaration 
 It's already been parsed up to the declaration-list (opt). Pick it up from there.ParametersIdentifieridfunction identifier AST.TypeFunctionftfunction type Specifierspecifierfunction specifiers Return ValueDsymbol for the function 
- 
  DeclarationAST.InitializercparseInitializer();C11 Initialization initializer: assignment-expression { initializer-list } { initializer-list , } Discussioninitializer-list: designation (opt) initializer initializer-list , designation (opt) initializer 
 designation: designator-list =
 designator-list: designator designator-list designator
 designator: [ constant-expression ] . identifierReturn Valueinitializer 
- 
  DeclarationMODcparseTypeQualifierList();C11 6.7.3 type-qualifier: const restrict volatile Atomic _stdcall 
- 
  DeclarationAST.TypecparseTypeName();C11 6.7.7 
- 
  DeclarationAST.TypecparseSpecifierQualifierList(LVLlevel, ref Specifierspecifier);C11 6.7.2.1 specifier-qualifier-list: type-specifierspecifier-qualifier-list (opt) type-qualifierspecifier-qualifier-list (opt)ParametersLVLleveldeclaration context Specifierspecifierspecifiers in and out Return Valueresulting type, nullif not specified
- 
  DeclarationAST.ParameterListcparseParameterList();C11 6.7.6.3 ( parameter-type-list ) ( identifier-list (opt) ) 
- 
  DeclarationvoidcparseStructDeclaration(AST.Dsymbols*members);C11 6.7.2.1 Parse a struct declaration member. struct-declaration: specifier-qualifier-list struct-declarator-list (opt) ; static_assert-declaration Discussionstruct-declarator-list: struct-declarator struct-declarator-list , struct-declarator 
 struct-declarator: declarator declarator (opt) : constant-expressionParametersAST.Dsymbols*memberswhere to put the fields ( members)
- 
  DeclarationboolisDeclarationList(ref Token*pt);See if declaration-list is present. Return Valuetrueif declaration-list is present, even an empty one
- 
  DeclarationenumLVL;
- 
  DeclarationenumDTR;Types of declarator to parse - 
  DeclarationxdirectC11 6.7.6 direct-declarator 
- 
  DeclarationxabstractC11 6.7.7 abstract-declarator 
- 
  Declarationxparameterparameter declarator may be either direct or abstract 
 
- 
  
- 
  DeclarationenumSCW: uint;C11 6.7.1 Storage-class specifiers 
- 
  DeclarationenumMOD: uint;C11 6.7.3 Type qualifiers 
- 
  DeclarationstructSpecifier;Aggregate for all the various specifiers - 
  Declarationboolnoreturn;noreturnattribute
- 
  Declarationboolnaked;nakedattribute
- 
  Declarationbool_nothrow;nothrow attribute 
- 
  Declarationbool_pure;pure attribute 
- 
  Declarationbooldllimport;dllimportattribute
- 
  Declarationbooldllexport;dllexportattribute
- 
  Declarationbool_deprecated;deprecated attribute 
- 
  DeclarationAST.ExpressiondepMsg;deprecated message 
- 
  Declarationuintvector_size;positive power of 2 multipe of base type size 
- 
  DeclarationSCWscw;storage-class specifiers 
- 
  DeclarationMODmod;type qualifiers 
- 
  DeclarationAST.Expressions*alignExps;alignment 
- 
  Declarationstructalign_tpackalign;#pragma pack alignment value 
 
- 
  
- 
  DeclarationStorageClassspecifiersToSTC(LVLlevel, const ref Specifierspecifier);Convert from C specifiers to D storage class ParametersLVLleveldeclaration context Specifierspecifierspecifiers, context, etc. Return Valuecorresponding D storage class 
- 
  DeclarationvoidspecifiersToFuncDeclaration(AST.FuncDeclarationfd, const ref Specifierspecifier);Add attributes from Specifier to function ParametersAST.FuncDeclarationfdfunction to apply them to Specifierspecifierspecifiers 
- 
  DeclarationvoidspecifiersToVarDeclaration(AST.VarDeclarationvd, const ref Specifierspecifier);Add attributes from Specifier to variable ParametersAST.VarDeclarationvdfunction to apply them to Specifierspecifierspecifiers 
- 
  Declarationvoidpanic();After encountering an error, scan forward until a right brace or ; is found or the end of the file. 
- 
  DeclarationboolisFunctionTypedef(AST.Typet);typedefTab symbol table DiscussionDetermines if type tis a function type.ParametersAST.Typettype to test Return Valuetrueif it represents a function
- 
  DeclarationboolisTypedef(Identifierid);Determine if idParametersIdentifieridpossible typedef Return Valuetrueifidis a Type
- 
  DeclarationvoidinsertIdToTypedefTab(Identifierid);Add idParametersIdentifierididentifier for non-typedef symbol 
- 
  DeclarationvoidinsertTypedefToTypedefTab(Identifierid, AST.Typet);Add idParametersIdentifierididentifier for typedef symbol AST.Typettype of the typedef symbol 
- 
  DeclarationAST.Type*lookupTypedef(Identifierid);Lookup idin typedefTab[].Return Valueif not found, then null. if found, then Type*. Deferencing it will yieldnullif it is not a typedef, and a type if it is a typedef.
- 
  DeclarationboolparseSpecialTokenSequence();Directive Parser 
- 
  DeclarationvoidaddDefines();#define Parser DiscussionGo through the #define's in the defines buffer and see what we can convert to Dsymbols, which are then appended to symbols[] 
 
-