private IStatement StatementFromContext(Scope scope, DeltinScriptParser.Documented_statementContext statementContext) { switch (statementContext.statement()) { case DeltinScriptParser.S_defineContext define: { var newVar = new ScopedVariable(scope, new DefineContextHandler(this, define.define())); return(new DefineAction(newVar)); } case DeltinScriptParser.S_methodContext method: return(new CallMethodAction(this, scope, method.method(), false, scope)); case DeltinScriptParser.S_varsetContext varset: return(new SetVariableAction(this, scope, varset.varset())); case DeltinScriptParser.S_exprContext s_expr: { var expr = GetExpression(scope, s_expr.expr(), true, false); if (expr is ExpressionTree == false || ((ExpressionTree)expr)?.Result is IStatement == false) { if (expr != null) { Script.Diagnostics.Error("Expressions can't be used as statements.", DocRange.GetRange(statementContext)); } return(null); } else { return((ExpressionTree)expr); } } case DeltinScriptParser.S_ifContext s_if: return(new IfAction(this, scope, s_if.@if())); case DeltinScriptParser.S_whileContext s_while: return(new WhileAction(this, scope, s_while.@while())); case DeltinScriptParser.S_forContext s_for: return(new ForAction(this, scope, s_for.@for())); case DeltinScriptParser.S_for_autoContext s_forAuto: return(new AutoForAction(this, scope, s_forAuto.for_auto())); case DeltinScriptParser.S_foreachContext s_foreach: return(new ForeachAction(this, scope, s_foreach.@foreach())); case DeltinScriptParser.S_returnContext s_return: return(new ReturnAction(this, scope, s_return.@return())); case DeltinScriptParser.S_deleteContext s_delete: return(new DeleteAction(this, scope, s_delete.delete())); case DeltinScriptParser.S_continueContext s_continue: return(new ContinueAction(this, DocRange.GetRange(s_continue))); case DeltinScriptParser.S_breakContext s_break: return(new BreakAction(this, DocRange.GetRange(s_break))); case DeltinScriptParser.S_switchContext s_switch: return(new SwitchAction(this, scope, s_switch.@switch())); case DeltinScriptParser.S_blockContext s_block: return(new BlockAction(this, scope, s_block)); default: return(null); } }
/// <summary>Gets an IStatement from a StatementContext.</summary> /// <param name="scope">The scope the statement was created in.</param> /// <param name="statementContext">The context of the statement.</param> public IStatement GetStatement(Scope scope, DeltinScriptParser.Documented_statementContext statementContext) { IStatement statement = StatementFromContext(scope, statementContext); // Apply related output comment. if (statementContext.DOCUMENTATION() != null) { string text = statementContext.DOCUMENTATION().GetText().Substring(1).Trim(); DocRange range = DocRange.GetRange(statementContext.DOCUMENTATION()); statement.OutputComment(Script.Diagnostics, range, text); } return(statement); }