Ejemplo n.º 1
0
 /// <summary>
 /// Execute the continue.
 /// </summary>
 public object VisitFunctionDeclare(FunctionDeclareExpr expr)
 {
     return LObjects.Null;
 }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
		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;
		}
Ejemplo n.º 4
0
 /// <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;
 }