PageRenderTime 118ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/opensource.apple.com/source/JavaScriptCore/JavaScriptCore-721.26/parser/Grammar.y

#
Happy | 962 lines | 845 code | 117 blank | 0 comment | 0 complexity | 54a14886733d1cf3cab2494952624406 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, GPL-2.0, BSD-3-Clause, GPL-3.0, MPL-2.0, LGPL-2.0, LGPL-2.1, CC-BY-SA-3.0, IPL-1.0, ISC, AGPL-1.0, AGPL-3.0, JSON, Apache-2.0, 0BSD

Large files files are truncated, but you can click here to view the full file

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <title>Grammar.y</title>
  6. <style type="text/css">
  7. .enscript-comment { font-style: italic; color: rgb(178,34,34); }
  8. .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
  9. .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
  10. .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
  11. .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
  12. .enscript-string { font-weight: bold; color: rgb(188,143,143); }
  13. .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
  14. .enscript-type { font-weight: bold; color: rgb(34,139,34); }
  15. .enscript-highlight { text-decoration: underline; color: 0; }
  16. </style>
  17. </head>
  18. <body id="top">
  19. <h1 style="margin:8px;" id="f1">Grammar.y&nbsp;&nbsp;&nbsp;<span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
  20. <hr/>
  21. <div></div>
  22. <pre>
  23. %pure_parser
  24. %{
  25. /*
  26. * Copyright (C) 1999-2000 Harri Porten (<a href="mailto:porten@kde.org">porten@kde.org</a>)
  27. * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
  28. * Copyright (C) 2007 Eric Seidel &lt;<a href="mailto:eric@webkit.org">eric@webkit.org</a>&gt;
  29. *
  30. * This library is free software; you can redistribute it and/or
  31. * modify it under the terms of the GNU Lesser General Public
  32. * License as published by the Free Software Foundation; either
  33. * version 2 of the License, or (at your option) any later version.
  34. *
  35. * This library is distributed in the hope that it will be useful,
  36. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  37. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  38. * Lesser General Public License for more details.
  39. *
  40. * You should have received a copy of the GNU Lesser General Public
  41. * License along with this library; if not, write to the Free Software
  42. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  43. *
  44. */
  45. #include &quot;config.h&quot;
  46. #include &quot;JSObject.h&quot;
  47. #include &quot;JSString.h&quot;
  48. #include &quot;Lexer.h&quot;
  49. #include &quot;NodeConstructors.h&quot;
  50. #include &quot;NodeInfo.h&quot;
  51. #include &lt;stdlib.h&gt;
  52. #include &lt;string.h&gt;
  53. #include &lt;wtf/MathExtras.h&gt;
  54. #define YYMALLOC fastMalloc
  55. #define YYFREE fastFree
  56. #define YYMAXDEPTH 10000
  57. #define YYENABLE_NLS 0
  58. // Default values for bison.
  59. #define YYDEBUG 0 // Set to 1 to debug a parse error.
  60. #define jscyydebug 0 // Set to 1 to debug a parse error.
  61. #if !OS(DARWIN)
  62. // Avoid triggering warnings in older bison by not setting this on the Darwin platform.
  63. // FIXME: Is this still needed?
  64. #define YYERROR_VERBOSE
  65. #endif
  66. int jscyyerror(const char*);
  67. static inline bool allowAutomaticSemicolon(JSC::Lexer&amp;, int);
  68. #define GLOBAL_DATA static_cast&lt;JSGlobalData*&gt;(globalPtr)
  69. #define AUTO_SEMICOLON do { if (!allowAutomaticSemicolon(*GLOBAL_DATA-&gt;lexer, yychar)) YYABORT; } while (0)
  70. using namespace JSC;
  71. using namespace std;
  72. static ExpressionNode* makeAssignNode(JSGlobalData*, ExpressionNode* left, Operator, ExpressionNode* right, bool leftHasAssignments, bool rightHasAssignments, int start, int divot, int end);
  73. static ExpressionNode* makePrefixNode(JSGlobalData*, ExpressionNode*, Operator, int start, int divot, int end);
  74. static ExpressionNode* makePostfixNode(JSGlobalData*, ExpressionNode*, Operator, int start, int divot, int end);
  75. static PropertyNode* makeGetterOrSetterPropertyNode(JSGlobalData*, const Identifier&amp; getOrSet, const Identifier&amp; name, ParameterNode*, FunctionBodyNode*, const SourceCode&amp;);
  76. static ExpressionNodeInfo makeFunctionCallNode(JSGlobalData*, ExpressionNodeInfo function, ArgumentsNodeInfo, int start, int divot, int end);
  77. static ExpressionNode* makeTypeOfNode(JSGlobalData*, ExpressionNode*);
  78. static ExpressionNode* makeDeleteNode(JSGlobalData*, ExpressionNode*, int start, int divot, int end);
  79. static ExpressionNode* makeNegateNode(JSGlobalData*, ExpressionNode*);
  80. static NumberNode* makeNumberNode(JSGlobalData*, double);
  81. static ExpressionNode* makeBitwiseNotNode(JSGlobalData*, ExpressionNode*);
  82. static ExpressionNode* makeMultNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
  83. static ExpressionNode* makeDivNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
  84. static ExpressionNode* makeAddNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
  85. static ExpressionNode* makeSubNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
  86. static ExpressionNode* makeLeftShiftNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
  87. static ExpressionNode* makeRightShiftNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments);
  88. static StatementNode* makeVarStatementNode(JSGlobalData*, ExpressionNode*);
  89. static ExpressionNode* combineCommaNodes(JSGlobalData*, ExpressionNode* list, ExpressionNode* init);
  90. #if COMPILER(MSVC)
  91. #pragma warning(disable: 4065)
  92. #pragma warning(disable: 4244)
  93. #pragma warning(disable: 4702)
  94. #endif
  95. #define YYPARSE_PARAM globalPtr
  96. #define YYLEX_PARAM globalPtr
  97. template &lt;typename T&gt; inline NodeDeclarationInfo&lt;T&gt; createNodeDeclarationInfo(T node,
  98. ParserArenaData&lt;DeclarationStacks::VarStack&gt;* varDecls,
  99. ParserArenaData&lt;DeclarationStacks::FunctionStack&gt;* funcDecls,
  100. CodeFeatures info, int numConstants)
  101. {
  102. ASSERT((info &amp; ~AllFeatures) == 0);
  103. NodeDeclarationInfo&lt;T&gt; result = { node, varDecls, funcDecls, info, numConstants };
  104. return result;
  105. }
  106. template &lt;typename T&gt; inline NodeInfo&lt;T&gt; createNodeInfo(T node, CodeFeatures info, int numConstants)
  107. {
  108. ASSERT((info &amp; ~AllFeatures) == 0);
  109. NodeInfo&lt;T&gt; result = { node, info, numConstants };
  110. return result;
  111. }
  112. template &lt;typename T&gt; inline T mergeDeclarationLists(T decls1, T decls2)
  113. {
  114. // decls1 or both are null
  115. if (!decls1)
  116. return decls2;
  117. // only decls1 is non-null
  118. if (!decls2)
  119. return decls1;
  120. // Both are non-null
  121. decls1-&gt;data.append(decls2-&gt;data);
  122. // Manually release as much as possible from the now-defunct declaration lists
  123. // to avoid accumulating so many unused heap allocated vectors.
  124. decls2-&gt;data.clear();
  125. return decls1;
  126. }
  127. static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserArenaData&lt;DeclarationStacks::VarStack&gt;*&amp; varDecls, const Identifier&amp; ident, unsigned attrs)
  128. {
  129. if (!varDecls)
  130. varDecls = new (globalData) ParserArenaData&lt;DeclarationStacks::VarStack&gt;;
  131. varDecls-&gt;data.append(make_pair(&amp;ident, attrs));
  132. }
  133. static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserArenaData&lt;DeclarationStacks::VarStack&gt;*&amp; varDecls, ConstDeclNode* decl)
  134. {
  135. unsigned attrs = DeclarationStacks::IsConstant;
  136. if (decl-&gt;hasInitializer())
  137. attrs |= DeclarationStacks::HasInitializer;
  138. appendToVarDeclarationList(globalData, varDecls, decl-&gt;ident(), attrs);
  139. }
  140. %}
  141. %union {
  142. int intValue;
  143. double doubleValue;
  144. const Identifier* ident;
  145. // expression subtrees
  146. ExpressionNodeInfo expressionNode;
  147. FuncDeclNodeInfo funcDeclNode;
  148. PropertyNodeInfo propertyNode;
  149. ArgumentsNodeInfo argumentsNode;
  150. ConstDeclNodeInfo constDeclNode;
  151. CaseBlockNodeInfo caseBlockNode;
  152. CaseClauseNodeInfo caseClauseNode;
  153. FuncExprNodeInfo funcExprNode;
  154. // statement nodes
  155. StatementNodeInfo statementNode;
  156. FunctionBodyNode* functionBodyNode;
  157. ProgramNode* programNode;
  158. SourceElementsInfo sourceElements;
  159. PropertyListInfo propertyList;
  160. ArgumentListInfo argumentList;
  161. VarDeclListInfo varDeclList;
  162. ConstDeclListInfo constDeclList;
  163. ClauseListInfo clauseList;
  164. ElementListInfo elementList;
  165. ParameterListInfo parameterList;
  166. Operator op;
  167. }
  168. %{
  169. template &lt;typename T&gt; inline void setStatementLocation(StatementNode* statement, const T&amp; start, const T&amp; end)
  170. {
  171. statement-&gt;setLoc(start.first_line, end.last_line);
  172. }
  173. static inline void setExceptionLocation(ThrowableExpressionData* node, unsigned start, unsigned divot, unsigned end)
  174. {
  175. node-&gt;setExceptionSourceCode(divot, divot - start, end - divot);
  176. }
  177. %}
  178. %start Program
  179. /* literals */
  180. %token NULLTOKEN TRUETOKEN FALSETOKEN
  181. /* keywords */
  182. %token BREAK CASE DEFAULT FOR NEW VAR CONSTTOKEN CONTINUE
  183. %token FUNCTION RETURN VOIDTOKEN DELETETOKEN
  184. %token IF THISTOKEN DO WHILE INTOKEN INSTANCEOF TYPEOF
  185. %token SWITCH WITH RESERVED
  186. %token THROW TRY CATCH FINALLY
  187. %token DEBUGGER
  188. /* give an if without an else higher precedence than an else to resolve the ambiguity */
  189. %nonassoc IF_WITHOUT_ELSE
  190. %nonassoc ELSE
  191. /* punctuators */
  192. %token EQEQ NE /* == and != */
  193. %token STREQ STRNEQ /* === and !== */
  194. %token LE GE /* &lt; and &gt; */
  195. %token OR AND /* || and &amp;&amp; */
  196. %token PLUSPLUS MINUSMINUS /* ++ and -- */
  197. %token LSHIFT /* &lt;&lt; */
  198. %token RSHIFT URSHIFT /* &gt;&gt; and &gt;&gt;&gt; */
  199. %token PLUSEQUAL MINUSEQUAL /* += and -= */
  200. %token MULTEQUAL DIVEQUAL /* *= and /= */
  201. %token LSHIFTEQUAL /* &lt;&lt;= */
  202. %token RSHIFTEQUAL URSHIFTEQUAL /* &gt;&gt;= and &gt;&gt;&gt;= */
  203. %token ANDEQUAL MODEQUAL /* &amp;= and %= */
  204. %token XOREQUAL OREQUAL /* ^= and |= */
  205. %token &lt;intValue&gt; OPENBRACE /* { (with char offset) */
  206. %token &lt;intValue&gt; CLOSEBRACE /* } (with char offset) */
  207. /* terminal types */
  208. %token &lt;doubleValue&gt; NUMBER
  209. %token &lt;ident&gt; IDENT STRING
  210. /* automatically inserted semicolon */
  211. %token AUTOPLUSPLUS AUTOMINUSMINUS
  212. /* non-terminal types */
  213. %type &lt;expressionNode&gt; Literal ArrayLiteral
  214. %type &lt;expressionNode&gt; PrimaryExpr PrimaryExprNoBrace
  215. %type &lt;expressionNode&gt; MemberExpr MemberExprNoBF /* BF =&gt; brace or function */
  216. %type &lt;expressionNode&gt; NewExpr NewExprNoBF
  217. %type &lt;expressionNode&gt; CallExpr CallExprNoBF
  218. %type &lt;expressionNode&gt; LeftHandSideExpr LeftHandSideExprNoBF
  219. %type &lt;expressionNode&gt; PostfixExpr PostfixExprNoBF
  220. %type &lt;expressionNode&gt; UnaryExpr UnaryExprNoBF UnaryExprCommon
  221. %type &lt;expressionNode&gt; MultiplicativeExpr MultiplicativeExprNoBF
  222. %type &lt;expressionNode&gt; AdditiveExpr AdditiveExprNoBF
  223. %type &lt;expressionNode&gt; ShiftExpr ShiftExprNoBF
  224. %type &lt;expressionNode&gt; RelationalExpr RelationalExprNoIn RelationalExprNoBF
  225. %type &lt;expressionNode&gt; EqualityExpr EqualityExprNoIn EqualityExprNoBF
  226. %type &lt;expressionNode&gt; BitwiseANDExpr BitwiseANDExprNoIn BitwiseANDExprNoBF
  227. %type &lt;expressionNode&gt; BitwiseXORExpr BitwiseXORExprNoIn BitwiseXORExprNoBF
  228. %type &lt;expressionNode&gt; BitwiseORExpr BitwiseORExprNoIn BitwiseORExprNoBF
  229. %type &lt;expressionNode&gt; LogicalANDExpr LogicalANDExprNoIn LogicalANDExprNoBF
  230. %type &lt;expressionNode&gt; LogicalORExpr LogicalORExprNoIn LogicalORExprNoBF
  231. %type &lt;expressionNode&gt; ConditionalExpr ConditionalExprNoIn ConditionalExprNoBF
  232. %type &lt;expressionNode&gt; AssignmentExpr AssignmentExprNoIn AssignmentExprNoBF
  233. %type &lt;expressionNode&gt; Expr ExprNoIn ExprNoBF
  234. %type &lt;expressionNode&gt; ExprOpt ExprNoInOpt
  235. %type &lt;statementNode&gt; Statement Block
  236. %type &lt;statementNode&gt; VariableStatement ConstStatement EmptyStatement ExprStatement
  237. %type &lt;statementNode&gt; IfStatement IterationStatement ContinueStatement
  238. %type &lt;statementNode&gt; BreakStatement ReturnStatement WithStatement
  239. %type &lt;statementNode&gt; SwitchStatement LabelledStatement
  240. %type &lt;statementNode&gt; ThrowStatement TryStatement
  241. %type &lt;statementNode&gt; DebuggerStatement
  242. %type &lt;expressionNode&gt; Initializer InitializerNoIn
  243. %type &lt;statementNode&gt; FunctionDeclaration
  244. %type &lt;funcExprNode&gt; FunctionExpr
  245. %type &lt;functionBodyNode&gt; FunctionBody
  246. %type &lt;sourceElements&gt; SourceElements
  247. %type &lt;parameterList&gt; FormalParameterList
  248. %type &lt;op&gt; AssignmentOperator
  249. %type &lt;argumentsNode&gt; Arguments
  250. %type &lt;argumentList&gt; ArgumentList
  251. %type &lt;varDeclList&gt; VariableDeclarationList VariableDeclarationListNoIn
  252. %type &lt;constDeclList&gt; ConstDeclarationList
  253. %type &lt;constDeclNode&gt; ConstDeclaration
  254. %type &lt;caseBlockNode&gt; CaseBlock
  255. %type &lt;caseClauseNode&gt; CaseClause DefaultClause
  256. %type &lt;clauseList&gt; CaseClauses CaseClausesOpt
  257. %type &lt;intValue&gt; Elision ElisionOpt
  258. %type &lt;elementList&gt; ElementList
  259. %type &lt;propertyNode&gt; Property
  260. %type &lt;propertyList&gt; PropertyList
  261. %%
  262. // FIXME: There are currently two versions of the grammar in this file, the normal one, and the NoNodes version used for
  263. // lazy recompilation of FunctionBodyNodes. We should move to generating the two versions from a script to avoid bugs.
  264. // In the mean time, make sure to make any changes to the grammar in both versions.
  265. Literal:
  266. NULLTOKEN { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) NullNode(GLOBAL_DATA), 0, 1); }
  267. | TRUETOKEN { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, true), 0, 1); }
  268. | FALSETOKEN { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, false), 0, 1); }
  269. | NUMBER { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeNumberNode(GLOBAL_DATA, $1), 0, 1); }
  270. | STRING { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) StringNode(GLOBAL_DATA, *$1), 0, 1); }
  271. | '/' /* regexp */ {
  272. Lexer&amp; l = *GLOBAL_DATA-&gt;lexer;
  273. const Identifier* pattern;
  274. const Identifier* flags;
  275. if (!l.scanRegExp(pattern, flags))
  276. YYABORT;
  277. RegExpNode* node = new (GLOBAL_DATA) RegExpNode(GLOBAL_DATA, *pattern, *flags);
  278. int size = pattern-&gt;size() + 2; // + 2 for the two /'s
  279. setExceptionLocation(node, @1.first_column, @1.first_column + size, @1.first_column + size);
  280. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, 0, 0);
  281. }
  282. | DIVEQUAL /* regexp with /= */ {
  283. Lexer&amp; l = *GLOBAL_DATA-&gt;lexer;
  284. const Identifier* pattern;
  285. const Identifier* flags;
  286. if (!l.scanRegExp(pattern, flags, '='))
  287. YYABORT;
  288. RegExpNode* node = new (GLOBAL_DATA) RegExpNode(GLOBAL_DATA, *pattern, *flags);
  289. int size = pattern-&gt;size() + 2; // + 2 for the two /'s
  290. setExceptionLocation(node, @1.first_column, @1.first_column + size, @1.first_column + size);
  291. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, 0, 0);
  292. }
  293. ;
  294. Property:
  295. IDENT ':' AssignmentExpr { $$ = createNodeInfo&lt;PropertyNode*&gt;(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *$1, $3.m_node, PropertyNode::Constant), $3.m_features, $3.m_numConstants); }
  296. | STRING ':' AssignmentExpr { $$ = createNodeInfo&lt;PropertyNode*&gt;(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *$1, $3.m_node, PropertyNode::Constant), $3.m_features, $3.m_numConstants); }
  297. | NUMBER ':' AssignmentExpr { $$ = createNodeInfo&lt;PropertyNode*&gt;(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, $1, $3.m_node, PropertyNode::Constant), $3.m_features, $3.m_numConstants); }
  298. | IDENT IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeInfo&lt;PropertyNode*&gt;(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *$1, *$2, 0, $6, GLOBAL_DATA-&gt;lexer-&gt;sourceCode($5, $7, @5.first_line)), ClosureFeature, 0); setStatementLocation($6, @5, @7); if (!$$.m_node) YYABORT; }
  299. | IDENT IDENT '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE
  300. {
  301. $$ = createNodeInfo&lt;PropertyNode*&gt;(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *$1, *$2, $4.m_node.head, $7, GLOBAL_DATA-&gt;lexer-&gt;sourceCode($6, $8, @6.first_line)), $4.m_features | ClosureFeature, 0);
  302. if ($4.m_features &amp; ArgumentsFeature)
  303. $7-&gt;setUsesArguments();
  304. setStatementLocation($7, @6, @8);
  305. if (!$$.m_node)
  306. YYABORT;
  307. }
  308. ;
  309. PropertyList:
  310. Property { $$.m_node.head = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, $1.m_node);
  311. $$.m_node.tail = $$.m_node.head;
  312. $$.m_features = $1.m_features;
  313. $$.m_numConstants = $1.m_numConstants; }
  314. | PropertyList ',' Property { $$.m_node.head = $1.m_node.head;
  315. $$.m_node.tail = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, $3.m_node, $1.m_node.tail);
  316. $$.m_features = $1.m_features | $3.m_features;
  317. $$.m_numConstants = $1.m_numConstants + $3.m_numConstants; }
  318. ;
  319. PrimaryExpr:
  320. PrimaryExprNoBrace
  321. | OPENBRACE CLOSEBRACE { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA), 0, 0); }
  322. | OPENBRACE PropertyList CLOSEBRACE { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, $2.m_node.head), $2.m_features, $2.m_numConstants); }
  323. /* allow extra comma, see <a href="http://bugs.webkit.org/show_bug.cgi?id=5939">http://bugs.webkit.org/show_bug.cgi?id=5939</a> */
  324. | OPENBRACE PropertyList ',' CLOSEBRACE { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, $2.m_node.head), $2.m_features, $2.m_numConstants); }
  325. ;
  326. PrimaryExprNoBrace:
  327. THISTOKEN { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ThisNode(GLOBAL_DATA), ThisFeature, 0); }
  328. | Literal
  329. | ArrayLiteral
  330. | IDENT { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ResolveNode(GLOBAL_DATA, *$1, @1.first_column), (*$1 == GLOBAL_DATA-&gt;propertyNames-&gt;arguments) ? ArgumentsFeature : 0, 0); }
  331. | '(' Expr ')' { $$ = $2; }
  332. ;
  333. ArrayLiteral:
  334. '[' ElisionOpt ']' { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, $2), 0, $2 ? 1 : 0); }
  335. | '[' ElementList ']' { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, $2.m_node.head), $2.m_features, $2.m_numConstants); }
  336. | '[' ElementList ',' ElisionOpt ']' { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, $4, $2.m_node.head), $2.m_features, $4 ? $2.m_numConstants + 1 : $2.m_numConstants); }
  337. ;
  338. ElementList:
  339. ElisionOpt AssignmentExpr { $$.m_node.head = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, $1, $2.m_node);
  340. $$.m_node.tail = $$.m_node.head;
  341. $$.m_features = $2.m_features;
  342. $$.m_numConstants = $2.m_numConstants; }
  343. | ElementList ',' ElisionOpt AssignmentExpr
  344. { $$.m_node.head = $1.m_node.head;
  345. $$.m_node.tail = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, $1.m_node.tail, $3, $4.m_node);
  346. $$.m_features = $1.m_features | $4.m_features;
  347. $$.m_numConstants = $1.m_numConstants + $4.m_numConstants; }
  348. ;
  349. ElisionOpt:
  350. /* nothing */ { $$ = 0; }
  351. | Elision
  352. ;
  353. Elision:
  354. ',' { $$ = 1; }
  355. | Elision ',' { $$ = $1 + 1; }
  356. ;
  357. MemberExpr:
  358. PrimaryExpr
  359. | FunctionExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;($1.m_node, $1.m_features, $1.m_numConstants); }
  360. | MemberExpr '[' Expr ']' { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  361. setExceptionLocation(node, @1.first_column, @1.last_column, @4.last_column);
  362. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants);
  363. }
  364. | MemberExpr '.' IDENT { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, $1.m_node, *$3);
  365. setExceptionLocation(node, @1.first_column, @1.last_column, @3.last_column);
  366. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features, $1.m_numConstants);
  367. }
  368. | NEW MemberExpr Arguments { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, $2.m_node, $3.m_node);
  369. setExceptionLocation(node, @1.first_column, @2.last_column, @3.last_column);
  370. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $2.m_features | $3.m_features, $2.m_numConstants + $3.m_numConstants);
  371. }
  372. ;
  373. MemberExprNoBF:
  374. PrimaryExprNoBrace
  375. | MemberExprNoBF '[' Expr ']' { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  376. setExceptionLocation(node, @1.first_column, @1.last_column, @4.last_column);
  377. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants);
  378. }
  379. | MemberExprNoBF '.' IDENT { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, $1.m_node, *$3);
  380. setExceptionLocation(node, @1.first_column, @1.last_column, @3.last_column);
  381. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features, $1.m_numConstants);
  382. }
  383. | NEW MemberExpr Arguments { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, $2.m_node, $3.m_node);
  384. setExceptionLocation(node, @1.first_column, @2.last_column, @3.last_column);
  385. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $2.m_features | $3.m_features, $2.m_numConstants + $3.m_numConstants);
  386. }
  387. ;
  388. NewExpr:
  389. MemberExpr
  390. | NEW NewExpr { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, $2.m_node);
  391. setExceptionLocation(node, @1.first_column, @2.last_column, @2.last_column);
  392. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $2.m_features, $2.m_numConstants);
  393. }
  394. ;
  395. NewExprNoBF:
  396. MemberExprNoBF
  397. | NEW NewExpr { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, $2.m_node);
  398. setExceptionLocation(node, @1.first_column, @2.last_column, @2.last_column);
  399. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $2.m_features, $2.m_numConstants);
  400. }
  401. ;
  402. CallExpr:
  403. MemberExpr Arguments { $$ = makeFunctionCallNode(GLOBAL_DATA, $1, $2, @1.first_column, @1.last_column, @2.last_column); }
  404. | CallExpr Arguments { $$ = makeFunctionCallNode(GLOBAL_DATA, $1, $2, @1.first_column, @1.last_column, @2.last_column); }
  405. | CallExpr '[' Expr ']' { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  406. setExceptionLocation(node, @1.first_column, @1.last_column, @4.last_column);
  407. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants);
  408. }
  409. | CallExpr '.' IDENT { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, $1.m_node, *$3);
  410. setExceptionLocation(node, @1.first_column, @1.last_column, @3.last_column);
  411. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features, $1.m_numConstants); }
  412. ;
  413. CallExprNoBF:
  414. MemberExprNoBF Arguments { $$ = makeFunctionCallNode(GLOBAL_DATA, $1, $2, @1.first_column, @1.last_column, @2.last_column); }
  415. | CallExprNoBF Arguments { $$ = makeFunctionCallNode(GLOBAL_DATA, $1, $2, @1.first_column, @1.last_column, @2.last_column); }
  416. | CallExprNoBF '[' Expr ']' { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  417. setExceptionLocation(node, @1.first_column, @1.last_column, @4.last_column);
  418. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants);
  419. }
  420. | CallExprNoBF '.' IDENT { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, $1.m_node, *$3);
  421. setExceptionLocation(node, @1.first_column, @1.last_column, @3.last_column);
  422. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features, $1.m_numConstants);
  423. }
  424. ;
  425. Arguments:
  426. '(' ')' { $$ = createNodeInfo&lt;ArgumentsNode*&gt;(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA), 0, 0); }
  427. | '(' ArgumentList ')' { $$ = createNodeInfo&lt;ArgumentsNode*&gt;(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA, $2.m_node.head), $2.m_features, $2.m_numConstants); }
  428. ;
  429. ArgumentList:
  430. AssignmentExpr { $$.m_node.head = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, $1.m_node);
  431. $$.m_node.tail = $$.m_node.head;
  432. $$.m_features = $1.m_features;
  433. $$.m_numConstants = $1.m_numConstants; }
  434. | ArgumentList ',' AssignmentExpr { $$.m_node.head = $1.m_node.head;
  435. $$.m_node.tail = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, $1.m_node.tail, $3.m_node);
  436. $$.m_features = $1.m_features | $3.m_features;
  437. $$.m_numConstants = $1.m_numConstants + $3.m_numConstants; }
  438. ;
  439. LeftHandSideExpr:
  440. NewExpr
  441. | CallExpr
  442. ;
  443. LeftHandSideExprNoBF:
  444. NewExprNoBF
  445. | CallExprNoBF
  446. ;
  447. PostfixExpr:
  448. LeftHandSideExpr
  449. | LeftHandSideExpr PLUSPLUS { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makePostfixNode(GLOBAL_DATA, $1.m_node, OpPlusPlus, @1.first_column, @1.last_column, @2.last_column), $1.m_features | AssignFeature, $1.m_numConstants); }
  450. | LeftHandSideExpr MINUSMINUS { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makePostfixNode(GLOBAL_DATA, $1.m_node, OpMinusMinus, @1.first_column, @1.last_column, @2.last_column), $1.m_features | AssignFeature, $1.m_numConstants); }
  451. ;
  452. PostfixExprNoBF:
  453. LeftHandSideExprNoBF
  454. | LeftHandSideExprNoBF PLUSPLUS { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makePostfixNode(GLOBAL_DATA, $1.m_node, OpPlusPlus, @1.first_column, @1.last_column, @2.last_column), $1.m_features | AssignFeature, $1.m_numConstants); }
  455. | LeftHandSideExprNoBF MINUSMINUS { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makePostfixNode(GLOBAL_DATA, $1.m_node, OpMinusMinus, @1.first_column, @1.last_column, @2.last_column), $1.m_features | AssignFeature, $1.m_numConstants); }
  456. ;
  457. UnaryExprCommon:
  458. DELETETOKEN UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeDeleteNode(GLOBAL_DATA, $2.m_node, @1.first_column, @2.last_column, @2.last_column), $2.m_features, $2.m_numConstants); }
  459. | VOIDTOKEN UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) VoidNode(GLOBAL_DATA, $2.m_node), $2.m_features, $2.m_numConstants + 1); }
  460. | TYPEOF UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeTypeOfNode(GLOBAL_DATA, $2.m_node), $2.m_features, $2.m_numConstants); }
  461. | PLUSPLUS UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makePrefixNode(GLOBAL_DATA, $2.m_node, OpPlusPlus, @1.first_column, @2.first_column + 1, @2.last_column), $2.m_features | AssignFeature, $2.m_numConstants); }
  462. | AUTOPLUSPLUS UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makePrefixNode(GLOBAL_DATA, $2.m_node, OpPlusPlus, @1.first_column, @2.first_column + 1, @2.last_column), $2.m_features | AssignFeature, $2.m_numConstants); }
  463. | MINUSMINUS UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makePrefixNode(GLOBAL_DATA, $2.m_node, OpMinusMinus, @1.first_column, @2.first_column + 1, @2.last_column), $2.m_features | AssignFeature, $2.m_numConstants); }
  464. | AUTOMINUSMINUS UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makePrefixNode(GLOBAL_DATA, $2.m_node, OpMinusMinus, @1.first_column, @2.first_column + 1, @2.last_column), $2.m_features | AssignFeature, $2.m_numConstants); }
  465. | '+' UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) UnaryPlusNode(GLOBAL_DATA, $2.m_node), $2.m_features, $2.m_numConstants); }
  466. | '-' UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeNegateNode(GLOBAL_DATA, $2.m_node), $2.m_features, $2.m_numConstants); }
  467. | '~' UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeBitwiseNotNode(GLOBAL_DATA, $2.m_node), $2.m_features, $2.m_numConstants); }
  468. | '!' UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LogicalNotNode(GLOBAL_DATA, $2.m_node), $2.m_features, $2.m_numConstants); }
  469. UnaryExpr:
  470. PostfixExpr
  471. | UnaryExprCommon
  472. ;
  473. UnaryExprNoBF:
  474. PostfixExprNoBF
  475. | UnaryExprCommon
  476. ;
  477. MultiplicativeExpr:
  478. UnaryExpr
  479. | MultiplicativeExpr '*' UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeMultNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  480. | MultiplicativeExpr '/' UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeDivNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  481. | MultiplicativeExpr '%' UnaryExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  482. ;
  483. MultiplicativeExprNoBF:
  484. UnaryExprNoBF
  485. | MultiplicativeExprNoBF '*' UnaryExpr
  486. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeMultNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  487. | MultiplicativeExprNoBF '/' UnaryExpr
  488. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeDivNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  489. | MultiplicativeExprNoBF '%' UnaryExpr
  490. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  491. ;
  492. AdditiveExpr:
  493. MultiplicativeExpr
  494. | AdditiveExpr '+' MultiplicativeExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeAddNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  495. | AdditiveExpr '-' MultiplicativeExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeSubNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  496. ;
  497. AdditiveExprNoBF:
  498. MultiplicativeExprNoBF
  499. | AdditiveExprNoBF '+' MultiplicativeExpr
  500. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeAddNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  501. | AdditiveExprNoBF '-' MultiplicativeExpr
  502. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeSubNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  503. ;
  504. ShiftExpr:
  505. AdditiveExpr
  506. | ShiftExpr LSHIFT AdditiveExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeLeftShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  507. | ShiftExpr RSHIFT AdditiveExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeRightShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  508. | ShiftExpr URSHIFT AdditiveExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  509. ;
  510. ShiftExprNoBF:
  511. AdditiveExprNoBF
  512. | ShiftExprNoBF LSHIFT AdditiveExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeLeftShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  513. | ShiftExprNoBF RSHIFT AdditiveExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(makeRightShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  514. | ShiftExprNoBF URSHIFT AdditiveExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  515. ;
  516. RelationalExpr:
  517. ShiftExpr
  518. | RelationalExpr '&lt;' ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  519. | RelationalExpr '&gt;' ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  520. | RelationalExpr LE ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  521. | RelationalExpr GE ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  522. | RelationalExpr INSTANCEOF ShiftExpr { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  523. setExceptionLocation(node, @1.first_column, @3.first_column, @3.last_column);
  524. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  525. | RelationalExpr INTOKEN ShiftExpr { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  526. setExceptionLocation(node, @1.first_column, @3.first_column, @3.last_column);
  527. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  528. ;
  529. RelationalExprNoIn:
  530. ShiftExpr
  531. | RelationalExprNoIn '&lt;' ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  532. | RelationalExprNoIn '&gt;' ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  533. | RelationalExprNoIn LE ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  534. | RelationalExprNoIn GE ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  535. | RelationalExprNoIn INSTANCEOF ShiftExpr
  536. { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  537. setExceptionLocation(node, @1.first_column, @3.first_column, @3.last_column);
  538. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  539. ;
  540. RelationalExprNoBF:
  541. ShiftExprNoBF
  542. | RelationalExprNoBF '&lt;' ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  543. | RelationalExprNoBF '&gt;' ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  544. | RelationalExprNoBF LE ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  545. | RelationalExprNoBF GE ShiftExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  546. | RelationalExprNoBF INSTANCEOF ShiftExpr
  547. { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  548. setExceptionLocation(node, @1.first_column, @3.first_column, @3.last_column);
  549. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  550. | RelationalExprNoBF INTOKEN ShiftExpr
  551. { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature);
  552. setExceptionLocation(node, @1.first_column, @3.first_column, @3.last_column);
  553. $$ = createNodeInfo&lt;ExpressionNode*&gt;(node, $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  554. ;
  555. EqualityExpr:
  556. RelationalExpr
  557. | EqualityExpr EQEQ RelationalExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  558. | EqualityExpr NE RelationalExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  559. | EqualityExpr STREQ RelationalExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  560. | EqualityExpr STRNEQ RelationalExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  561. ;
  562. EqualityExprNoIn:
  563. RelationalExprNoIn
  564. | EqualityExprNoIn EQEQ RelationalExprNoIn
  565. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  566. | EqualityExprNoIn NE RelationalExprNoIn
  567. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  568. | EqualityExprNoIn STREQ RelationalExprNoIn
  569. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  570. | EqualityExprNoIn STRNEQ RelationalExprNoIn
  571. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  572. ;
  573. EqualityExprNoBF:
  574. RelationalExprNoBF
  575. | EqualityExprNoBF EQEQ RelationalExpr
  576. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  577. | EqualityExprNoBF NE RelationalExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  578. | EqualityExprNoBF STREQ RelationalExpr
  579. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  580. | EqualityExprNoBF STRNEQ RelationalExpr
  581. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  582. ;
  583. BitwiseANDExpr:
  584. EqualityExpr
  585. | BitwiseANDExpr '&amp;' EqualityExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  586. ;
  587. BitwiseANDExprNoIn:
  588. EqualityExprNoIn
  589. | BitwiseANDExprNoIn '&amp;' EqualityExprNoIn
  590. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  591. ;
  592. BitwiseANDExprNoBF:
  593. EqualityExprNoBF
  594. | BitwiseANDExprNoBF '&amp;' EqualityExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  595. ;
  596. BitwiseXORExpr:
  597. BitwiseANDExpr
  598. | BitwiseXORExpr '^' BitwiseANDExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  599. ;
  600. BitwiseXORExprNoIn:
  601. BitwiseANDExprNoIn
  602. | BitwiseXORExprNoIn '^' BitwiseANDExprNoIn
  603. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  604. ;
  605. BitwiseXORExprNoBF:
  606. BitwiseANDExprNoBF
  607. | BitwiseXORExprNoBF '^' BitwiseANDExpr
  608. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  609. ;
  610. BitwiseORExpr:
  611. BitwiseXORExpr
  612. | BitwiseORExpr '|' BitwiseXORExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  613. ;
  614. BitwiseORExprNoIn:
  615. BitwiseXORExprNoIn
  616. | BitwiseORExprNoIn '|' BitwiseXORExprNoIn
  617. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  618. ;
  619. BitwiseORExprNoBF:
  620. BitwiseXORExprNoBF
  621. | BitwiseORExprNoBF '|' BitwiseXORExpr
  622. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features &amp; AssignFeature), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  623. ;
  624. LogicalANDExpr:
  625. BitwiseORExpr
  626. | LogicalANDExpr AND BitwiseORExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, $1.m_node, $3.m_node, OpLogicalAnd), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  627. ;
  628. LogicalANDExprNoIn:
  629. BitwiseORExprNoIn
  630. | LogicalANDExprNoIn AND BitwiseORExprNoIn
  631. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, $1.m_node, $3.m_node, OpLogicalAnd), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  632. ;
  633. LogicalANDExprNoBF:
  634. BitwiseORExprNoBF
  635. | LogicalANDExprNoBF AND BitwiseORExpr
  636. { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, $1.m_node, $3.m_node, OpLogicalAnd), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  637. ;
  638. LogicalORExpr:
  639. LogicalANDExpr
  640. | LogicalORExpr OR LogicalANDExpr { $$ = createNodeInfo&lt;ExpressionNode*&gt;(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, $1.m_node, $3.m_node, OpLogicalOr), $1.m_features | $3.m_features, $1.m_numConstants + $3.m_numConstants); }
  641. ;
  642. LogicalORExprNoIn:
  643. LogicalANDExprNoIn
  644. | LogicalORExprNoIn OR LogicalANDExprNoIn
  645. { $$ = createNodeInfo&lt;Ex

Large files files are truncated, but you can click here to view the full file