#define YY_EXTRA_TYPE CYDriver *
+#define A new($pool)
+#define Y apr_pstrmemdup($pool, yytext, yyleng)
+
+#define I(type, Type, Name) do { \
+ yylval->type ## _ = A CY ## Type; \
+ return tk::Name; \
+} while (false)
+
#define T yylval->newline_ = yyextra->state_ == CYNewLine; BEGIN(Div);
#define C T yyextra->state_ = CYClear;
#define R T yyextra->state_ = CYRestricted;
#define E(prefix) L C { \
- char *value(reinterpret_cast<char *>(apr_palloc(yyextra->pool_, yyleng + sizeof(prefix)))); \
+ char *value(A char[yyleng + sizeof(prefix)]); \
memcpy(value, prefix, sizeof(prefix) - 1); \
memcpy(value + sizeof(prefix) - 1, yytext, yyleng); \
value[yyleng + sizeof(prefix) - 1] = '\0'; \
- yylval->literal_ = new(yyextra->pool_) CYRegEx(value); \
- return tk::RegularExpressionLiteral; \
+ I(literal, RegEx(value), RegularExpressionLiteral); \
}
#define N \
if (yyextra->state_ != CYNewLine) { \
- bool restricted(yyextra->state_ == CYRestricted); \
- if (restricted) { \
+ if (yyextra->state_ != CYRestricted) \
+ yyextra->state_ = CYNewLine; \
+ else { \
yyextra->state_ = CYClear; \
return tk::NewLine; \
- } else \
- yyextra->state_ = CYNewLine; \
+ } \
}
#define V(more) { \
/* http://ostermiller.org/findcomment.html */
/* XXX: unify these two rules using !? */
-\/\*!([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V() C yylval->comment_ = new(yyextra->pool_) CYComment(apr_pstrmemdup(yyextra->pool_, yytext, yyleng)); return tk::Comment;
+\/\*!([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V() C I(comment, Comment(Y), Comment);
\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/ V(N)
@begin E4X
<XMLTag>"/>" L return tk::SlashRight;
<XMLTag>"{" L return tk::OpenBrace;
-<XMLTag>\"(\n|[^"])*\"|'(\n|[^'])*' V() {
- return tk::XMLAttributeValue;
-}
-
+<XMLTag>\"(\n|[^"])*\"|'(\n|[^'])*' V() return tk::XMLAttributeValue;
<XMLTag>{XMLName} L return tk::XMLName;
<XMLTag>[ \t\r\n] V() return tk::XMLWhitespace;
"@selector" L C return tk::AtSelector;
@end
-"false" L C yylval->false_ = new(yyextra->pool_) CYFalse(); return tk::False;
-"null" L C yylval->null_ = new(yyextra->pool_) CYNull(); return tk::Null;
-"true" L C yylval->true_ = new(yyextra->pool_) CYTrue(); return tk::True;
-
-"break" L R yylval->word_ = new(yyextra->pool_) CYWord("break"); return tk::Break;
-"case" L C yylval->word_ = new(yyextra->pool_) CYWord("case"); return tk::Case;
-"catch" L C yylval->word_ = new(yyextra->pool_) CYWord("catch"); return tk::Catch;
-"continue" L R yylval->word_ = new(yyextra->pool_) CYWord("continue"); return tk::Continue;
-"default" L C yylval->word_ = new(yyextra->pool_) CYWord("default"); return tk::Default;
-"delete" L C yylval->word_ = new(yyextra->pool_) CYWord("delete"); return tk::Delete;
-"do" L C yylval->word_ = new(yyextra->pool_) CYWord("do"); return tk::Do;
-"else" L C yylval->word_ = new(yyextra->pool_) CYWord("else"); return tk::Else;
-"finally" L C yylval->word_ = new(yyextra->pool_) CYWord("finally"); return tk::Finally;
-"for" L C yylval->word_ = new(yyextra->pool_) CYWord("for"); return tk::For;
-"function" L C yylval->word_ = new(yyextra->pool_) CYWord("function"); return tk::Function;
-"if" L C yylval->word_ = new(yyextra->pool_) CYWord("if"); return tk::If;
-"in" L C yylval->word_ = new(yyextra->pool_) CYWord("in"); return tk::In;
-"instanceof" L C yylval->word_ = new(yyextra->pool_) CYWord("instanceof"); return tk::InstanceOf;
-"new" L C yylval->word_ = new(yyextra->pool_) CYWord("new"); return tk::New;
-"return" L R yylval->word_ = new(yyextra->pool_) CYWord("return"); return tk::Return;
-"switch" L C yylval->word_ = new(yyextra->pool_) CYWord("switch"); return tk::Switch;
-"this" L C yylval->this_ = new(yyextra->pool_) CYThis(); return tk::This;
-"throw" L R yylval->word_ = new(yyextra->pool_) CYWord("throw"); return tk::Throw;
-"try" L C yylval->word_ = new(yyextra->pool_) CYWord("try"); return tk::Try;
-"typeof" L C yylval->word_ = new(yyextra->pool_) CYWord("typeof"); return tk::TypeOf;
-"var" L C yylval->word_ = new(yyextra->pool_) CYWord("var"); return tk::Var;
-"void" L C yylval->word_ = new(yyextra->pool_) CYWord("void"); return tk::Void;
-"while" L C yylval->word_ = new(yyextra->pool_) CYWord("while"); return tk::While;
-"with" L C yylval->word_ = new(yyextra->pool_) CYWord("with"); return tk::With;
-
-"debugger" L C yylval->word_ = new(yyextra->pool_) CYWord("debugger"); return tk::Debugger;
-
-"const" L C yylval->word_ = new(yyextra->pool_) CYWord("const"); return tk::Const;
-
-"class" L C yylval->word_ = new(yyextra->pool_) CYWord("class"); return tk::Class;
-"enum" L C yylval->word_ = new(yyextra->pool_) CYWord("enum"); return tk::Enum;
-"export" L C yylval->word_ = new(yyextra->pool_) CYWord("export"); return tk::Export;
-"extends" L C yylval->word_ = new(yyextra->pool_) CYWord("extends"); return tk::Extends;
-"import" L C yylval->word_ = new(yyextra->pool_) CYWord("import"); return tk::Import;
-"super" L C yylval->word_ = new(yyextra->pool_) CYWord("super"); return tk::Super;
-
-"implements" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("implements"); return tk::Implements;
-"interface" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("interface"); return tk::Interface;
-"package" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("package"); return tk::Package;
-"private" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("private"); return tk::Private;
-"protected" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("protected"); return tk::Protected;
-"public" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("public"); return tk::Public;
-"static" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("static"); return tk::Static;
-
-"abstract" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("abstract"); return tk::Abstract;
-"boolean" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("boolean"); return tk::Boolean;
-"byte" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("byte"); return tk::Byte;
-"char" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("char"); return tk::Char;
-"double" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("double"); return tk::Double;
-"final" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("final"); return tk::Final;
-"float" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("float"); return tk::Float;
-"goto" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("goto"); return tk::Goto;
-"int" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("int"); return tk::Int;
-"long" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("long"); return tk::Long;
-"native" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("native"); return tk::Native;
-"short" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("short"); return tk::Short;
-"synchronized" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("synchronized"); return tk::Synchronized;
-"throws" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("throws"); return tk::Throws;
-"transient" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("transient"); return tk::Transient;
-"volatile" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("volatile"); return tk::Volatile;
-
-"let" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("let"); return tk::Let;
-"yield" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("yield"); return tk::Yield;
-
-"each" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("each"); return tk::Each;
+"false" L C I(false, False(), False);
+"null" L C I(null, Null(), Null);
+"true" L C I(true, True(), True);
+
+"break" L R I(word, Word("break"), Break);
+"case" L C I(word, Word("case"), Case);
+"catch" L C I(word, Word("catch"), Catch);
+"continue" L R I(word, Word("continue"), Continue);
+"default" L C I(word, Word("default"), Default);
+"delete" L C I(word, Word("delete"), Delete);
+"do" L C I(word, Word("do"), Do);
+"else" L C I(word, Word("else"), Else);
+"finally" L C I(word, Word("finally"), Finally);
+"for" L C I(word, Word("for"), For);
+"function" L C I(word, Word("function"), Function);
+"if" L C I(word, Word("if"), If);
+"in" L C I(word, Word("in"), In);
+"instanceof" L C I(word, Word("instanceof"), InstanceOf);
+"new" L C I(word, Word("new"), New);
+"return" L R I(word, Word("return"), Return);
+"switch" L C I(word, Word("switch"), Switch);
+"this" L C I(this, This(), This);
+"throw" L R I(word, Word("throw"), Throw);
+"try" L C I(word, Word("try"), Try);
+"typeof" L C I(word, Word("typeof"), TypeOf);
+"var" L C I(word, Word("var"), Var);
+"void" L C I(word, Word("void"), Void);
+"while" L C I(word, Word("while"), While);
+"with" L C I(word, Word("with"), With);
+
+"debugger" L C I(word, Word("debugger"), Debugger);
+
+"const" L C I(word, Word("const"), Const);
+
+"class" L C I(word, Word("class"), Class);
+"enum" L C I(word, Word("enum"), Enum);
+"export" L C I(word, Word("export"), Export);
+"extends" L C I(word, Word("extends"), Extends);
+"import" L C I(word, Word("import"), Import);
+"super" L C I(word, Word("super"), Super);
+
+"implements" L C I(identifier, Identifier("implements"), Implements);
+"interface" L C I(identifier, Identifier("interface"), Interface);
+"package" L C I(identifier, Identifier("package"), Package);
+"private" L C I(identifier, Identifier("private"), Private);
+"protected" L C I(identifier, Identifier("protected"), Protected);
+"public" L C I(identifier, Identifier("public"), Public);
+"static" L C I(identifier, Identifier("static"), Static);
+
+"abstract" L C I(identifier, Identifier("abstract"), Abstract);
+"boolean" L C I(identifier, Identifier("boolean"), Boolean);
+"byte" L C I(identifier, Identifier("byte"), Byte);
+"char" L C I(identifier, Identifier("char"), Char);
+"double" L C I(identifier, Identifier("double"), Double);
+"final" L C I(identifier, Identifier("final"), Final);
+"float" L C I(identifier, Identifier("float"), Float);
+"goto" L C I(identifier, Identifier("goto"), Goto);
+"int" L C I(identifier, Identifier("int"), Int);
+"long" L C I(identifier, Identifier("long"), Long);
+"native" L C I(identifier, Identifier("native"), Native);
+"short" L C I(identifier, Identifier("short"), Short);
+"synchronized" L C I(identifier, Identifier("synchronized"), Synchronized);
+"throws" L C I(identifier, Identifier("throws"), Throws);
+"transient" L C I(identifier, Identifier("transient"), Transient);
+"volatile" L C I(identifier, Identifier("volatile"), Volatile);
+
+"let" L C I(identifier, Identifier("let"), Let);
+"yield" L C I(identifier, Identifier("yield"), Yield);
+
+"each" L C I(identifier, Identifier("each"), Each);
@begin E4X
-"namespace" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("namespace"); return tk::Namespace;
-"xml" L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier("xml"); return tk::XML;
+"namespace" L C I(identifier, Identifier("namespace"), Namespace);
+"xml" L C I(identifier, Identifier("xml"), XML);
@end
-{IdentifierStart}{IdentifierPart}* L C yylval->identifier_ = new(yyextra->pool_) CYIdentifier(apr_pstrmemdup(yyextra->pool_, yytext, yyleng)); return tk::Identifier_;
+{IdentifierStart}{IdentifierPart}* L C I(identifier, Identifier(Y), Identifier_);
-(\.[0-9]+|(0|[1-9][0-9]*)(\.[0-9]*)?){Exponent}? L C yylval->number_ = new(yyextra->pool_) CYNumber(strtod(yytext, NULL)); return tk::NumericLiteral;
+(\.[0-9]+|(0|[1-9][0-9]*)(\.[0-9]*)?){Exponent}? L C I(number, Number(strtod(yytext, NULL)), NumericLiteral);
-0[xX][0-9a-fA-F]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 2, NULL, 16)); return tk::NumericLiteral;
-0[0-7]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 1, NULL, 8)); return tk::NumericLiteral;
-0[bB][0-1]+ L C yylval->number_ = new(yyextra->pool_) CYNumber(strtoull(yytext + 2, NULL, 2)); return tk::NumericLiteral;
+0[xX][0-9a-fA-F]+ L C I(number, Number(strtoull(yytext + 2, NULL, 16)), NumericLiteral);
+0[0-7]+ L C I(number, Number(strtoull(yytext + 1, NULL, 8)), NumericLiteral);
+0[bB][0-1]+ L C I(number, Number(strtoull(yytext + 2, NULL, 2)), NumericLiteral);
\"([^"\\\n]|{Escape})*\"|'([^'\\\n]|{Escape})*' L C {
- char *value(reinterpret_cast<char *>(apr_palloc(yyextra->pool_, yyleng)));
+ char *value(A char[yyleng]);
char *local(value);
for (yy_size_t i(1), e(yyleng - 1); i != e; ++i) {
}
*local = '\0';
- yylval->string_ = new(yyextra->pool_) CYString(value, local - value);
- return tk::StringLiteral;
+ I(string, String(value, local - value), StringLiteral);
}
\r?\n yylloc->end.lines(); yylloc->step(); N
@if Bison24 %code requires {
#include "Parser.hpp"
+#define CYNew new($pool)
@begin ObjectiveC
#include "ObjectiveC/Syntax.hpp"
PrimaryExpressionNo
: "this" { $$ = $1; }
- | Identifier { $$ = new(driver.pool_) CYVariable($1); }
+ | Identifier { $$ = CYNew CYVariable($1); }
| AutoComplete { driver.mode_ = CYDriver::AutoPrimary; YYACCEPT; }
| Literal { $$ = $1; }
| ArrayLiteral { $$ = $1; }
/* }}} */
/* 11.1.4 Array Initialiser {{{ */
ArrayLiteral
- : "[" ElementListOpt "]" { $$ = new(driver.pool_) CYArray($2); }
+ : "[" ElementListOpt "]" { $$ = CYNew CYArray($2); }
;
Element
;
ElementList
- : ElementOpt "," ElementListOpt { $$ = new(driver.pool_) CYElement($1, $3); }
- | Element { $$ = new(driver.pool_) CYElement($1, NULL); }
+ : ElementOpt "," ElementListOpt { $$ = CYNew CYElement($1, $3); }
+ | Element { $$ = CYNew CYElement($1, NULL); }
;
/* }}} */
/* 11.1.5 Object Initialiser {{{ */
ObjectLiteral
- : OpenBrace PropertyNameAndValueListOpt "}" { $$ = new(driver.pool_) CYObject($2); }
+ : OpenBrace PropertyNameAndValueListOpt "}" { $$ = CYNew CYObject($2); }
;
PropertyNameAndValueList_
;
PropertyNameAndValueList
- : PropertyName ":" AssignmentExpression PropertyNameAndValueList_ { $$ = new(driver.pool_) CYProperty($1, $3, $4); }
+ : PropertyName ":" AssignmentExpression PropertyNameAndValueList_ { $$ = CYNew CYProperty($1, $3, $4); }
;
PropertyName_
/* 11.2 Left-Hand-Side Expressions {{{ */
MemberExpression_
- : "new" MemberExpression Arguments { $$ = new(driver.pool_) CYNew($2, $3); }
+ : "new" MemberExpression Arguments { $$ = CYNew cy::Syntax::New($2, $3); }
;
MemberAccess
- : "[" Expression "]" { $$ = new(driver.pool_) CYDirectMember(NULL, $2); }
- | "." Identifier { $$ = new(driver.pool_) CYDirectMember(NULL, new(driver.pool_) CYString($2)); }
+ : "[" Expression "]" { $$ = CYNew CYDirectMember(NULL, $2); }
+ | "." Identifier { $$ = CYNew CYDirectMember(NULL, CYNew CYString($2)); }
| "." AutoComplete { driver.mode_ = CYDriver::AutoDirect; YYACCEPT; }
;
@end
NewExpression_
- : "new" NewExpression { $$ = new(driver.pool_) CYNew($2, NULL); }
+ : "new" NewExpression { $$ = CYNew cy::Syntax::New($2, NULL); }
;
NewExpression
@end
CallExpression
- : MemberExpression Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
- | CallExpression Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
+ : MemberExpression Arguments { $$ = CYNew CYCall($1, $2); }
+ | CallExpression Arguments { $$ = CYNew CYCall($1, $2); }
| CallExpression { driver.context_ = $1; } MemberAccess { $3->SetLeft($1); $$ = $3; }
;
CallExpressionNoBF
- : MemberExpressionNoBF Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
- | CallExpressionNoBF Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
+ : MemberExpressionNoBF Arguments { $$ = CYNew CYCall($1, $2); }
+ | CallExpressionNoBF Arguments { $$ = CYNew CYCall($1, $2); }
| CallExpressionNoBF { driver.context_ = $1; } MemberAccess { $3->SetLeft($1); $$ = $3; }
;
@begin C
CallExpressionNoRE
- : MemberExpressionNoRE Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
- | CallExpressionNoRE Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
+ : MemberExpressionNoRE Arguments { $$ = CYNew CYCall($1, $2); }
+ | CallExpressionNoRE Arguments { $$ = CYNew CYCall($1, $2); }
| CallExpressionNoRE { driver.context_ = $1; } MemberAccess { $3->SetLeft($1); $$ = $3; }
;
@end
;
ArgumentList
- : AssignmentExpression ArgumentList_ { $$ = new(driver.pool_) CYArgument(NULL, $1, $2); }
+ : AssignmentExpression ArgumentList_ { $$ = CYNew CYArgument(NULL, $1, $2); }
;
Arguments
/* 11.3 Postfix Expressions {{{ */
PostfixExpression
: AssigneeExpression { $$ = $1; }
- | LeftHandSideExpression "++" { $$ = new(driver.pool_) CYPostIncrement($1); }
- | LeftHandSideExpression "--" { $$ = new(driver.pool_) CYPostDecrement($1); }
+ | LeftHandSideExpression "++" { $$ = CYNew CYPostIncrement($1); }
+ | LeftHandSideExpression "--" { $$ = CYNew CYPostDecrement($1); }
;
PostfixExpressionNoBF
: AssigneeExpressionNoBF { $$ = $1; }
- | LeftHandSideExpressionNoBF "++" { $$ = new(driver.pool_) CYPostIncrement($1); }
- | LeftHandSideExpressionNoBF "--" { $$ = new(driver.pool_) CYPostDecrement($1); }
+ | LeftHandSideExpressionNoBF "++" { $$ = CYNew CYPostIncrement($1); }
+ | LeftHandSideExpressionNoBF "--" { $$ = CYNew CYPostDecrement($1); }
;
@begin C
PostfixExpressionNoRE
: AssigneeExpressionNoRE { $$ = $1; }
- | LeftHandSideExpressionNoRE "++" { $$ = new(driver.pool_) CYPostIncrement($1); }
- | LeftHandSideExpressionNoRE "--" { $$ = new(driver.pool_) CYPostDecrement($1); }
+ | LeftHandSideExpressionNoRE "++" { $$ = CYNew CYPostIncrement($1); }
+ | LeftHandSideExpressionNoRE "--" { $$ = CYNew CYPostDecrement($1); }
;
@end
/* }}} */
/* 11.4 Unary Operators {{{ */
UnaryExpression_
- : "delete" UnaryExpression { $$ = new(driver.pool_) CYDelete($2); }
- | "void" UnaryExpression { $$ = new(driver.pool_) CYVoid($2); }
- | "typeof" UnaryExpression { $$ = new(driver.pool_) CYTypeOf($2); }
- | "++" UnaryExpression { $$ = new(driver.pool_) CYPreIncrement($2); }
- | "\n++" UnaryExpression { $$ = new(driver.pool_) CYPreIncrement($2); }
- | "--" UnaryExpression { $$ = new(driver.pool_) CYPreDecrement($2); }
- | "\n--" UnaryExpression { $$ = new(driver.pool_) CYPreDecrement($2); }
- | "+" UnaryExpression { $$ = new(driver.pool_) CYAffirm($2); }
- | "-" UnaryExpression { $$ = new(driver.pool_) CYNegate($2); }
- | "~" UnaryExpression { $$ = new(driver.pool_) CYBitwiseNot($2); }
- | "!" UnaryExpression { $$ = new(driver.pool_) CYLogicalNot($2); }
+ : "delete" UnaryExpression { $$ = CYNew CYDelete($2); }
+ | "void" UnaryExpression { $$ = CYNew CYVoid($2); }
+ | "typeof" UnaryExpression { $$ = CYNew CYTypeOf($2); }
+ | "++" UnaryExpression { $$ = CYNew CYPreIncrement($2); }
+ | "\n++" UnaryExpression { $$ = CYNew CYPreIncrement($2); }
+ | "--" UnaryExpression { $$ = CYNew CYPreDecrement($2); }
+ | "\n--" UnaryExpression { $$ = CYNew CYPreDecrement($2); }
+ | "+" UnaryExpression { $$ = CYNew CYAffirm($2); }
+ | "-" UnaryExpression { $$ = CYNew CYNegate($2); }
+ | "~" UnaryExpression { $$ = CYNew CYBitwiseNot($2); }
+ | "!" UnaryExpression { $$ = CYNew CYLogicalNot($2); }
;
UnaryExpression
/* 11.5 Multiplicative Operators {{{ */
MultiplicativeExpression
: UnaryExpression { $$ = $1; }
- | MultiplicativeExpression "*" UnaryExpression { $$ = new(driver.pool_) CYMultiply($1, $3); }
- | MultiplicativeExpression "/" UnaryExpression { $$ = new(driver.pool_) CYDivide($1, $3); }
- | MultiplicativeExpression "%" UnaryExpression { $$ = new(driver.pool_) CYModulus($1, $3); }
+ | MultiplicativeExpression "*" UnaryExpression { $$ = CYNew CYMultiply($1, $3); }
+ | MultiplicativeExpression "/" UnaryExpression { $$ = CYNew CYDivide($1, $3); }
+ | MultiplicativeExpression "%" UnaryExpression { $$ = CYNew CYModulus($1, $3); }
;
MultiplicativeExpressionNoBF
: UnaryExpressionNoBF { $$ = $1; }
- | MultiplicativeExpressionNoBF "*" UnaryExpression { $$ = new(driver.pool_) CYMultiply($1, $3); }
- | MultiplicativeExpressionNoBF "/" UnaryExpression { $$ = new(driver.pool_) CYDivide($1, $3); }
- | MultiplicativeExpressionNoBF "%" UnaryExpression { $$ = new(driver.pool_) CYModulus($1, $3); }
+ | MultiplicativeExpressionNoBF "*" UnaryExpression { $$ = CYNew CYMultiply($1, $3); }
+ | MultiplicativeExpressionNoBF "/" UnaryExpression { $$ = CYNew CYDivide($1, $3); }
+ | MultiplicativeExpressionNoBF "%" UnaryExpression { $$ = CYNew CYModulus($1, $3); }
;
/* }}} */
/* 11.6 Additive Operators {{{ */
AdditiveExpression
: MultiplicativeExpression { $$ = $1; }
- | AdditiveExpression "+" MultiplicativeExpression { $$ = new(driver.pool_) CYAdd($1, $3); }
- | AdditiveExpression "-" MultiplicativeExpression { $$ = new(driver.pool_) CYSubtract($1, $3); }
+ | AdditiveExpression "+" MultiplicativeExpression { $$ = CYNew CYAdd($1, $3); }
+ | AdditiveExpression "-" MultiplicativeExpression { $$ = CYNew CYSubtract($1, $3); }
;
AdditiveExpressionNoBF
: MultiplicativeExpressionNoBF { $$ = $1; }
- | AdditiveExpressionNoBF "+" MultiplicativeExpression { $$ = new(driver.pool_) CYAdd($1, $3); }
- | AdditiveExpressionNoBF "-" MultiplicativeExpression { $$ = new(driver.pool_) CYSubtract($1, $3); }
+ | AdditiveExpressionNoBF "+" MultiplicativeExpression { $$ = CYNew CYAdd($1, $3); }
+ | AdditiveExpressionNoBF "-" MultiplicativeExpression { $$ = CYNew CYSubtract($1, $3); }
;
/* }}} */
/* 11.7 Bitwise Shift Operators {{{ */
ShiftExpression
: AdditiveExpression { $$ = $1; }
- | ShiftExpression "<<" AdditiveExpression { $$ = new(driver.pool_) CYShiftLeft($1, $3); }
- | ShiftExpression ">>" AdditiveExpression { $$ = new(driver.pool_) CYShiftRightSigned($1, $3); }
- | ShiftExpression ">>>" AdditiveExpression { $$ = new(driver.pool_) CYShiftRightUnsigned($1, $3); }
+ | ShiftExpression "<<" AdditiveExpression { $$ = CYNew CYShiftLeft($1, $3); }
+ | ShiftExpression ">>" AdditiveExpression { $$ = CYNew CYShiftRightSigned($1, $3); }
+ | ShiftExpression ">>>" AdditiveExpression { $$ = CYNew CYShiftRightUnsigned($1, $3); }
;
ShiftExpressionNoBF
: AdditiveExpressionNoBF { $$ = $1; }
- | ShiftExpressionNoBF "<<" AdditiveExpression { $$ = new(driver.pool_) CYShiftLeft($1, $3); }
- | ShiftExpressionNoBF ">>" AdditiveExpression { $$ = new(driver.pool_) CYShiftRightSigned($1, $3); }
- | ShiftExpressionNoBF ">>>" AdditiveExpression { $$ = new(driver.pool_) CYShiftRightUnsigned($1, $3); }
+ | ShiftExpressionNoBF "<<" AdditiveExpression { $$ = CYNew CYShiftLeft($1, $3); }
+ | ShiftExpressionNoBF ">>" AdditiveExpression { $$ = CYNew CYShiftRightSigned($1, $3); }
+ | ShiftExpressionNoBF ">>>" AdditiveExpression { $$ = CYNew CYShiftRightUnsigned($1, $3); }
;
/* }}} */
/* 11.8 Relational Operators {{{ */
RelationalExpressionNoIn_
- : "<" ShiftExpression { $$ = new(driver.pool_) CYLess(NULL, $2); }
- | ">" ShiftExpression { $$ = new(driver.pool_) CYGreater(NULL, $2); }
- | "<=" ShiftExpression { $$ = new(driver.pool_) CYLessOrEqual(NULL, $2); }
- | ">=" ShiftExpression { $$ = new(driver.pool_) CYGreaterOrEqual(NULL, $2); }
- | "instanceof" ShiftExpression { $$ = new(driver.pool_) CYInstanceOf(NULL, $2); }
+ : "<" ShiftExpression { $$ = CYNew CYLess(NULL, $2); }
+ | ">" ShiftExpression { $$ = CYNew CYGreater(NULL, $2); }
+ | "<=" ShiftExpression { $$ = CYNew CYLessOrEqual(NULL, $2); }
+ | ">=" ShiftExpression { $$ = CYNew CYGreaterOrEqual(NULL, $2); }
+ | "instanceof" ShiftExpression { $$ = CYNew CYInstanceOf(NULL, $2); }
;
RelationalExpression_
: RelationalExpressionNoIn_ { $$ = $1; }
- | "in" ShiftExpression { $$ = new(driver.pool_) CYIn(NULL, $2); }
+ | "in" ShiftExpression { $$ = CYNew CYIn(NULL, $2); }
;
RelationalExpression
/* 11.9 Equality Operators {{{ */
EqualityExpression
: RelationalExpression { $$ = $1; }
- | EqualityExpression "==" RelationalExpression { $$ = new(driver.pool_) CYEqual($1, $3); }
- | EqualityExpression "!=" RelationalExpression { $$ = new(driver.pool_) CYNotEqual($1, $3); }
- | EqualityExpression "===" RelationalExpression { $$ = new(driver.pool_) CYIdentical($1, $3); }
- | EqualityExpression "!==" RelationalExpression { $$ = new(driver.pool_) CYNotIdentical($1, $3); }
+ | EqualityExpression "==" RelationalExpression { $$ = CYNew CYEqual($1, $3); }
+ | EqualityExpression "!=" RelationalExpression { $$ = CYNew CYNotEqual($1, $3); }
+ | EqualityExpression "===" RelationalExpression { $$ = CYNew CYIdentical($1, $3); }
+ | EqualityExpression "!==" RelationalExpression { $$ = CYNew CYNotIdentical($1, $3); }
;
EqualityExpressionNoIn
: RelationalExpressionNoIn { $$ = $1; }
- | EqualityExpressionNoIn "==" RelationalExpressionNoIn { $$ = new(driver.pool_) CYEqual($1, $3); }
- | EqualityExpressionNoIn "!=" RelationalExpressionNoIn { $$ = new(driver.pool_) CYNotEqual($1, $3); }
- | EqualityExpressionNoIn "===" RelationalExpressionNoIn { $$ = new(driver.pool_) CYIdentical($1, $3); }
- | EqualityExpressionNoIn "!==" RelationalExpressionNoIn { $$ = new(driver.pool_) CYNotIdentical($1, $3); }
+ | EqualityExpressionNoIn "==" RelationalExpressionNoIn { $$ = CYNew CYEqual($1, $3); }
+ | EqualityExpressionNoIn "!=" RelationalExpressionNoIn { $$ = CYNew CYNotEqual($1, $3); }
+ | EqualityExpressionNoIn "===" RelationalExpressionNoIn { $$ = CYNew CYIdentical($1, $3); }
+ | EqualityExpressionNoIn "!==" RelationalExpressionNoIn { $$ = CYNew CYNotIdentical($1, $3); }
;
EqualityExpressionNoBF
: RelationalExpressionNoBF { $$ = $1; }
- | EqualityExpressionNoBF "==" RelationalExpression { $$ = new(driver.pool_) CYEqual($1, $3); }
- | EqualityExpressionNoBF "!=" RelationalExpression { $$ = new(driver.pool_) CYNotEqual($1, $3); }
- | EqualityExpressionNoBF "===" RelationalExpression { $$ = new(driver.pool_) CYIdentical($1, $3); }
- | EqualityExpressionNoBF "!==" RelationalExpression { $$ = new(driver.pool_) CYNotIdentical($1, $3); }
+ | EqualityExpressionNoBF "==" RelationalExpression { $$ = CYNew CYEqual($1, $3); }
+ | EqualityExpressionNoBF "!=" RelationalExpression { $$ = CYNew CYNotEqual($1, $3); }
+ | EqualityExpressionNoBF "===" RelationalExpression { $$ = CYNew CYIdentical($1, $3); }
+ | EqualityExpressionNoBF "!==" RelationalExpression { $$ = CYNew CYNotIdentical($1, $3); }
;
/* }}} */
/* 11.10 Binary Bitwise Operators {{{ */
BitwiseANDExpression
: EqualityExpression { $$ = $1; }
- | BitwiseANDExpression "&" EqualityExpression { $$ = new(driver.pool_) CYBitwiseAnd($1, $3); }
+ | BitwiseANDExpression "&" EqualityExpression { $$ = CYNew CYBitwiseAnd($1, $3); }
;
BitwiseANDExpressionNoIn
: EqualityExpressionNoIn { $$ = $1; }
- | BitwiseANDExpressionNoIn "&" EqualityExpressionNoIn { $$ = new(driver.pool_) CYBitwiseAnd($1, $3); }
+ | BitwiseANDExpressionNoIn "&" EqualityExpressionNoIn { $$ = CYNew CYBitwiseAnd($1, $3); }
;
BitwiseANDExpressionNoBF
: EqualityExpressionNoBF { $$ = $1; }
- | BitwiseANDExpressionNoBF "&" EqualityExpression { $$ = new(driver.pool_) CYBitwiseAnd($1, $3); }
+ | BitwiseANDExpressionNoBF "&" EqualityExpression { $$ = CYNew CYBitwiseAnd($1, $3); }
;
BitwiseXORExpression
: BitwiseANDExpression { $$ = $1; }
- | BitwiseXORExpression "^" BitwiseANDExpression { $$ = new(driver.pool_) CYBitwiseXOr($1, $3); }
+ | BitwiseXORExpression "^" BitwiseANDExpression { $$ = CYNew CYBitwiseXOr($1, $3); }
;
BitwiseXORExpressionNoIn
: BitwiseANDExpressionNoIn { $$ = $1; }
- | BitwiseXORExpressionNoIn "^" BitwiseANDExpressionNoIn { $$ = new(driver.pool_) CYBitwiseXOr($1, $3); }
+ | BitwiseXORExpressionNoIn "^" BitwiseANDExpressionNoIn { $$ = CYNew CYBitwiseXOr($1, $3); }
;
BitwiseXORExpressionNoBF
: BitwiseANDExpressionNoBF { $$ = $1; }
- | BitwiseXORExpressionNoBF "^" BitwiseANDExpression { $$ = new(driver.pool_) CYBitwiseXOr($1, $3); }
+ | BitwiseXORExpressionNoBF "^" BitwiseANDExpression { $$ = CYNew CYBitwiseXOr($1, $3); }
;
BitwiseORExpression
: BitwiseXORExpression { $$ = $1; }
- | BitwiseORExpression "|" BitwiseXORExpression { $$ = new(driver.pool_) CYBitwiseOr($1, $3); }
+ | BitwiseORExpression "|" BitwiseXORExpression { $$ = CYNew CYBitwiseOr($1, $3); }
;
BitwiseORExpressionNoIn
: BitwiseXORExpressionNoIn { $$ = $1; }
- | BitwiseORExpressionNoIn "|" BitwiseXORExpressionNoIn { $$ = new(driver.pool_) CYBitwiseOr($1, $3); }
+ | BitwiseORExpressionNoIn "|" BitwiseXORExpressionNoIn { $$ = CYNew CYBitwiseOr($1, $3); }
;
BitwiseORExpressionNoBF
: BitwiseXORExpressionNoBF { $$ = $1; }
- | BitwiseORExpressionNoBF "|" BitwiseXORExpression { $$ = new(driver.pool_) CYBitwiseOr($1, $3); }
+ | BitwiseORExpressionNoBF "|" BitwiseXORExpression { $$ = CYNew CYBitwiseOr($1, $3); }
;
/* }}} */
/* 11.11 Binary Logical Operators {{{ */
LogicalANDExpression
: BitwiseORExpression { $$ = $1; }
- | LogicalANDExpression "&&" BitwiseORExpression { $$ = new(driver.pool_) CYLogicalAnd($1, $3); }
+ | LogicalANDExpression "&&" BitwiseORExpression { $$ = CYNew CYLogicalAnd($1, $3); }
;
LogicalANDExpressionNoIn
: BitwiseORExpressionNoIn { $$ = $1; }
- | LogicalANDExpressionNoIn "&&" BitwiseORExpressionNoIn { $$ = new(driver.pool_) CYLogicalAnd($1, $3); }
+ | LogicalANDExpressionNoIn "&&" BitwiseORExpressionNoIn { $$ = CYNew CYLogicalAnd($1, $3); }
;
LogicalANDExpressionNoBF
: BitwiseORExpressionNoBF { $$ = $1; }
- | LogicalANDExpressionNoBF "&&" BitwiseORExpression { $$ = new(driver.pool_) CYLogicalAnd($1, $3); }
+ | LogicalANDExpressionNoBF "&&" BitwiseORExpression { $$ = CYNew CYLogicalAnd($1, $3); }
;
LogicalORExpression
: LogicalANDExpression { $$ = $1; }
- | LogicalORExpression "||" LogicalANDExpression { $$ = new(driver.pool_) CYLogicalOr($1, $3); }
+ | LogicalORExpression "||" LogicalANDExpression { $$ = CYNew CYLogicalOr($1, $3); }
;
LogicalORExpressionNoIn
: LogicalANDExpressionNoIn { $$ = $1; }
- | LogicalORExpressionNoIn "||" LogicalANDExpressionNoIn { $$ = new(driver.pool_) CYLogicalOr($1, $3); }
+ | LogicalORExpressionNoIn "||" LogicalANDExpressionNoIn { $$ = CYNew CYLogicalOr($1, $3); }
;
LogicalORExpressionNoBF
: LogicalANDExpressionNoBF { $$ = $1; }
- | LogicalORExpressionNoBF "||" LogicalANDExpression { $$ = new(driver.pool_) CYLogicalOr($1, $3); }
+ | LogicalORExpressionNoBF "||" LogicalANDExpression { $$ = CYNew CYLogicalOr($1, $3); }
;
/* }}} */
/* 11.12 Conditional Operator ( ? : ) {{{ */
ConditionalExpression
: LogicalORExpression { $$ = $1; }
- | LogicalORExpression "?" AssignmentExpression ":" AssignmentExpression { $$ = new(driver.pool_) CYCondition($1, $3, $5); }
+ | LogicalORExpression "?" AssignmentExpression ":" AssignmentExpression { $$ = CYNew CYCondition($1, $3, $5); }
;
ConditionalExpressionNoIn
: LogicalORExpressionNoIn { $$ = $1; }
- | LogicalORExpressionNoIn "?" AssignmentExpression ":" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYCondition($1, $3, $5); }
+ | LogicalORExpressionNoIn "?" AssignmentExpression ":" AssignmentExpressionNoIn { $$ = CYNew CYCondition($1, $3, $5); }
;
ConditionalExpressionNoBF
: LogicalORExpressionNoBF { $$ = $1; }
- | LogicalORExpressionNoBF "?" AssignmentExpression ":" AssignmentExpression { $$ = new(driver.pool_) CYCondition($1, $3, $5); }
+ | LogicalORExpressionNoBF "?" AssignmentExpression ":" AssignmentExpression { $$ = CYNew CYCondition($1, $3, $5); }
;
/* }}} */
/* 11.13 Assignment Operators {{{ */
AssignmentExpression_
- : "=" AssignmentExpression { $$ = new(driver.pool_) CYAssign(NULL, $2); }
- | "*=" AssignmentExpression { $$ = new(driver.pool_) CYMultiplyAssign(NULL, $2); }
- | "/=" AssignmentExpression { $$ = new(driver.pool_) CYDivideAssign(NULL, $2); }
- | "%=" AssignmentExpression { $$ = new(driver.pool_) CYModulusAssign(NULL, $2); }
- | "+=" AssignmentExpression { $$ = new(driver.pool_) CYAddAssign(NULL, $2); }
- | "-=" AssignmentExpression { $$ = new(driver.pool_) CYSubtractAssign(NULL, $2); }
- | "<<=" AssignmentExpression { $$ = new(driver.pool_) CYShiftLeftAssign(NULL, $2); }
- | ">>=" AssignmentExpression { $$ = new(driver.pool_) CYShiftRightSignedAssign(NULL, $2); }
- | ">>>=" AssignmentExpression { $$ = new(driver.pool_) CYShiftRightUnsignedAssign(NULL, $2); }
- | "&=" AssignmentExpression { $$ = new(driver.pool_) CYBitwiseAndAssign(NULL, $2); }
- | "^=" AssignmentExpression { $$ = new(driver.pool_) CYBitwiseXOrAssign(NULL, $2); }
- | "|=" AssignmentExpression { $$ = new(driver.pool_) CYBitwiseOrAssign(NULL, $2); }
+ : "=" AssignmentExpression { $$ = CYNew CYAssign(NULL, $2); }
+ | "*=" AssignmentExpression { $$ = CYNew CYMultiplyAssign(NULL, $2); }
+ | "/=" AssignmentExpression { $$ = CYNew CYDivideAssign(NULL, $2); }
+ | "%=" AssignmentExpression { $$ = CYNew CYModulusAssign(NULL, $2); }
+ | "+=" AssignmentExpression { $$ = CYNew CYAddAssign(NULL, $2); }
+ | "-=" AssignmentExpression { $$ = CYNew CYSubtractAssign(NULL, $2); }
+ | "<<=" AssignmentExpression { $$ = CYNew CYShiftLeftAssign(NULL, $2); }
+ | ">>=" AssignmentExpression { $$ = CYNew CYShiftRightSignedAssign(NULL, $2); }
+ | ">>>=" AssignmentExpression { $$ = CYNew CYShiftRightUnsignedAssign(NULL, $2); }
+ | "&=" AssignmentExpression { $$ = CYNew CYBitwiseAndAssign(NULL, $2); }
+ | "^=" AssignmentExpression { $$ = CYNew CYBitwiseXOrAssign(NULL, $2); }
+ | "|=" AssignmentExpression { $$ = CYNew CYBitwiseOrAssign(NULL, $2); }
;
AssigneeExpression
AssignmentExpressionNoIn
: ConditionalExpressionNoIn { $$ = $1; }
- | AssigneeExpression "=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYAssign($1, $3); }
- | AssigneeExpression "*=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYMultiplyAssign($1, $3); }
- | AssigneeExpression "/=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYDivideAssign($1, $3); }
- | AssigneeExpression "%=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYModulusAssign($1, $3); }
- | AssigneeExpression "+=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYAddAssign($1, $3); }
- | AssigneeExpression "-=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYSubtractAssign($1, $3); }
- | AssigneeExpression "<<=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYShiftLeftAssign($1, $3); }
- | AssigneeExpression ">>=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYShiftRightSignedAssign($1, $3); }
- | AssigneeExpression ">>>=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYShiftRightUnsignedAssign($1, $3); }
- | AssigneeExpression "&=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYBitwiseAndAssign($1, $3); }
- | AssigneeExpression "^=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYBitwiseXOrAssign($1, $3); }
- | AssigneeExpression "|=" AssignmentExpressionNoIn { $$ = new(driver.pool_) CYBitwiseOrAssign($1, $3); }
+ | AssigneeExpression "=" AssignmentExpressionNoIn { $$ = CYNew CYAssign($1, $3); }
+ | AssigneeExpression "*=" AssignmentExpressionNoIn { $$ = CYNew CYMultiplyAssign($1, $3); }
+ | AssigneeExpression "/=" AssignmentExpressionNoIn { $$ = CYNew CYDivideAssign($1, $3); }
+ | AssigneeExpression "%=" AssignmentExpressionNoIn { $$ = CYNew CYModulusAssign($1, $3); }
+ | AssigneeExpression "+=" AssignmentExpressionNoIn { $$ = CYNew CYAddAssign($1, $3); }
+ | AssigneeExpression "-=" AssignmentExpressionNoIn { $$ = CYNew CYSubtractAssign($1, $3); }
+ | AssigneeExpression "<<=" AssignmentExpressionNoIn { $$ = CYNew CYShiftLeftAssign($1, $3); }
+ | AssigneeExpression ">>=" AssignmentExpressionNoIn { $$ = CYNew CYShiftRightSignedAssign($1, $3); }
+ | AssigneeExpression ">>>=" AssignmentExpressionNoIn { $$ = CYNew CYShiftRightUnsignedAssign($1, $3); }
+ | AssigneeExpression "&=" AssignmentExpressionNoIn { $$ = CYNew CYBitwiseAndAssign($1, $3); }
+ | AssigneeExpression "^=" AssignmentExpressionNoIn { $$ = CYNew CYBitwiseXOrAssign($1, $3); }
+ | AssigneeExpression "|=" AssignmentExpressionNoIn { $$ = CYNew CYBitwiseOrAssign($1, $3); }
;
AssignmentExpressionNoBF
/* }}} */
/* 11.14 Comma Operator {{{ */
Expression_
- : "," Expression { $$ = new(driver.pool_) CYCompound($2); }
+ : "," Expression { $$ = CYNew CYCompound($2); }
| { $$ = NULL; }
;
ExpressionNoIn_
- : "," ExpressionNoIn { $$ = new(driver.pool_) CYCompound($2); }
+ : "," ExpressionNoIn { $$ = CYNew CYCompound($2); }
| { $$ = NULL; }
;
;
Block
- : Block_ { if ($1) $$ = new(driver.pool_) CYBlock($1); else $$ = new(driver.pool_) CYEmpty(); }
+ : Block_ { if ($1) $$ = CYNew CYBlock($1); else $$ = CYNew CYEmpty(); }
;
StatementList
/* }}} */
/* 12.2 Variable Statement {{{ */
VariableStatement
- : "var" VariableDeclarationList Terminator { $$ = new(driver.pool_) CYVar($2); }
+ : "var" VariableDeclarationList Terminator { $$ = CYNew CYVar($2); }
;
VariableDeclarationList_
;
VariableDeclarationList
- : VariableDeclaration VariableDeclarationList_ { $$ = new(driver.pool_) CYDeclarations($1, $2); }
+ : VariableDeclaration VariableDeclarationList_ { $$ = CYNew CYDeclarations($1, $2); }
;
VariableDeclarationListNoIn
- : VariableDeclarationNoIn VariableDeclarationListNoIn_ { $$ = new(driver.pool_) CYDeclarations($1, $2); }
+ : VariableDeclarationNoIn VariableDeclarationListNoIn_ { $$ = CYNew CYDeclarations($1, $2); }
;
VariableDeclaration
- : Identifier InitialiserOpt { $$ = new(driver.pool_) CYDeclaration($1, $2); }
+ : Identifier InitialiserOpt { $$ = CYNew CYDeclaration($1, $2); }
;
VariableDeclarationNoIn
- : Identifier InitialiserNoInOpt { $$ = new(driver.pool_) CYDeclaration($1, $2); }
+ : Identifier InitialiserNoInOpt { $$ = CYNew CYDeclaration($1, $2); }
;
InitialiserOpt
/* }}} */
/* 12.3 Empty Statement {{{ */
EmptyStatement
- : ";" { $$ = new(driver.pool_) CYEmpty(); }
+ : ";" { $$ = CYNew CYEmpty(); }
;
/* }}} */
/* 12.4 Expression Statement {{{ */
ExpressionStatement
- : ExpressionNoBF Terminator { $$ = new(driver.pool_) CYExpress($1); }
+ : ExpressionNoBF Terminator { $$ = CYNew CYExpress($1); }
;
/* }}} */
/* 12.5 The if Statement {{{ */
;
IfStatement
- : "if" "(" Expression ")" Statement ElseStatementOpt { $$ = new(driver.pool_) CYIf($3, $5, $6); }
+ : "if" "(" Expression ")" Statement ElseStatementOpt { $$ = CYNew CYIf($3, $5, $6); }
;
/* }}} */
/* }}} */
/* 12.6.1 The do-while Statement {{{ */
DoWhileStatement
- : "do" Statement "while" "(" Expression ")" TerminatorOpt { $$ = new(driver.pool_) CYDoWhile($5, $2); }
+ : "do" Statement "while" "(" Expression ")" TerminatorOpt { $$ = CYNew CYDoWhile($5, $2); }
;
/* }}} */
/* 12.6.2 The while Statement {{{ */
WhileStatement
- : "while" "(" Expression ")" Statement { $$ = new(driver.pool_) CYWhile($3, $5); }
+ : "while" "(" Expression ")" Statement { $$ = CYNew CYWhile($3, $5); }
;
/* }}} */
/* 12.6.3 The for Statement {{{ */
ForStatement
- : "for" "(" ForStatementInitialiser ";" ExpressionOpt ";" ExpressionOpt ")" Statement { $$ = new(driver.pool_) CYFor($3, $5, $7, $9); }
+ : "for" "(" ForStatementInitialiser ";" ExpressionOpt ";" ExpressionOpt ")" Statement { $$ = CYNew CYFor($3, $5, $7, $9); }
;
ForStatementInitialiser
/* }}} */
/* 12.6.4 The for-in Statement {{{ */
ForInStatement
- : "for" "(" ForInStatementInitialiser "in" Expression ")" Statement { $$ = new(driver.pool_) CYForIn($3, $5, $7); }
+ : "for" "(" ForInStatementInitialiser "in" Expression ")" Statement { $$ = CYNew CYForIn($3, $5, $7); }
;
ForInStatementInitialiser
/* 12.7 The continue Statement {{{ */
ContinueStatement
- : "continue" IdentifierOpt Terminator { $$ = new(driver.pool_) CYContinue($2); }
+ : "continue" IdentifierOpt Terminator { $$ = CYNew CYContinue($2); }
;
/* }}} */
/* 12.8 The break Statement {{{ */
BreakStatement
- : "break" IdentifierOpt Terminator { $$ = new(driver.pool_) CYBreak($2); }
+ : "break" IdentifierOpt Terminator { $$ = CYNew CYBreak($2); }
;
/* }}} */
/* 12.9 The return Statement {{{ */
ReturnStatement
- : "return" ExpressionOpt Terminator { $$ = new(driver.pool_) CYReturn($2); }
+ : "return" ExpressionOpt Terminator { $$ = CYNew CYReturn($2); }
;
/* }}} */
/* 12.10 The with Statement {{{ */
WithStatement
- : "with" "(" Expression ")" Statement { $$ = new(driver.pool_) CYWith($3, $5); }
+ : "with" "(" Expression ")" Statement { $$ = CYNew CYWith($3, $5); }
;
/* }}} */
/* 12.11 The switch Statement {{{ */
SwitchStatement
- : "switch" "(" Expression ")" CaseBlock { $$ = new(driver.pool_) CYSwitch($3, $5); }
+ : "switch" "(" Expression ")" CaseBlock { $$ = CYNew CYSwitch($3, $5); }
;
CaseBlock
;
CaseClause
- : "case" Expression ":" StatementListOpt { $$ = new(driver.pool_) CYClause($2, $4); }
+ : "case" Expression ":" StatementListOpt { $$ = CYNew CYClause($2, $4); }
;
DefaultClause
- : "default" ":" StatementListOpt { $$ = new(driver.pool_) CYClause(NULL, $3); }
+ : "default" ":" StatementListOpt { $$ = CYNew CYClause(NULL, $3); }
;
/* }}} */
/* 12.12 Labelled Statements {{{ */
LabelledStatement
- : Identifier ":" Statement { $$ = new(driver.pool_) CYLabel($1, $3); }
+ : Identifier ":" Statement { $$ = CYNew CYLabel($1, $3); }
;
/* }}} */
/* 12.13 The throw Statement {{{ */
ThrowStatement
- : "throw" Expression Terminator { $$ = new(driver.pool_) cy::Syntax::Throw($2); }
+ : "throw" Expression Terminator { $$ = CYNew cy::Syntax::Throw($2); }
;
/* }}} */
/* 12.14 The try Statement {{{ */
TryStatement
- : "try" Block_ CatchOpt FinallyOpt { $$ = new(driver.pool_) cy::Syntax::Try($2, $3, $4); }
+ : "try" Block_ CatchOpt FinallyOpt { $$ = CYNew cy::Syntax::Try($2, $3, $4); }
;
CatchOpt
- : "catch" "(" Identifier ")" Block_ { $$ = new(driver.pool_) cy::Syntax::Catch($3, $5); }
+ : "catch" "(" Identifier ")" Block_ { $$ = CYNew cy::Syntax::Catch($3, $5); }
| { $$ = NULL; }
;
FinallyOpt
- : "finally" Block_ { $$ = new(driver.pool_) CYFinally($2); }
+ : "finally" Block_ { $$ = CYNew CYFinally($2); }
| { $$ = NULL; }
;
/* }}} */
/* 13 Function Definition {{{ */
FunctionDeclaration
- : "function" Identifier "(" FormalParameterList ")" Brace FunctionBody "}" { $$ = new(driver.pool_) CYFunctionStatement($2, $4, $7); }
+ : "function" Identifier "(" FormalParameterList ")" Brace FunctionBody "}" { $$ = CYNew CYFunctionStatement($2, $4, $7); }
;
FunctionExpression
- : "function" IdentifierOpt "(" FormalParameterList ")" Brace FunctionBody "}" { $$ = new(driver.pool_) CYFunctionExpression($2, $4, $7); }
+ : "function" IdentifierOpt "(" FormalParameterList ")" Brace FunctionBody "}" { $$ = CYNew CYFunctionExpression($2, $4, $7); }
;
FormalParameterList_
;
FormalParameterList
- : Identifier FormalParameterList_ { $$ = new(driver.pool_) CYFunctionParameter($1, $2); }
+ : Identifier FormalParameterList_ { $$ = CYNew CYFunctionParameter($1, $2); }
| { $$ = NULL; }
;
/* }}} */
/* 14 Program {{{ */
Program
- : SourceElements { driver.program_ = new(driver.pool_) CYProgram($1); }
+ : SourceElements { driver.program_ = CYNew CYProgram($1); }
;
SourceElements
;
MessageParameter
- : Word ":" TypeOpt Identifier { $$ = new(driver.pool_) CYMessageParameter($1, $3, $4); }
+ : Word ":" TypeOpt Identifier { $$ = CYNew CYMessageParameter($1, $3, $4); }
;
MessageParameterListOpt
MessageParameters
: MessageParameterList { $$ = $1; }
- | Word { $$ = new(driver.pool_) CYMessageParameter($1, NULL, NULL); }
+ | Word { $$ = CYNew CYMessageParameter($1, NULL, NULL); }
;
ClassMessageDeclaration
- : MessageScope TypeOpt MessageParameters Brace FunctionBody "}" { $$ = new(driver.pool_) CYMessage($1, $2, $3, $5); }
+ : MessageScope TypeOpt MessageParameters Brace FunctionBody "}" { $$ = CYNew CYMessage($1, $2, $3, $5); }
;
ClassMessageDeclarationListOpt
// XXX: this should be AssignmentExpressionNoRight
ClassProtocols
- : ShiftExpression ClassProtocolsOpt { $$ = new(driver.pool_) CYProtocol($1, $2); }
+ : ShiftExpression ClassProtocolsOpt { $$ = CYNew CYProtocol($1, $2); }
;
ClassProtocolsOpt
;
ClassExpression
- : "@implementation" ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassExpression($2, $3, $4, $5, $6); }
+ : "@implementation" ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYClassExpression($2, $3, $4, $5, $6); }
;
ClassStatement
- : "@implementation" ClassName ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassStatement($2, $3, $4, $5, $6); }
+ : "@implementation" ClassName ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYClassStatement($2, $3, $4, $5, $6); }
;
CategoryName
;
CategoryStatement
- : "@implementation" ClassName CategoryName ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYCategory($2, $4); }
+ : "@implementation" ClassName CategoryName ClassMessageDeclarationListOpt "@end" { $$ = CYNew CYCategory($2, $4); }
;
PrimaryExpressionBF
/* }}} */
/* Cycript (Objective-C): Send Message {{{ */
VariadicCall
- : "," AssignmentExpression VariadicCall { $$ = new(driver.pool_) CYArgument(NULL, $2, $3); }
+ : "," AssignmentExpression VariadicCall { $$ = CYNew CYArgument(NULL, $2, $3); }
| { $$ = NULL; }
;
;
SelectorCall
- : SelectorWordOpt ":" AssignmentExpression SelectorCall_ { $$ = new(driver.pool_) CYArgument($1 ?: new(driver.pool_) CYBlank(), $3, $4); }
+ : SelectorWordOpt ":" AssignmentExpression SelectorCall_ { $$ = CYNew CYArgument($1 ?: CYNew CYBlank(), $3, $4); }
;
SelectorList
: SelectorCall { $$ = $1; }
- | Word { $$ = new(driver.pool_) CYArgument($1, NULL); }
+ | Word { $$ = CYNew CYArgument($1, NULL); }
;
MessageExpression
- : "[" AssignmentExpression { driver.contexts_.push_back($2); } SelectorList "]" { driver.contexts_.pop_back(); } { $$ = new(driver.pool_) CYSendDirect($2, $4); }
- | "[" LexSetRegExp "super" { driver.context_ = NULL; } SelectorList "]" { $$ = new(driver.pool_) CYSendSuper($5); }
+ : "[" AssignmentExpression { driver.contexts_.push_back($2); } SelectorList "]" { driver.contexts_.pop_back(); } { $$ = CYNew CYSendDirect($2, $4); }
+ | "[" LexSetRegExp "super" { driver.context_ = NULL; } SelectorList "]" { $$ = CYNew CYSendSuper($5); }
;
SelectorExpressionOpt
;
SelectorExpression_
- : WordOpt ":" SelectorExpressionOpt { $$ = new(driver.pool_) CYSelectorPart($1, true, $3); }
+ : WordOpt ":" SelectorExpressionOpt { $$ = CYNew CYSelectorPart($1, true, $3); }
;
SelectorExpression
: SelectorExpression_ { $$ = $1; }
- | Word { $$ = new(driver.pool_) CYSelectorPart($1, false, NULL); }
+ | Word { $$ = CYNew CYSelectorPart($1, false, NULL); }
;
PrimaryExpressionNo
: MessageExpression { $$ = $1; }
- | "@selector" "(" SelectorExpression ")" { $$ = new(driver.pool_) CYSelector($3); }
+ | "@selector" "(" SelectorExpression ")" { $$ = CYNew CYSelector($3); }
;
/* }}} */
/* Cycript (Objective-C): @import Directive {{{ */
;
SourceElement_
- : "@import" ImportPath { $$ = new(driver.pool_) CYImport(); }
+ : "@import" ImportPath { $$ = CYNew CYImport(); }
;
/* }}} */
@end
@begin C
/* Cycript (C): Pointer Indirection/Addressing {{{ */
UnaryAssigneeExpression
- : "*" UnaryExpressionNoRE { $$ = new(driver.pool_) CYIndirect($2); }
+ : "*" UnaryExpressionNoRE { $$ = CYNew CYIndirect($2); }
;
UnaryExpression_
- : "&" UnaryExpression { $$ = new(driver.pool_) CYAddressOf($2); }
+ : "&" UnaryExpression { $$ = CYNew CYAddressOf($2); }
;
MemberAccess
- : "->" "[" Expression "]" { $$ = new(driver.pool_) CYIndirectMember(NULL, $3); }
- | "->" Identifier { $$ = new(driver.pool_) CYIndirectMember(NULL, new(driver.pool_) CYString($2)); }
+ : "->" "[" Expression "]" { $$ = CYNew CYIndirectMember(NULL, $3); }
+ | "->" Identifier { $$ = CYNew CYIndirectMember(NULL, CYNew CYString($2)); }
| "->" AutoComplete { driver.mode_ = CYDriver::AutoIndirect; YYACCEPT; }
;
/* }}} */
/* }}} */
/* 11.1 Primary Expressions {{{ */
PrimaryExpressionNo
- : PropertyIdentifier { $$ = new(driver.pool_) CYPropertyVariable($1); }
+ : PropertyIdentifier { $$ = CYNew CYPropertyVariable($1); }
| XMLInitialiser { $$ = $1; }
| XMLListInitialiser { $$ = $1; }
;
/* }}} */
/* 11.1.1 Attribute Identifiers {{{ */
AttributeIdentifier
- : "@" QualifiedIdentifier_ { $$ = new(driver.pool_) CYAttribute($2); }
+ : "@" QualifiedIdentifier_ { $$ = CYNew CYAttribute($2); }
;
PropertySelector_
: PropertySelector { $$ = $1; }
- | "[" Expression "]" { $$ = new(driver.pool_) CYSelector($2); }
+ | "[" Expression "]" { $$ = CYNew CYSelector($2); }
;
PropertySelector
- : Identifier { $$ = new(driver.pool_) CYSelector($1); }
+ : Identifier { $$ = CYNew CYSelector($1); }
| WildcardIdentifier { $$ = $1; }
;
/* }}} */
/* 11.1.2 Qualified Identifiers {{{ */
QualifiedIdentifier_
- : PropertySelector_ { $$ = new(driver.pool_) CYQualified(NULL, $1); }
+ : PropertySelector_ { $$ = CYNew CYQualified(NULL, $1); }
| QualifiedIdentifier { $$ = $1; }
;
QualifiedIdentifier
- : PropertySelector "::" PropertySelector_ { $$ = new(driver.pool_) CYQualified($1, $3); }
+ : PropertySelector "::" PropertySelector_ { $$ = CYNew CYQualified($1, $3); }
;
/* }}} */
/* 11.1.3 Wildcard Identifiers {{{ */
WildcardIdentifier
- : "*" { $$ = new(driver.pool_) CYWildcard(); }
+ : "*" { $$ = CYNew CYWildcard(); }
;
/* }}} */
/* 11.1.4 XML Initialiser {{{ */
/* }}} */
/* 11.1.5 XMLList Initialiser {{{ */
XMLListInitialiser
- : "<>" LexPushXMLContent XMLElementContent "</>" LexPop { $$ = new(driver.pool_) CYXMLList($3); }
+ : "<>" LexPushXMLContent XMLElementContent "</>" LexPop { $$ = CYNew CYXMLList($3); }
;
/* }}} */
/* 11.2 Left-Hand-Side Expressions {{{ */
;
MemberAccess
- : "." PropertyIdentifier { $$ = new(driver.pool_) CYPropertyMember(NULL, $2); }
- | ".." PropertyIdentifier_ { $$ = new(driver.pool_) CYDescendantMember(NULL, $2); }
- | "." "(" Expression ")" { $$ = new(driver.pool_) CYFilteringPredicate(NULL, $3); }
+ : "." PropertyIdentifier { $$ = CYNew CYPropertyMember(NULL, $2); }
+ | ".." PropertyIdentifier_ { $$ = CYNew CYDescendantMember(NULL, $2); }
+ | "." "(" Expression ")" { $$ = CYNew CYFilteringPredicate(NULL, $3); }
;
/* }}} */
/* 12.1 The default xml namespace Statement {{{ */
/* XXX: DefaultXMLNamespaceStatement
- : "default" "xml" "namespace" "=" Expression Terminator { $$ = new(driver.pool_) CYDefaultXMLNamespace($5); }
+ : "default" "xml" "namespace" "=" Expression Terminator { $$ = CYNew CYDefaultXMLNamespace($5); }
;
Statement_
/* JavaScript 1.7: Array Comprehensions {{{ */
IfComprehension
- : "if" "(" Expression ")" { $$ = new(driver.pool_) CYIfComprehension($3); }
+ : "if" "(" Expression ")" { $$ = CYNew CYIfComprehension($3); }
;
ForComprehension
- : "for" "(" Identifier "in" Expression ")" { $$ = new(driver.pool_) CYForInComprehension($3, $5); }
- | "for" "each" "(" Identifier "in" Expression ")" { $$ = new(driver.pool_) CYForEachInComprehension($4, $6); }
+ : "for" "(" Identifier "in" Expression ")" { $$ = CYNew CYForInComprehension($3, $5); }
+ | "for" "each" "(" Identifier "in" Expression ")" { $$ = CYNew CYForEachInComprehension($4, $6); }
;
ComprehensionListOpt
;
PrimaryExpressionNo
- : "[" AssignmentExpression ComprehensionList "]" { $$ = new(driver.pool_) CYArrayComprehension($2, $3); }
+ : "[" AssignmentExpression ComprehensionList "]" { $$ = CYNew CYArrayComprehension($2, $3); }
;
/* }}} */
/* JavaScript 1.7: for each {{{ */
ForInStatement
- : "for" "each" "(" ForInStatementInitialiser "in" Expression ")" Statement { $$ = new(driver.pool_) CYForEachIn($4, $6, $8); }
+ : "for" "each" "(" ForInStatementInitialiser "in" Expression ")" Statement { $$ = CYNew CYForEachIn($4, $6, $8); }
;
/* }}} */
/* JavaScript 1.7: let Statements {{{ *//*
LetStatement
- : "let" "(" VariableDeclarationList ")" Block_ { $$ = new(driver.pool_) CYLet($3, $5); }
+ : "let" "(" VariableDeclarationList ")" Block_ { $$ = CYNew CYLet($3, $5); }
;
Statement_
/* }}} */
/* JavaScript FTW: Optional Arguments {{{ */
FormalParameterList
- : Identifier "=" AssignmentExpression FormalParameterList_ { $$ = new(driver.pool_) CYOptionalFunctionParameter($1, $3, $4); }
+ : Identifier "=" AssignmentExpression FormalParameterList_ { $$ = CYNew CYOptionalFunctionParameter($1, $3, $4); }
;
/* }}} */
/* JavaScript FTW: Ruby Blocks {{{ */
;
RubyProcParameterList
- : Identifier RubyProcParameterList_ { $$ = new(driver.pool_) CYFunctionParameter($1, $2); }
+ : Identifier RubyProcParameterList_ { $$ = CYNew CYFunctionParameter($1, $2); }
| { $$ = NULL; }
;
;
RubyProcExpression
- : "{" RubyProcParametersOpt StatementListOpt "}" { $$ = new(driver.pool_) CYRubyProc($2, $3); }
+ : "{" RubyProcParametersOpt StatementListOpt "}" { $$ = CYNew CYRubyProc($2, $3); }
;
LeftHandSideExpression
- : LeftHandSideExpression RubyProcExpression { $$ = new(driver.pool_) CYRubyBlock($1, $2); }
+ : LeftHandSideExpression RubyProcExpression { $$ = CYNew CYRubyBlock($1, $2); }
;
LeftHandSideExpressionNoBF
- : LeftHandSideExpressionNoBF RubyProcExpression { $$ = new(driver.pool_) CYRubyBlock($1, $2); }
+ : LeftHandSideExpressionNoBF RubyProcExpression { $$ = CYNew CYRubyBlock($1, $2); }
;
@begin C
LeftHandSideExpressionNoRE
- : LeftHandSideExpressionNoRE RubyProcExpression { $$ = new(driver.pool_) CYRubyBlock($1, $2); }
+ : LeftHandSideExpressionNoRE RubyProcExpression { $$ = CYNew CYRubyBlock($1, $2); }
;
@end
/* }}} */