e1 [ a0, a1, a2, a3 ,... ]
[ e1, e2, e3, ... ]
[ key0 : value0, key1 : value1, ... ]
Possible to cast to one type while painting to another type
Declaration of a symbol
Mainly just a placeholder
foo.bar!(args)
Won't be generated by parser. A placeholder expression to call DsymbolExp.resolve on specific symbol.
== and !=
Use this expression for error recovery. It should behave as a 'sink' to prevent further cascaded error messages.
Function/Delegate literal
is and !is
e1 [ e2 ]
Mainly just a placeholder
is(targ id tok tspec) is(targ id == tok2)
thisexp.new(newargs) class baseclasses { } (arguments)
thisexp.new(newargs) newtype(arguments)
Overload Set
For both i++ and i--
For both ++i and --i
This deletes the key e1 from the associative array e2
Mainly just a placeholder of Package, Module, Nspace, and TemplateInstance (including TemplateMixin)
sd( e1, e2, e3, ... )
Offset from symbol
Mainly just a placeholder
__traits(identifier, args...)
Mainly just a placeholder
typeid(int)
Variable
Test to see if two reals are the same. Regard NaN's as equivalent. Regard +0 and -0 as different.
Perform semantic() on an array of Expressions.
The common type is determined by applying ?: to each pair. Output: exps[] properties resolved, implicitly cast to common type, rewritten in place *pt if pt is not NULL, set to the common type
If e is an instance of a struct, and that struct has a copy constructor, rewrite e as: (tmp = e),tmp Input: sc just used to specify the scope of created temporary variable
Issue an error if default construction is disabled for type t. Default construction is required for arrays and 'out' parameters.
Check the tail CallExp is really property function call.
Handle the postblit call on lvalue, or the move of rvalue.
Expand tuples. Input: exps aray of Expressions Output: exps rewritten in place
Now that we know the exact type of the function we're calling, the arguments[] need to be adjusted: 1. implicitly convert argument to the corresponding parameter type 2. add default arguments for any missing arguments 3. do default promotions on arguments corresponding to ... 4. add hidden _arguments[] argument 5. call copy constructor for struct value arguments Input: tf type of the function fd the function being called, NULL if called indirectly Output: *prettype return type of function *peprefix expression to execute before arguments[] are evaluated, NULL if none
Get TemplateDeclaration enclosing FuncDeclaration.
Given var, we need to get the right 'this' pointer if var is in an outer class, but our existing 'this' pointer is in an inner class. Input: e1 existing 'this' ad struct or class we need the correct 'this' for var the specific member of ad we're accessing
Determine if 'this' is available. If it is, return the FuncDeclaration that has it.
Expand alias this tuples.
check e is exp.opDispatch!(tiargs) or not It's used to switch to UFCS the semantic analysis path
Mark variable v as modified if it is inside a constructor that var is a field in.
Preprocess arguments to function. Output: exps[] tuples expanded, properties resolved, rewritten in place
Runs semantic on se->lwr and se->upr. Declares a temporary variable if '$' was used.
Runs semantic on ae->arguments. Declares temporary variables if '$' was used.
If e1 is a property function (template), resolve it.
Pull out any properties.
Pull out callable entity with UFCS.
Pull out property with UFCS.
Find symbol in accordance with the UFCS name look up rule
Resolve exp as a compile-time known string.
TypeDotIdExp
If we want the value of this expression, but do not want to call the destructor on it.
See Source File
$(DMDSRC _expression.d)
Copyright (c) 1999-2016 by Digital Mars, All Rights Reserved
Compiler implementation of the D programming language.