Exemple #1
0
        internal static Node FunctionDefinition(Tokenizer t, Node x, bool requireName, StatementForm functionForm)
        {
            Node f = new Node(t, TokenType.NULL);
            if (f.type != TokenType.Function)
                f.type = (f.value.ToString() == "get") ? TokenType.GETTER : TokenType.SETTER;
            if (t.match(TokenType.IDENTIFIER))
                f.name = t.token.value.ToString();
            else if (requireName)
                throw t.newSyntaxError("Missing function identifier");

            t.mustMatch(TokenType.LEFT_PAREN);
            TokenType tt;
            while ((tt = t.get()) != TokenType.RIGHT_PAREN)
            {
                if (tt != TokenType.IDENTIFIER)
                    throw t.newSyntaxError("Missing formal parameter");
                f.fparams.Add(t.token.value);
                if (t.peek() != TokenType.RIGHT_PAREN)
                    t.mustMatch(TokenType.COMMA);
            }

            t.mustMatch(TokenType.LEFT_CURLY);
            Node x2 = new Node(t, TokenType.NULL, true);
            f.body = Script(t, x2);
            t.mustMatch(TokenType.RIGHT_CURLY);
            f.end = t.token.end;

            f.functionForm = functionForm;
            if (functionForm == StatementForm.DECLARED_FORM)
                x.funDecls.Add(f);
            return f;
        }
Exemple #2
0
        internal static Node FunctionDefinition(Tokenizer t, Node x, bool requireName, StatementForm functionForm)
        {
            Node f = new Node(t, TokenType.NULL);

            if (f.type != TokenType.Function)
            {
                f.type = (f.value.ToString() == "get") ? TokenType.GETTER : TokenType.SETTER;
            }
            if (t.match(TokenType.IDENTIFIER))
            {
                f.name = t.token.value.ToString();
            }
            else if (requireName)
            {
                throw t.newSyntaxError("Missing function identifier");
            }

            t.mustMatch(TokenType.LEFT_PAREN);
            TokenType tt;

            while ((tt = t.get()) != TokenType.RIGHT_PAREN)
            {
                if (tt != TokenType.IDENTIFIER)
                {
                    throw t.newSyntaxError("Missing formal parameter");
                }
                f.fparams.Add(t.token.value);
                if (t.peek() != TokenType.RIGHT_PAREN)
                {
                    t.mustMatch(TokenType.COMMA);
                }
            }

            t.mustMatch(TokenType.LEFT_CURLY);
            Node x2 = new Node(t, TokenType.NULL, true);

            f.body = Script(t, x2);
            t.mustMatch(TokenType.RIGHT_CURLY);
            f.end = t.token.end;

            f.functionForm = functionForm;
            if (functionForm == StatementForm.DECLARED_FORM)
            {
                x.funDecls.Add(f);
            }
            return(f);
        }