/// <summary> /// Execute the continue. /// </summary> public object VisitFunctionDeclare(FunctionDeclareExpr expr) { return LObjects.Null; }
private SemanticCheckResult CheckFunctionDeclaration(SemActs semActs, FunctionDeclareExpr exp) { // 1. Number of params var func = exp.Function; var initialErrorCount = _errors.Count; if (func.Meta.Arguments.Count > 12) AddErrorCode(ErrorCodes.Func1004, exp); // 2. Too many aliases on function if (func.Meta.Aliases != null && func.Meta.Aliases.Count > 5) AddError(ErrorCodes.Func1005, exp); // 3. Parameter named arguments? if (func.Meta.ArgumentsLookup.ContainsKey("arguments")) AddErrorCode(ErrorCodes.Func1003, exp); return initialErrorCount == _errors.Count ? SemanticCheckResult.Valid : SemanticCheckResult.ErrorContinue; }
public Expr OnParseFunctionDeclare() { var tokenIt = this._parser.TokenIt; var initiatorToken = tokenIt.NextToken; var expr = new FunctionDeclareExpr(); // <codeFunctionDeclare> var token = tokenIt.NextToken; var expectToken = true; expr.Function = new FunctionExpr(); expr.Function.Meta = new FunctionMetaData(); _parser.SetupContext(expr.Function, token); if (expectToken) tokenIt.Expect(token.Token); else tokenIt.Advance(); // Function name. var name = tokenIt.ExpectId(true, true); var aliases = new List<string>(); var nextToken = tokenIt.NextToken; List<string> argNames = null; // Option 1: Wild card if (nextToken.Token == Tokens.Multiply) { expr.Function.Meta.HasWildCard = true; nextToken = tokenIt.Advance(); } // Option 2: Aliases else if (nextToken.Token == Tokens.Comma) { // Collect all function aliases while (nextToken.Token == Tokens.Comma) { tokenIt.Advance(); var alias = tokenIt.ExpectId(true, true); aliases.Add(alias); nextToken = tokenIt.NextToken; } if (aliases.Count > 0) expr.Function.Meta.Aliases = aliases; } // Get the parameters. if (nextToken.Token == Tokens.LeftParenthesis) { tokenIt.Expect(Tokens.LeftParenthesis); argNames = _parser.ParseNames(); tokenIt.Expect(Tokens.RightParenthesis); } expr.Function.Meta.Init(name, argNames); // Now parser the function block. OnParseFunctionDeclareBlock(expr.Function); // </codeFunctionDeclare> this._parser.SetupContext(expr, initiatorToken); return expr; }
/// <summary> /// Visits the function call expression tree /// </summary> /// <param name="exp"></param> public object VisitFunctionDeclare(FunctionDeclareExpr exp) { _callBackOnNodeStart(exp); for(var ndx = 0; ndx < exp.Function.Statements.Count; ndx++) { var stmt = exp.Function.Statements[ndx]; stmt.Visit(this); } _callBackOnNodeEnd(exp); return null; }