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; }
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); }