Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

ddmd.statement

Compiler implementation of the D programming language.
Authors:

Source: statement.d

Expression checkAssignmentAsCondition(Expression e);
Check an assignment is used as a condition. Intended to be use before the semantic call on e.
Parameters:
Expression e condition expression which is not yet run semantic analysis.
Returns:
e or ErrorExp.
TypeIdentifier getThrowable();
Return a type identifier reference to 'object.Throwable'
abstract class Statement: ddmd.root.rootobject.RootObject;
Statement scopeCode(Scope* sc, Statement* sentry, Statement* sexception, Statement* sfinally);
If this statement has code that needs to run in a finally clause at the end of the current scope, return that code in the form of a Statement.

Output: *sentry code executed upon entry to the scope *sexception code executed upon exit from the scope via exception *sfinally code executed in finally block

Statements* flatten(Scope* sc);
Flatten out the scope by presenting the statement as an array of statements. Returns NULL if no flattening necessary.
class ErrorStatement: ddmd.statement.Statement;
Any Statement that fails semantic() or has a component that is an ErrorExp or a TypeError should return an ErrorStatement from semantic().
class PeelStatement: ddmd.statement.Statement;
Statement toStatement(Dsymbol s);
Convert TemplateMixin members (== Dsymbols) to Statements.
class ExpStatement: ddmd.statement.Statement;
class DtorExpStatement: ddmd.statement.ExpStatement;
class CompileStatement: ddmd.statement.Statement;
class CompoundStatement: ddmd.statement.Statement;
final this(Loc loc, Statements* s);
Construct a CompoundStatement using an already existing array of Statements
Parameters:
Loc loc Instantiation information
Statements* s An array of Statements, that will referenced by this class
final this(Loc loc, Statement[] sts...);
Construct a CompoundStatement from an array of Statements
Parameters:
Loc loc Instantiation information
s A variadic array of Statements, that will copied in this class The entries themselves will not be copied.
class CompoundDeclarationStatement: ddmd.statement.CompoundStatement;
class UnrolledLoopStatement: ddmd.statement.Statement;
The purpose of this is so that continue will go to the next of the statements, and break will go to the end of the statements.
class ScopeStatement: ddmd.statement.Statement;
class ForwardingStatement: ddmd.statement.Statement;
Statement whose symbol table contains foreach index variables in a local scope and forwards other members to the parent scope. This wraps a statement.
Also see: ddmd.attrib.ForwardingAttribDeclaration
ForwardingScopeDsymbol sym;
The symbol containing the static foreach variables.
Statement statement;
The wrapped statement.
Statements* flatten(Scope* sc);
ForwardingStatements are distributed over the flattened sequence of statements. This prevents flattening to be "blocked" by a ForwardingStatement and is necessary, for example, to support generating scope guards with `static foreach`:
static foreach(i; 0 .. 10) scope(exit) writeln(i); writeln("this is printed first"); // then, it prints 10, 9, 8, 7, ...
class WhileStatement: ddmd.statement.Statement;
class DoStatement: ddmd.statement.Statement;
class ForStatement: ddmd.statement.Statement;
class ForeachStatement: ddmd.statement.Statement;
class ForeachRangeStatement: ddmd.statement.Statement;
class IfStatement: ddmd.statement.Statement;
class ConditionalStatement: ddmd.statement.Statement;
class StaticForeachStatement: ddmd.statement.Statement;
Static foreach statements, like: void main() { static foreach(i; 0 .. 10) { pragma(msg, i); } }
class PragmaStatement: ddmd.statement.Statement;
class StaticAssertStatement: ddmd.statement.Statement;
class SwitchStatement: ddmd.statement.Statement;
class CaseStatement: ddmd.statement.Statement;
class CaseRangeStatement: ddmd.statement.Statement;
class DefaultStatement: ddmd.statement.Statement;
class GotoDefaultStatement: ddmd.statement.Statement;
class GotoCaseStatement: ddmd.statement.Statement;
class SwitchErrorStatement: ddmd.statement.Statement;
class ReturnStatement: ddmd.statement.Statement;
class BreakStatement: ddmd.statement.Statement;
class ContinueStatement: ddmd.statement.Statement;
class SynchronizedStatement: ddmd.statement.Statement;
class WithStatement: ddmd.statement.Statement;
class TryCatchStatement: ddmd.statement.Statement;
class Catch: ddmd.root.rootobject.RootObject;
class TryFinallyStatement: ddmd.statement.Statement;
class OnScopeStatement: ddmd.statement.Statement;
class ThrowStatement: ddmd.statement.Statement;
class DebugStatement: ddmd.statement.Statement;
class GotoStatement: ddmd.statement.Statement;
class LabelStatement: ddmd.statement.Statement;
class LabelDsymbol: ddmd.dsymbol.Dsymbol;
class AsmStatement: ddmd.statement.Statement;
class CompoundAsmStatement: ddmd.statement.CompoundStatement;
a complete asm {} block
class ImportStatement: ddmd.statement.Statement;