private void Resolve(ContinueExpr @continue) { if (!_currentLambda) { throw new Exception("Cannot continue when not in a loop!"); } // TODO: resolve label }
public Expr OnParseContinue() { var tokenIt = this._parser.TokenIt; var initiatorToken = tokenIt.NextToken; var expr = new ContinueExpr(); // <codeContinue> tokenIt.Advance(); // </codeContinue> this._parser.SetupContext(expr, initiatorToken); return(expr); }
/// <summary> /// Execute the continue. /// </summary> public object VisitContinue(ContinueExpr expr) { var loop = expr.FindParent <ILoop>(); if (loop == null) { throw new LangException("syntax error", "unable to break, loop not found", string.Empty, 0); } loop.DoContinueLoop = true; return(LObjects.Null); }
private object Evaluate(Expr expression) { return(expression switch { BinaryExpr binaryExpr => Evaluate(binaryExpr), BlockExpr blockExpr => Evaluate(blockExpr), BreakExpr breakExpr => Evaluate(breakExpr), CallExpr callExpr => Evaluate(callExpr), ContinueExpr continueExpr => Evaluate(continueExpr), Identifier identifier => Evaluate(identifier), IfExpr ifExpr => Evaluate(ifExpr), LambdaExpr lambdaExpr => Evaluate(lambdaExpr), Literal literal => Evaluate(literal), ReturnExpr returnExpr => Evaluate(returnExpr), UnaryExpr unaryExpr => Evaluate(unaryExpr), _ => throw new ArgumentOutOfRangeException(nameof(expression)) });
/// <summary> /// Visits the var statement tree. /// </summary> /// <param name="expr"></param> public object VisitContinue(ContinueExpr expr) { _callBackOnNodeStart(expr); return(null); }
/// <summary> /// Visits the var statement tree. /// </summary> /// <param name="assignExpr"></param> public object VisitContinue(ContinueExpr expr) { _callBackOnNodeStart(expr); return null; }
/// <summary> /// continue; /// </summary> /// <returns></returns> public override Expr Parse() { var expr = new ContinueExpr(); _tokenIt.Expect(Tokens.Continue); return expr; }