dmd.parse
Source: parse.d
- PREC[TOKMAX]
precedence; - Set operator
precedencefor each operator. - class
Parser(AST): Lexer; -
- this(Loc
loc, AST.Module_module, const(char)[]input, booldoDocComment); - Use this constructor for string mixins.
Input:
loclocation in source file of mixin - AST.Dsymbols*
parseAutoDeclarations(StorageClassstorageClass, const(char)*comment); - Parse auto declarations of the form:
storageClassident = init, ident = init, ... ; and return the array of them. Starts with token on the first ident. Ends with scanner past closing ';' - AST.Dsymbols*
parseBlock(AST.Dsymbol*pLastDecl, PrefixAttributes!AST*pAttrs= null); - Parse declarations after an align, protection, or extern decl.
- StorageClass
appendStorageClass(StorageClassstorageClass, StorageClassstc, booldeprec= false); - Give error on redundant/conflicting storage class.
TODO: remove deprecation in 2.068 and keep only error
- StorageClass
parseAttribute(AST.Expressions**pudas); - Parse attribute, lexer is on '@'.
Input:
pudasarray of UDAs to append toReturns:storage class if a predefined attribute; also scanner remains on identifier. 0 if not a predefined attribute *pudasset if user defined attribute, scanner is past UDA *pudasNULL if not a user defined attribute - StorageClass
parsePostfix(StorageClassstorageClass, AST.Expressions**pudas); - Parse const/immutable/shared/inout/nothrow/pure postfix
- AST.Expression
parseConstraint(); - Parse constraint. Constraint is of the form: if ( ConstraintExpression )
- AST.TemplateDeclaration
parseTemplateDeclaration(boolismixin= false); - Parse a TemplateDeclaration.
- AST.TemplateParameters*
parseTemplateParameterList(intflag= 0); - Parse template parameter list.
Input:
flag0: parsing "( list )" 1: parsing non-empty "list )" - AST.Dsymbol
parseMixin(); - Parse template mixin. mixin Foo; mixin Foo!(args); mixin a.b.c!(args).Foo!(args); mixin Foo!(args) identifier; mixin typeof(expr).identifier!(args);
- AST.Objects*
parseTemplateArguments(); - Parse template arguments.
Input: current token is opening '!'
Output: current token is one after closing ')'
- AST.Objects*
parseTemplateArgumentList(); - Parse template argument list.
Input: current token is opening '(', or ',' for _traits
Output: current token is one after closing ')'
- AST.Objects*
parseTemplateSingleArgument(); - Parse single template argument, to support the syntax: foo!arg
Input: current token is the arg
- AST.StaticAssert
parseStaticAssert(); - Parse a static assertion. Current token is 'static'.
- AST.TypeQualified
parseTypeof(); - Parse typeof(expression). Current token is on the 'typeof'.
- AST.Type
parseVector(); - Parse _vector(type). Current token is on the '_vector'.
- LINK
parseLinkage(AST.Identifiers**pidents, out CPPMANGLEcppmangle); Parse: extern (linkage) extern (C++, namespaces) The parser is on the 'extern' token.
- AST.Identifiers*
parseQualifiedIdentifier(const(char)*entity); - Parse ident1.ident2.ident3Parameters:
const(char)* entitywhat qualified identifier is expected to resolve into. Used only for better error message Returns:array of identifiers with actual qualified one stored last - AST.Condition
parseDebugCondition(); - Parse a debug conditional
- AST.Condition
parseVersionCondition(); - Parse a version conditional
- AST.Condition
parseStaticIfCondition(); - static if (expression) body else body Current token is 'static'.
- AST.Dsymbol
parseCtor(PrefixAttributes!AST*pAttrs); - Parse a constructor definition: this(parameters) { body } or postblit: this(this) { body } or constructor template: this(templateparameters)(parameters) { body } Current token is 'this'.
- AST.Dsymbol
parseDtor(PrefixAttributes!AST*pAttrs); - Parse a destructor definition: ~this() { body } Current token is '~'.
- AST.Dsymbol
parseStaticCtor(PrefixAttributes!AST*pAttrs); - Parse a static constructor definition: static this() { body } Current token is 'static'.
- AST.Dsymbol
parseStaticDtor(PrefixAttributes!AST*pAttrs); - Parse a static destructor definition: static ~this() { body } Current token is 'static'.
- AST.Dsymbol
parseSharedStaticCtor(PrefixAttributes!AST*pAttrs); - Parse a shared static constructor definition: shared static this() { body } Current token is 'shared'.
- AST.Dsymbol
parseSharedStaticDtor(PrefixAttributes!AST*pAttrs); - Parse a shared static destructor definition: shared static ~this() { body } Current token is 'shared'.
- AST.Dsymbol
parseInvariant(PrefixAttributes!AST*pAttrs); - Parse an invariant definition: invariant() { body } Current token is 'invariant'.
- AST.Dsymbol
parseUnitTest(PrefixAttributes!AST*pAttrs); - Parse a unittest definition: unittest { body } Current token is 'unittest'.
- AST.Dsymbol
parseNew(PrefixAttributes!AST*pAttrs); - Parse a new definition: new(parameters) { body } Current token is 'new'.
- AST.Dsymbol
parseDelete(PrefixAttributes!AST*pAttrs); - Parse a delete definition: delete(parameters) { body } Current token is 'delete'.
- AST.Parameters*
parseParameters(int*pvarargs, AST.TemplateParameters**tpl= null); - Parse parameter list.
- AST.EnumDeclaration
parseEnum(); - AST.Dsymbol
parseAggregate(); - Parse struct, union, interface, class.
- AST.BaseClasses*
parseBaseClasses(); - AST.Type
parseBasicType2(AST.Typet); - Parse things that follow the initial type
t.t*t[]t[type]t[expression]t[expression .. expression]tfunctiontdelegate - AST.Dsymbols*
parseDeclarations(boolautodecl, PrefixAttributes!AST*pAttrs, const(char)*comment); - Parse Declarations. These can be: 1. declarations at global/class level 2. declarations at statement level Return array of Declaration *'s.
- AST.FuncDeclaration
parseContracts(AST.FuncDeclarationf); - Parse contracts following function declaration.
- void
checkDanglingElse(Locelseloc); - ParseForeachRet!(isStatic, isDecl)
parseForeach(bool isStatic, bool isDecl)(Locloc, ParseForeachArgs!(isStatic, isDecl)args); - Parses foreach statements, static foreach statements and static foreach declarations. The template parameter isStatic is
true, iff a static foreach should be parsed. If isStatic istrue, isDecl can betrueto indicate that a static foreach declaration should be parsed. - AST.Statement
parseStatement(intflags, const(char)**endPtr= null, Loc*pEndloc= null); Input:
flagsPSxxxxOutput:
pEndlocif { ... statements ... }, store location of closing brace, otherwise loc of last token of statement- AST.Initializer
parseInitializer(); - Parse initializer for variable declaration.
- AST.Expression
parseDefaultInitExp(); - Parses default argument initializer expression that is an assign expression, with special handling for __FILE__, _FILE_DIR__, __LINE__, __MODULE__, __FUNCTION__, and __PRETTY_FUNCTION__.
- bool
isDeclaration(Token*t, NeedDeclaratorIdneedId, TOKendtok, Token**pt); - Determine if the scanner is sitting on the start of a declaration.Parameters:
Output: if *
ptis not NULL, it is set to the ending token, which would beendtok - bool
skipParens(Token*t, Token**pt); - Skip parens, brackets.
Input:
tis on opening (Output: *
ptis set to closing token, which is ')' on successReturns:truesuccessfulfalsesome parsing error - bool
skipAttributes(Token*t, Token**pt); - Skip attributes.
Input:
tis on a candidate attributeOutput: *
ptis set to first non-attribute token on successReturns:truesuccessfulfalsesome parsing error - AST.Expression
parsePrimaryExp(); - Expression Parser
- AST.Expressions*
parseArguments(); - Collect argument list. Assume current token is ',', '(' or '['.
- AST.Expression
parseNewExp(AST.Expressionthisexp); - void
addComment(AST.Dsymbols, const(char)*blockComment);