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.

dmd.statement

Defines AST nodes for statements.

Specification Statements

Authors:

Source statement.d

abstract class Statement: dmd.ast_node.ASTNode;
static Statements* arraySyntaxCopy(Statements* a);
Do syntax copy of an array of Statement's.
const pure nothrow bool hasBreak();
Determine if an enclosed break would apply to this statement, such as if it is a loop or switch statement.
Returns:
true if it does
const pure nothrow bool hasContinue();
Determine if an enclosed continue would apply to this statement, such as if it is a loop statement.
Returns:
true if it does
final bool usesEH();
Returns:
true if statement uses exception handling
final bool comeFrom();
Returns:
true if statement 'comes from' somewhere else, like a goto
final bool hasCode();
Returns:
true if statement has executable code.
inout pure nothrow inout(Statement) last();
Find last statement in a sequence of statements.
Returns:
the last statement, or null if there isn't one
void accept(Visitor v);
Support Visitor Pattern
Parameters:
Visitor v visitor
inout pure nothrow @nogc inout(ReturnStatement) endsWithReturnStatement();
Does this statement end with a return statement?
I.e. is it a single return statement or some compound statement that unconditionally hits a return statement.
Returns:
return statement it ends with, otherwise null
final inout pure nothrow @nogc @safe inout(ErrorStatement) isErrorStatement();
A cheaper method of doing downcasting of Statements.
Returns:
the downcast statement if it can be downcasted, otherwise null
class ErrorStatement: dmd.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: dmd.statement.Statement;
class ExpStatement: dmd.statement.Statement;
class DtorExpStatement: dmd.statement.ExpStatement;
class MixinStatement: dmd.statement.Statement;
class CompoundStatement: dmd.statement.Statement;
final @safe this(const ref Loc loc, Statements* statements);
Construct a CompoundStatement using an already existing array of Statements
Parameters:
Loc loc Instantiation information
Statements* statements An array of Statements, that will referenced by this class
final this(const ref Loc loc, Statement[] sts...);
Construct a CompoundStatement from an array of Statements
Parameters:
Loc loc Instantiation information
Statement[] sts A variadic array of Statements, that will copied in this class The entries themselves will not be copied.
class CompoundDeclarationStatement: dmd.statement.CompoundStatement;
class UnrolledLoopStatement: dmd.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: dmd.statement.Statement;
class ForwardingStatement: dmd.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: dmd.attrib.ForwardingAttribDeclaration
ForwardingScopeDsymbol sym;
The symbol containing the static foreach variables.
Statement statement;
The wrapped statement.
class WhileStatement: dmd.statement.Statement;
class DoStatement: dmd.statement.Statement;
class ForStatement: dmd.statement.Statement;
class ForeachStatement: dmd.statement.Statement;
class ForeachRangeStatement: dmd.statement.Statement;
class IfStatement: dmd.statement.Statement;
bool isIfCtfeBlock();
Returns:
true if if (__ctfe)
class ConditionalStatement: dmd.statement.Statement;
class StaticForeachStatement: dmd.statement.Statement;
https://dlang.org/spec/version.html#StaticForeachStatement Static foreach statements, like: void main() { static foreach(i; 0 .. 10) { pragma(msg, i); } }
class PragmaStatement: dmd.statement.Statement;
class StaticAssertStatement: dmd.statement.Statement;
class SwitchStatement: dmd.statement.Statement;
Expression condition;
switch(condition)
Statement _body;
bool isFinal;
bool hasDefault;
true if has default statement
bool hasVars;
true if has variable case values
DefaultStatement sdefault;
default:
Statement tryBody;
set to TryCatchStatement or TryFinallyStatement if in body portion
TryFinallyStatement tf;
set if in the 'finally' block of a TryFinallyStatement
GotoCaseStatements gotoCases;
array of unresolved GotoCaseStatement's
CaseStatements* cases;
array of CaseStatement's
VarDeclaration lastVar;
last observed variable declaration in this statement
class CaseStatement: dmd.statement.Statement;
class CaseRangeStatement: dmd.statement.Statement;
class DefaultStatement: dmd.statement.Statement;
class GotoDefaultStatement: dmd.statement.Statement;
class GotoCaseStatement: dmd.statement.Statement;
class SwitchErrorStatement: dmd.statement.Statement;
class ReturnStatement: dmd.statement.Statement;
class BreakStatement: dmd.statement.Statement;
class ContinueStatement: dmd.statement.Statement;
class SynchronizedStatement: dmd.statement.Statement;
class WithStatement: dmd.statement.Statement;
class TryCatchStatement: dmd.statement.Statement;
Statement tryBody;
set to enclosing TryCatchStatement or TryFinallyStatement if in body portion
class Catch: dmd.rootobject.RootObject;
class TryFinallyStatement: dmd.statement.Statement;
Statement tryBody;
set to enclosing TryCatchStatement or TryFinallyStatement if in body portion
bool bodyFallsThru;
true if body falls through to finally
class ScopeGuardStatement: dmd.statement.Statement;
class ThrowStatement: dmd.statement.Statement;
class DebugStatement: dmd.statement.Statement;
class GotoStatement: dmd.statement.Statement;
Statement tryBody;
set to TryCatchStatement or TryFinallyStatement if in body portion
bool inCtfeBlock;
set if goto is inside an if (__ctfe) block
class LabelStatement: dmd.statement.Statement;
Statement tryBody;
set to TryCatchStatement or TryFinallyStatement if in body portion
class LabelDsymbol: dmd.dsymbol.Dsymbol;
class AsmStatement: dmd.statement.Statement;
class InlineAsmStatement: dmd.statement.AsmStatement;
class GccAsmStatement: dmd.statement.AsmStatement;
https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html Assembler instructions with D expression operands.
class CompoundAsmStatement: dmd.statement.CompoundStatement;
a complete asm {} block
class ImportStatement: dmd.statement.Statement;
pure @safe string visitStmtCase(string handler);
CTFE-only helper function for VisitInitializer.
Parameters:
string handler string for the name of the visit handler
Returns:
boilerplate code for a case