// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; using System.Collections.Generic; namespace VBDomGenerator.Dom { [CustomImplementation] abstract class Statement : AbstractNode, INullable {} [CustomImplementation] abstract class StatementWithEmbeddedStatement : Statement { Statement embeddedStatement; } [CustomImplementation, HasChildren] class BlockStatement : Statement {} enum ContinueType {} class ContinueStatement : Statement { ContinueType continueType; public ContinueStatement() {} public ContinueStatement(ContinueType continueType) {} } enum ConditionType {} enum ConditionPosition {} class DoLoopStatement : StatementWithEmbeddedStatement { Expression condition; ConditionType conditionType; ConditionPosition conditionPosition; public DoLoopStatement(Expression condition, Statement embeddedStatement, ConditionType conditionType, ConditionPosition conditionPosition) {} } class ForeachStatement : StatementWithEmbeddedStatement { TypeReference typeReference; string variableName; Expression expression; Expression nextExpression; public ForeachStatement(TypeReference typeReference, string variableName, Expression expression, Statement embeddedStatement) {} public ForeachStatement(TypeReference typeReference, string variableName, Expression expression, Statement embeddedStatement, Expression nextExpression) {} } class GotoStatement : Statement { string label; public GotoStatement(string label) {} } [IncludeMember(@" public IfElseStatement(Expression condition, Statement trueStatement) : this(condition) { this.trueStatement.Add(Statement.CheckNull(trueStatement)); if (trueStatement != null) trueStatement.Parent = this; }")] [IncludeMember(@" public IfElseStatement(Expression condition, Statement trueStatement, Statement falseStatement) : this(condition) { this.trueStatement.Add(Statement.CheckNull(trueStatement)); this.falseStatement.Add(Statement.CheckNull(falseStatement)); if (trueStatement != null) trueStatement.Parent = this; if (falseStatement != null) falseStatement.Parent = this; }")] [IncludeBoolProperty("HasElseStatements", "return falseStatement.Count > 0;")] [IncludeBoolProperty("HasElseIfSections", "return elseIfSections.Count > 0;")] class IfElseStatement : Statement { Expression condition; List trueStatement; // List for stmt : stmt : stmt ... in VB.NET List falseStatement; List elseIfSections; public IfElseStatement(Expression condition) {} } class ElseIfSection : StatementWithEmbeddedStatement { Expression condition; public ElseIfSection(Expression condition, Statement embeddedStatement) {} } class LabelStatement : Statement { string label; public LabelStatement(string label) {} } [CustomImplementation] class LocalVariableDeclaration : Statement { TypeReference typeReference; Modifiers modifier; List variables; } class LockStatement : StatementWithEmbeddedStatement { Expression lockExpression; public LockStatement(Expression lockExpression, Statement embeddedStatement) {} } class ReturnStatement : Statement { Expression expression; public ReturnStatement(Expression expression) { } } class ExpressionStatement : Statement { Expression expression; public ExpressionStatement(Expression expression) {} } class SwitchStatement : Statement { Expression switchExpression; List switchSections; public SwitchStatement(Expression switchExpression, List switchSections) {} } class SwitchSection : BlockStatement { List switchLabels; public SwitchSection() { } public SwitchSection(List switchLabels) { } } [IncludeBoolProperty("IsDefault", "return label.IsNull;")] class CaseLabel : AbstractNode { Expression label; BinaryOperatorType binaryOperatorType; Expression toExpression; public CaseLabel() {} public CaseLabel(Expression label) {} public CaseLabel(Expression label, Expression toExpression) {} public CaseLabel(BinaryOperatorType binaryOperatorType, Expression label) {} } class ThrowStatement : Statement { Expression expression; public ThrowStatement(Expression expression) {} } class TryCatchStatement : Statement { Statement statementBlock; List catchClauses; Statement finallyBlock; public TryCatchStatement(Statement statementBlock, List catchClauses, Statement finallyBlock) {} } class CatchClause : AbstractNode { TypeReference typeReference; string variableName; Statement statementBlock; Expression condition; public CatchClause(TypeReference typeReference, string variableName, Statement statementBlock) {} public CatchClause(TypeReference typeReference, string variableName, Statement statementBlock, Expression condition) {} public CatchClause(Statement statementBlock) {} } class UsingStatement : StatementWithEmbeddedStatement { Statement resourceAcquisition; public UsingStatement(Statement resourceAcquisition, Statement embeddedStatement) {} } class AddHandlerStatement : Statement { Expression eventExpression; Expression handlerExpression; public AddHandlerStatement(Expression eventExpression, Expression handlerExpression) {} } class EndStatement : Statement {} class EraseStatement : Statement { List expressions; public EraseStatement() {} public EraseStatement(List expressions) {} } class ErrorStatement : Statement { Expression expression; public ErrorStatement(Expression expression) {} } enum ExitType {} class ExitStatement : Statement { ExitType exitType; public ExitStatement(ExitType exitType) {} } class ForNextStatement : StatementWithEmbeddedStatement { Expression start; Expression end; Expression step; List nextExpressions; // either use typeReference+variableName TypeReference typeReference; string variableName; // or use loopVariableExpression: Expression loopVariableExpression; } class OnErrorStatement : StatementWithEmbeddedStatement { public OnErrorStatement(Statement embeddedStatement) {} } class RaiseEventStatement : Statement { string eventName; List arguments; public RaiseEventStatement(string eventName, List arguments) {} } class ReDimStatement : Statement { List reDimClauses; bool isPreserve; public ReDimStatement(bool isPreserve) {} } class RemoveHandlerStatement : Statement { Expression eventExpression; Expression handlerExpression; public RemoveHandlerStatement(Expression eventExpression, Expression handlerExpression) {} } class ResumeStatement : Statement { string labelName; bool isResumeNext; public ResumeStatement(bool isResumeNext) {} public ResumeStatement(string labelName) {} } class StopStatement : Statement {} class WithStatement : Statement { Expression expression; BlockStatement body; public WithStatement(Expression expression) {} } }