Changeset 47263 in webkit for trunk/JavaScriptCore
- Timestamp:
- Aug 13, 2009, 5:58:06 PM (16 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r47262 r47263 1 2009-08-13 Darin Adler <[email protected]> 2 3 Reviewed by George Staikos. 4 5 Too much use of void* in Grammar.y 6 https://bugs.webkit.org/show_bug.cgi?id=28287 7 8 * parser/Grammar.y: Changed all the helper functions to 9 take a JSGlobalData* instead of a void*. A couple formatting 10 tweaks that I missed when breaking this into pieces. 11 1 12 2009-08-13 Darin Adler <[email protected]> 2 13 -
trunk/JavaScriptCore/parser/Grammar.y
r47262 r47263 60 60 using namespace std; 61 61 62 static ExpressionNode* makeAssignNode( void*, ExpressionNode* loc, Operator, ExpressionNode* expr, bool locHasAssignments, bool exprHasAssignments, int start, int divot, int end);63 static ExpressionNode* makePrefixNode( void*, ExpressionNode* expr, Operator, int start, int divot, int end);64 static ExpressionNode* makePostfixNode( void*, ExpressionNode* expr, Operator, int start, int divot, int end);65 static PropertyNode* makeGetterOrSetterPropertyNode( void*, const Identifier &getOrSet, const Identifier& name, ParameterNode*, FunctionBodyNode*, const SourceCode&);66 static ExpressionNodeInfo makeFunctionCallNode( void*, ExpressionNodeInfo func, ArgumentsNodeInfo, int start, int divot, int end);67 static ExpressionNode* makeTypeOfNode( void*, ExpressionNode*);68 static ExpressionNode* makeDeleteNode( void*, ExpressionNode*, int start, int divot, int end);69 static ExpressionNode* makeNegateNode( void*, ExpressionNode*);70 static NumberNode* makeNumberNode( void*, double);71 static ExpressionNode* makeBitwiseNotNode( void*, ExpressionNode*);72 static ExpressionNode* makeMultNode( void*, ExpressionNode*, ExpressionNode*, bool rightHasAssignments);73 static ExpressionNode* makeDivNode( void*, ExpressionNode*, ExpressionNode*, bool rightHasAssignments);74 static ExpressionNode* makeAddNode( void*, ExpressionNode*, ExpressionNode*, bool rightHasAssignments);75 static ExpressionNode* makeSubNode( void*, ExpressionNode*, ExpressionNode*, bool rightHasAssignments);76 static ExpressionNode* makeLeftShiftNode( void*, ExpressionNode*, ExpressionNode*, bool rightHasAssignments);77 static ExpressionNode* makeRightShiftNode( void*, ExpressionNode*, ExpressionNode*, bool rightHasAssignments);78 static StatementNode* makeVarStatementNode( void*, ExpressionNode*);79 static ExpressionNode* combineCommaNodes( void*, ExpressionNode* list, ExpressionNode* init);62 static ExpressionNode* makeAssignNode(JSGlobalData*, ExpressionNode* left, Operator, ExpressionNode* right, bool leftHasAssignments, bool rightHasAssignments, int start, int divot, int end); 63 static ExpressionNode* makePrefixNode(JSGlobalData*, ExpressionNode*, Operator, int start, int divot, int end); 64 static ExpressionNode* makePostfixNode(JSGlobalData*, ExpressionNode*, Operator, int start, int divot, int end); 65 static PropertyNode* makeGetterOrSetterPropertyNode(JSGlobalData*, const Identifier& getOrSet, const Identifier& name, ParameterNode*, FunctionBodyNode*, const SourceCode&); 66 static ExpressionNodeInfo makeFunctionCallNode(JSGlobalData*, ExpressionNodeInfo function, ArgumentsNodeInfo, int start, int divot, int end); 67 static ExpressionNode* makeTypeOfNode(JSGlobalData*, ExpressionNode*); 68 static ExpressionNode* makeDeleteNode(JSGlobalData*, ExpressionNode*, int start, int divot, int end); 69 static ExpressionNode* makeNegateNode(JSGlobalData*, ExpressionNode*); 70 static NumberNode* makeNumberNode(JSGlobalData*, double); 71 static ExpressionNode* makeBitwiseNotNode(JSGlobalData*, ExpressionNode*); 72 static ExpressionNode* makeMultNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments); 73 static ExpressionNode* makeDivNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments); 74 static ExpressionNode* makeAddNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments); 75 static ExpressionNode* makeSubNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments); 76 static ExpressionNode* makeLeftShiftNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments); 77 static ExpressionNode* makeRightShiftNode(JSGlobalData*, ExpressionNode* left, ExpressionNode* right, bool rightHasAssignments); 78 static StatementNode* makeVarStatementNode(JSGlobalData*, ExpressionNode*); 79 static ExpressionNode* combineCommaNodes(JSGlobalData*, ExpressionNode* list, ExpressionNode* init); 80 80 81 81 #if COMPILER(MSVC) … … 126 126 } 127 127 128 static void appendToVarDeclarationList( void* globalPtr, ParserArenaData<DeclarationStacks::VarStack>*& varDecls, const Identifier& ident, unsigned attrs)128 static void appendToVarDeclarationList(JSGlobalData* globalData, ParserArenaData<DeclarationStacks::VarStack>*& varDecls, const Identifier& ident, unsigned attrs) 129 129 { 130 130 if (!varDecls) 131 varDecls = new ( GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>;131 varDecls = new (globalData) ParserArenaData<DeclarationStacks::VarStack>; 132 132 133 133 varDecls->data.append(make_pair(ident, attrs)); … … 135 135 } 136 136 137 static inline void appendToVarDeclarationList( void* globalPtr, ParserArenaData<DeclarationStacks::VarStack>*& varDecls, ConstDeclNode* decl)137 static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserArenaData<DeclarationStacks::VarStack>*& varDecls, ConstDeclNode* decl) 138 138 { 139 139 unsigned attrs = DeclarationStacks::IsConstant; 140 140 if (decl->hasInitializer()) 141 141 attrs |= DeclarationStacks::HasInitializer; 142 appendToVarDeclarationList(global Ptr, varDecls, decl->ident(), attrs);142 appendToVarDeclarationList(globalData, varDecls, decl->ident(), attrs); 143 143 } 144 144 … … 325 325 | STRING ':' AssignmentExpr { $$ = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *$1, $3.m_node, PropertyNode::Constant), $3.m_features, $3.m_numConstants); } 326 326 | NUMBER ':' AssignmentExpr { $$ = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, $1, $3.m_node, PropertyNode::Constant), $3.m_features, $3.m_numConstants); } 327 | IDENT IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode( globalPtr, *$1, *$2, 0, $6, GLOBAL_DATA->lexer->sourceCode($5, $7, @5.first_line)), ClosureFeature, 0); setStatementLocation($6, @5, @7); if (!$$.m_node) YYABORT; }327 | IDENT IDENT '(' ')' OPENBRACE FunctionBody CLOSEBRACE { $$ = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *$1, *$2, 0, $6, GLOBAL_DATA->lexer->sourceCode($5, $7, @5.first_line)), ClosureFeature, 0); setStatementLocation($6, @5, @7); if (!$$.m_node) YYABORT; } 328 328 | IDENT IDENT '(' FormalParameterList ')' OPENBRACE FunctionBody CLOSEBRACE 329 329 { 330 $$ = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode( globalPtr, *$1, *$2, $4.m_node.head, $7, GLOBAL_DATA->lexer->sourceCode($6, $8, @6.first_line)), $4.m_features | ClosureFeature, 0);330 $$ = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *$1, *$2, $4.m_node.head, $7, GLOBAL_DATA->lexer->sourceCode($6, $8, @6.first_line)), $4.m_features | ClosureFeature, 0); 331 331 if ($4.m_features & ArgumentsFeature) 332 332 $7->setUsesArguments(); … … 442 442 443 443 CallExpr: 444 MemberExpr Arguments { $$ = makeFunctionCallNode( globalPtr, $1, $2, @1.first_column, @1.last_column, @2.last_column); }445 | CallExpr Arguments { $$ = makeFunctionCallNode( globalPtr, $1, $2, @1.first_column, @1.last_column, @2.last_column); }444 MemberExpr Arguments { $$ = makeFunctionCallNode(GLOBAL_DATA, $1, $2, @1.first_column, @1.last_column, @2.last_column); } 445 | CallExpr Arguments { $$ = makeFunctionCallNode(GLOBAL_DATA, $1, $2, @1.first_column, @1.last_column, @2.last_column); } 446 446 | CallExpr '[' Expr ']' { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features & AssignFeature); 447 447 setExceptionLocation(node, @1.first_column, @1.last_column, @4.last_column); … … 454 454 455 455 CallExprNoBF: 456 MemberExprNoBF Arguments { $$ = makeFunctionCallNode( globalPtr, $1, $2, @1.first_column, @1.last_column, @2.last_column); }457 | CallExprNoBF Arguments { $$ = makeFunctionCallNode( globalPtr, $1, $2, @1.first_column, @1.last_column, @2.last_column); }456 MemberExprNoBF Arguments { $$ = makeFunctionCallNode(GLOBAL_DATA, $1, $2, @1.first_column, @1.last_column, @2.last_column); } 457 | CallExprNoBF Arguments { $$ = makeFunctionCallNode(GLOBAL_DATA, $1, $2, @1.first_column, @1.last_column, @2.last_column); } 458 458 | CallExprNoBF '[' Expr ']' { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, $1.m_node, $3.m_node, $3.m_features & AssignFeature); 459 459 setExceptionLocation(node, @1.first_column, @1.last_column, @4.last_column); … … 1101 1101 1102 1102 CaseClausesOpt: 1103 /* nothing */{ $$.m_node.head = 0; $$.m_node.tail = 0; $$.m_varDeclarations = 0; $$.m_funcDeclarations = 0; $$.m_features = 0; $$.m_numConstants = 0; }1103 /* nothing */ { $$.m_node.head = 0; $$.m_node.tail = 0; $$.m_varDeclarations = 0; $$.m_funcDeclarations = 0; $$.m_features = 0; $$.m_numConstants = 0; } 1104 1104 | CaseClauses 1105 1105 ; … … 1835 1835 %% 1836 1836 1837 static ExpressionNode* makeAssignNode(void* globalPtr, ExpressionNode* loc, Operator op, ExpressionNode* expr, bool locHasAssignments, bool exprHasAssignments, int start, int divot, int end) 1837 #undef GLOBAL_DATA 1838 1839 static ExpressionNode* makeAssignNode(JSGlobalData* globalData, ExpressionNode* loc, Operator op, ExpressionNode* expr, bool locHasAssignments, bool exprHasAssignments, int start, int divot, int end) 1838 1840 { 1839 1841 if (!loc->isLocation()) 1840 return new ( GLOBAL_DATA) AssignErrorNode(GLOBAL_DATA, loc, op, expr, divot, divot - start, end - divot);1842 return new (globalData) AssignErrorNode(globalData, loc, op, expr, divot, divot - start, end - divot); 1841 1843 1842 1844 if (loc->isResolveNode()) { 1843 1845 ResolveNode* resolve = static_cast<ResolveNode*>(loc); 1844 1846 if (op == OpEqual) { 1845 AssignResolveNode* node = new ( GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, resolve->identifier(), expr, exprHasAssignments);1847 AssignResolveNode* node = new (globalData) AssignResolveNode(globalData, resolve->identifier(), expr, exprHasAssignments); 1846 1848 setExceptionLocation(node, start, divot, end); 1847 1849 return node; 1848 1850 } else 1849 return new ( GLOBAL_DATA) ReadModifyResolveNode(GLOBAL_DATA, resolve->identifier(), op, expr, exprHasAssignments, divot, divot - start, end - divot);1851 return new (globalData) ReadModifyResolveNode(globalData, resolve->identifier(), op, expr, exprHasAssignments, divot, divot - start, end - divot); 1850 1852 } 1851 1853 if (loc->isBracketAccessorNode()) { 1852 1854 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(loc); 1853 1855 if (op == OpEqual) 1854 return new ( GLOBAL_DATA) AssignBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), expr, locHasAssignments, exprHasAssignments, bracket->divot(), bracket->divot() - start, end - bracket->divot());1856 return new (globalData) AssignBracketNode(globalData, bracket->base(), bracket->subscript(), expr, locHasAssignments, exprHasAssignments, bracket->divot(), bracket->divot() - start, end - bracket->divot()); 1855 1857 else { 1856 ReadModifyBracketNode* node = new ( GLOBAL_DATA) ReadModifyBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), op, expr, locHasAssignments, exprHasAssignments, divot, divot - start, end - divot);1858 ReadModifyBracketNode* node = new (globalData) ReadModifyBracketNode(globalData, bracket->base(), bracket->subscript(), op, expr, locHasAssignments, exprHasAssignments, divot, divot - start, end - divot); 1857 1859 node->setSubexpressionInfo(bracket->divot(), bracket->endOffset()); 1858 1860 return node; … … 1862 1864 DotAccessorNode* dot = static_cast<DotAccessorNode*>(loc); 1863 1865 if (op == OpEqual) 1864 return new ( GLOBAL_DATA) AssignDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), expr, exprHasAssignments, dot->divot(), dot->divot() - start, end - dot->divot());1865 1866 ReadModifyDotNode* node = new ( GLOBAL_DATA) ReadModifyDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), op, expr, exprHasAssignments, divot, divot - start, end - divot);1866 return new (globalData) AssignDotNode(globalData, dot->base(), dot->identifier(), expr, exprHasAssignments, dot->divot(), dot->divot() - start, end - dot->divot()); 1867 1868 ReadModifyDotNode* node = new (globalData) ReadModifyDotNode(globalData, dot->base(), dot->identifier(), op, expr, exprHasAssignments, divot, divot - start, end - divot); 1867 1869 node->setSubexpressionInfo(dot->divot(), dot->endOffset()); 1868 1870 return node; 1869 1871 } 1870 1872 1871 static ExpressionNode* makePrefixNode( void* globalPtr, ExpressionNode* expr, Operator op, int start, int divot, int end)1873 static ExpressionNode* makePrefixNode(JSGlobalData* globalData, ExpressionNode* expr, Operator op, int start, int divot, int end) 1872 1874 { 1873 1875 if (!expr->isLocation()) 1874 return new ( GLOBAL_DATA) PrefixErrorNode(GLOBAL_DATA, expr, op, divot, divot - start, end - divot);1876 return new (globalData) PrefixErrorNode(globalData, expr, op, divot, divot - start, end - divot); 1875 1877 1876 1878 if (expr->isResolveNode()) { 1877 1879 ResolveNode* resolve = static_cast<ResolveNode*>(expr); 1878 return new ( GLOBAL_DATA) PrefixResolveNode(GLOBAL_DATA, resolve->identifier(), op, divot, divot - start, end - divot);1880 return new (globalData) PrefixResolveNode(globalData, resolve->identifier(), op, divot, divot - start, end - divot); 1879 1881 } 1880 1882 if (expr->isBracketAccessorNode()) { 1881 1883 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(expr); 1882 PrefixBracketNode* node = new ( GLOBAL_DATA) PrefixBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), op, divot, divot - start, end - divot);1884 PrefixBracketNode* node = new (globalData) PrefixBracketNode(globalData, bracket->base(), bracket->subscript(), op, divot, divot - start, end - divot); 1883 1885 node->setSubexpressionInfo(bracket->divot(), bracket->startOffset()); 1884 1886 return node; … … 1886 1888 ASSERT(expr->isDotAccessorNode()); 1887 1889 DotAccessorNode* dot = static_cast<DotAccessorNode*>(expr); 1888 PrefixDotNode* node = new ( GLOBAL_DATA) PrefixDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), op, divot, divot - start, end - divot);1890 PrefixDotNode* node = new (globalData) PrefixDotNode(globalData, dot->base(), dot->identifier(), op, divot, divot - start, end - divot); 1889 1891 node->setSubexpressionInfo(dot->divot(), dot->startOffset()); 1890 1892 return node; 1891 1893 } 1892 1894 1893 static ExpressionNode* makePostfixNode( void* globalPtr, ExpressionNode* expr, Operator op, int start, int divot, int end)1895 static ExpressionNode* makePostfixNode(JSGlobalData* globalData, ExpressionNode* expr, Operator op, int start, int divot, int end) 1894 1896 { 1895 1897 if (!expr->isLocation()) 1896 return new ( GLOBAL_DATA) PostfixErrorNode(GLOBAL_DATA, expr, op, divot, divot - start, end - divot);1898 return new (globalData) PostfixErrorNode(globalData, expr, op, divot, divot - start, end - divot); 1897 1899 1898 1900 if (expr->isResolveNode()) { 1899 1901 ResolveNode* resolve = static_cast<ResolveNode*>(expr); 1900 return new ( GLOBAL_DATA) PostfixResolveNode(GLOBAL_DATA, resolve->identifier(), op, divot, divot - start, end - divot);1902 return new (globalData) PostfixResolveNode(globalData, resolve->identifier(), op, divot, divot - start, end - divot); 1901 1903 } 1902 1904 if (expr->isBracketAccessorNode()) { 1903 1905 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(expr); 1904 PostfixBracketNode* node = new ( GLOBAL_DATA) PostfixBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), op, divot, divot - start, end - divot);1906 PostfixBracketNode* node = new (globalData) PostfixBracketNode(globalData, bracket->base(), bracket->subscript(), op, divot, divot - start, end - divot); 1905 1907 node->setSubexpressionInfo(bracket->divot(), bracket->endOffset()); 1906 1908 return node; … … 1909 1911 ASSERT(expr->isDotAccessorNode()); 1910 1912 DotAccessorNode* dot = static_cast<DotAccessorNode*>(expr); 1911 PostfixDotNode* node = new ( GLOBAL_DATA) PostfixDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), op, divot, divot - start, end - divot);1913 PostfixDotNode* node = new (globalData) PostfixDotNode(globalData, dot->base(), dot->identifier(), op, divot, divot - start, end - divot); 1912 1914 node->setSubexpressionInfo(dot->divot(), dot->endOffset()); 1913 1915 return node; 1914 1916 } 1915 1917 1916 static ExpressionNodeInfo makeFunctionCallNode( void* globalPtr, ExpressionNodeInfo func, ArgumentsNodeInfo args, int start, int divot, int end)1918 static ExpressionNodeInfo makeFunctionCallNode(JSGlobalData* globalData, ExpressionNodeInfo func, ArgumentsNodeInfo args, int start, int divot, int end) 1917 1919 { 1918 1920 CodeFeatures features = func.m_features | args.m_features; 1919 1921 int numConstants = func.m_numConstants + args.m_numConstants; 1920 1922 if (!func.m_node->isLocation()) 1921 return createNodeInfo<ExpressionNode*>(new ( GLOBAL_DATA) FunctionCallValueNode(GLOBAL_DATA, func.m_node, args.m_node, divot, divot - start, end - divot), features, numConstants);1923 return createNodeInfo<ExpressionNode*>(new (globalData) FunctionCallValueNode(globalData, func.m_node, args.m_node, divot, divot - start, end - divot), features, numConstants); 1922 1924 if (func.m_node->isResolveNode()) { 1923 1925 ResolveNode* resolve = static_cast<ResolveNode*>(func.m_node); 1924 1926 const Identifier& identifier = resolve->identifier(); 1925 if (identifier == GLOBAL_DATA->propertyNames->eval)1926 return createNodeInfo<ExpressionNode*>(new ( GLOBAL_DATA) EvalFunctionCallNode(GLOBAL_DATA, args.m_node, divot, divot - start, end - divot), EvalFeature | features, numConstants);1927 return createNodeInfo<ExpressionNode*>(new ( GLOBAL_DATA) FunctionCallResolveNode(GLOBAL_DATA, identifier, args.m_node, divot, divot - start, end - divot), features, numConstants);1927 if (identifier == globalData->propertyNames->eval) 1928 return createNodeInfo<ExpressionNode*>(new (globalData) EvalFunctionCallNode(globalData, args.m_node, divot, divot - start, end - divot), EvalFeature | features, numConstants); 1929 return createNodeInfo<ExpressionNode*>(new (globalData) FunctionCallResolveNode(globalData, identifier, args.m_node, divot, divot - start, end - divot), features, numConstants); 1928 1930 } 1929 1931 if (func.m_node->isBracketAccessorNode()) { 1930 1932 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(func.m_node); 1931 FunctionCallBracketNode* node = new ( GLOBAL_DATA) FunctionCallBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), args.m_node, divot, divot - start, end - divot);1933 FunctionCallBracketNode* node = new (globalData) FunctionCallBracketNode(globalData, bracket->base(), bracket->subscript(), args.m_node, divot, divot - start, end - divot); 1932 1934 node->setSubexpressionInfo(bracket->divot(), bracket->endOffset()); 1933 1935 return createNodeInfo<ExpressionNode*>(node, features, numConstants); … … 1936 1938 DotAccessorNode* dot = static_cast<DotAccessorNode*>(func.m_node); 1937 1939 FunctionCallDotNode* node; 1938 if (dot->identifier() == GLOBAL_DATA->propertyNames->call)1939 node = new ( GLOBAL_DATA) CallFunctionCallDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), args.m_node, divot, divot - start, end - divot);1940 else if (dot->identifier() == GLOBAL_DATA->propertyNames->apply)1941 node = new ( GLOBAL_DATA) ApplyFunctionCallDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), args.m_node, divot, divot - start, end - divot);1940 if (dot->identifier() == globalData->propertyNames->call) 1941 node = new (globalData) CallFunctionCallDotNode(globalData, dot->base(), dot->identifier(), args.m_node, divot, divot - start, end - divot); 1942 else if (dot->identifier() == globalData->propertyNames->apply) 1943 node = new (globalData) ApplyFunctionCallDotNode(globalData, dot->base(), dot->identifier(), args.m_node, divot, divot - start, end - divot); 1942 1944 else 1943 node = new ( GLOBAL_DATA) FunctionCallDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), args.m_node, divot, divot - start, end - divot);1945 node = new (globalData) FunctionCallDotNode(globalData, dot->base(), dot->identifier(), args.m_node, divot, divot - start, end - divot); 1944 1946 node->setSubexpressionInfo(dot->divot(), dot->endOffset()); 1945 1947 return createNodeInfo<ExpressionNode*>(node, features, numConstants); 1946 1948 } 1947 1949 1948 static ExpressionNode* makeTypeOfNode( void* globalPtr, ExpressionNode* expr)1950 static ExpressionNode* makeTypeOfNode(JSGlobalData* globalData, ExpressionNode* expr) 1949 1951 { 1950 1952 if (expr->isResolveNode()) { 1951 1953 ResolveNode* resolve = static_cast<ResolveNode*>(expr); 1952 return new ( GLOBAL_DATA) TypeOfResolveNode(GLOBAL_DATA, resolve->identifier());1954 return new (globalData) TypeOfResolveNode(globalData, resolve->identifier()); 1953 1955 } 1954 return new ( GLOBAL_DATA) TypeOfValueNode(GLOBAL_DATA, expr);1955 } 1956 1957 static ExpressionNode* makeDeleteNode( void* globalPtr, ExpressionNode* expr, int start, int divot, int end)1956 return new (globalData) TypeOfValueNode(globalData, expr); 1957 } 1958 1959 static ExpressionNode* makeDeleteNode(JSGlobalData* globalData, ExpressionNode* expr, int start, int divot, int end) 1958 1960 { 1959 1961 if (!expr->isLocation()) 1960 return new ( GLOBAL_DATA) DeleteValueNode(GLOBAL_DATA, expr);1962 return new (globalData) DeleteValueNode(globalData, expr); 1961 1963 if (expr->isResolveNode()) { 1962 1964 ResolveNode* resolve = static_cast<ResolveNode*>(expr); 1963 return new ( GLOBAL_DATA) DeleteResolveNode(GLOBAL_DATA, resolve->identifier(), divot, divot - start, end - divot);1965 return new (globalData) DeleteResolveNode(globalData, resolve->identifier(), divot, divot - start, end - divot); 1964 1966 } 1965 1967 if (expr->isBracketAccessorNode()) { 1966 1968 BracketAccessorNode* bracket = static_cast<BracketAccessorNode*>(expr); 1967 return new ( GLOBAL_DATA) DeleteBracketNode(GLOBAL_DATA, bracket->base(), bracket->subscript(), divot, divot - start, end - divot);1969 return new (globalData) DeleteBracketNode(globalData, bracket->base(), bracket->subscript(), divot, divot - start, end - divot); 1968 1970 } 1969 1971 ASSERT(expr->isDotAccessorNode()); 1970 1972 DotAccessorNode* dot = static_cast<DotAccessorNode*>(expr); 1971 return new ( GLOBAL_DATA) DeleteDotNode(GLOBAL_DATA, dot->base(), dot->identifier(), divot, divot - start, end - divot);1972 } 1973 1974 static PropertyNode* makeGetterOrSetterPropertyNode( void* globalPtr, const Identifier& getOrSet, const Identifier& name, ParameterNode* params, FunctionBodyNode* body, const SourceCode& source)1973 return new (globalData) DeleteDotNode(globalData, dot->base(), dot->identifier(), divot, divot - start, end - divot); 1974 } 1975 1976 static PropertyNode* makeGetterOrSetterPropertyNode(JSGlobalData* globalData, const Identifier& getOrSet, const Identifier& name, ParameterNode* params, FunctionBodyNode* body, const SourceCode& source) 1975 1977 { 1976 1978 PropertyNode::Type type; … … 1981 1983 else 1982 1984 return 0; 1983 return new ( GLOBAL_DATA) PropertyNode(GLOBAL_DATA, name, new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, body, source, params), type);1984 } 1985 1986 static ExpressionNode* makeNegateNode( void* globalPtr, ExpressionNode* n)1985 return new (globalData) PropertyNode(globalData, name, new (globalData) FuncExprNode(globalData, globalData->propertyNames->nullIdentifier, body, source, params), type); 1986 } 1987 1988 static ExpressionNode* makeNegateNode(JSGlobalData* globalData, ExpressionNode* n) 1987 1989 { 1988 1990 if (n->isNumber()) { … … 1995 1997 } 1996 1998 1997 return new ( GLOBAL_DATA) NegateNode(GLOBAL_DATA, n);1998 } 1999 2000 static NumberNode* makeNumberNode( void* globalPtr, double d)2001 { 2002 return new ( GLOBAL_DATA) NumberNode(GLOBAL_DATA, d);2003 } 2004 2005 static ExpressionNode* makeBitwiseNotNode( void* globalPtr, ExpressionNode* expr)1999 return new (globalData) NegateNode(globalData, n); 2000 } 2001 2002 static NumberNode* makeNumberNode(JSGlobalData* globalData, double d) 2003 { 2004 return new (globalData) NumberNode(globalData, d); 2005 } 2006 2007 static ExpressionNode* makeBitwiseNotNode(JSGlobalData* globalData, ExpressionNode* expr) 2006 2008 { 2007 2009 if (expr->isNumber()) 2008 return makeNumberNode(global Ptr, ~toInt32(static_cast<NumberNode*>(expr)->value()));2009 return new ( GLOBAL_DATA) BitwiseNotNode(GLOBAL_DATA, expr);2010 } 2011 2012 static ExpressionNode* makeMultNode( void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)2010 return makeNumberNode(globalData, ~toInt32(static_cast<NumberNode*>(expr)->value())); 2011 return new (globalData) BitwiseNotNode(globalData, expr); 2012 } 2013 2014 static ExpressionNode* makeMultNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 2013 2015 { 2014 2016 expr1 = expr1->stripUnaryPlus(); … … 2016 2018 2017 2019 if (expr1->isNumber() && expr2->isNumber()) 2018 return makeNumberNode(global Ptr, static_cast<NumberNode*>(expr1)->value() * static_cast<NumberNode*>(expr2)->value());2020 return makeNumberNode(globalData, static_cast<NumberNode*>(expr1)->value() * static_cast<NumberNode*>(expr2)->value()); 2019 2021 2020 2022 if (expr1->isNumber() && static_cast<NumberNode*>(expr1)->value() == 1) 2021 return new ( GLOBAL_DATA) UnaryPlusNode(GLOBAL_DATA, expr2);2023 return new (globalData) UnaryPlusNode(globalData, expr2); 2022 2024 2023 2025 if (expr2->isNumber() && static_cast<NumberNode*>(expr2)->value() == 1) 2024 return new ( GLOBAL_DATA) UnaryPlusNode(GLOBAL_DATA, expr1);2025 2026 return new ( GLOBAL_DATA) MultNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments);2027 } 2028 2029 static ExpressionNode* makeDivNode( void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)2026 return new (globalData) UnaryPlusNode(globalData, expr1); 2027 2028 return new (globalData) MultNode(globalData, expr1, expr2, rightHasAssignments); 2029 } 2030 2031 static ExpressionNode* makeDivNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 2030 2032 { 2031 2033 expr1 = expr1->stripUnaryPlus(); … … 2033 2035 2034 2036 if (expr1->isNumber() && expr2->isNumber()) 2035 return makeNumberNode(global Ptr, static_cast<NumberNode*>(expr1)->value() / static_cast<NumberNode*>(expr2)->value());2036 return new ( GLOBAL_DATA) DivNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments);2037 } 2038 2039 static ExpressionNode* makeAddNode( void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)2037 return makeNumberNode(globalData, static_cast<NumberNode*>(expr1)->value() / static_cast<NumberNode*>(expr2)->value()); 2038 return new (globalData) DivNode(globalData, expr1, expr2, rightHasAssignments); 2039 } 2040 2041 static ExpressionNode* makeAddNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 2040 2042 { 2041 2043 if (expr1->isNumber() && expr2->isNumber()) 2042 return makeNumberNode(global Ptr, static_cast<NumberNode*>(expr1)->value() + static_cast<NumberNode*>(expr2)->value());2043 return new ( GLOBAL_DATA) AddNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments);2044 } 2045 2046 static ExpressionNode* makeSubNode( void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)2044 return makeNumberNode(globalData, static_cast<NumberNode*>(expr1)->value() + static_cast<NumberNode*>(expr2)->value()); 2045 return new (globalData) AddNode(globalData, expr1, expr2, rightHasAssignments); 2046 } 2047 2048 static ExpressionNode* makeSubNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 2047 2049 { 2048 2050 expr1 = expr1->stripUnaryPlus(); … … 2050 2052 2051 2053 if (expr1->isNumber() && expr2->isNumber()) 2052 return makeNumberNode(global Ptr, static_cast<NumberNode*>(expr1)->value() - static_cast<NumberNode*>(expr2)->value());2053 return new ( GLOBAL_DATA) SubNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments);2054 } 2055 2056 static ExpressionNode* makeLeftShiftNode( void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)2054 return makeNumberNode(globalData, static_cast<NumberNode*>(expr1)->value() - static_cast<NumberNode*>(expr2)->value()); 2055 return new (globalData) SubNode(globalData, expr1, expr2, rightHasAssignments); 2056 } 2057 2058 static ExpressionNode* makeLeftShiftNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 2057 2059 { 2058 2060 if (expr1->isNumber() && expr2->isNumber()) 2059 return makeNumberNode(global Ptr, toInt32(static_cast<NumberNode*>(expr1)->value()) << (toUInt32(static_cast<NumberNode*>(expr2)->value()) & 0x1f));2060 return new ( GLOBAL_DATA) LeftShiftNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments);2061 } 2062 2063 static ExpressionNode* makeRightShiftNode( void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments)2061 return makeNumberNode(globalData, toInt32(static_cast<NumberNode*>(expr1)->value()) << (toUInt32(static_cast<NumberNode*>(expr2)->value()) & 0x1f)); 2062 return new (globalData) LeftShiftNode(globalData, expr1, expr2, rightHasAssignments); 2063 } 2064 2065 static ExpressionNode* makeRightShiftNode(JSGlobalData* globalData, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 2064 2066 { 2065 2067 if (expr1->isNumber() && expr2->isNumber()) 2066 return makeNumberNode(global Ptr, toInt32(static_cast<NumberNode*>(expr1)->value()) >> (toUInt32(static_cast<NumberNode*>(expr2)->value()) & 0x1f));2067 return new ( GLOBAL_DATA) RightShiftNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments);2068 return makeNumberNode(globalData, toInt32(static_cast<NumberNode*>(expr1)->value()) >> (toUInt32(static_cast<NumberNode*>(expr2)->value()) & 0x1f)); 2069 return new (globalData) RightShiftNode(globalData, expr1, expr2, rightHasAssignments); 2068 2070 } 2069 2071 2070 2072 // Called by yyparse on error. 2071 int yyerror(const char 2073 int yyerror(const char*) 2072 2074 { 2073 2075 return 1; … … 2080 2082 } 2081 2083 2082 static ExpressionNode* combineCommaNodes( void* globalPtr, ExpressionNode* list, ExpressionNode* init)2084 static ExpressionNode* combineCommaNodes(JSGlobalData* globalData, ExpressionNode* list, ExpressionNode* init) 2083 2085 { 2084 2086 if (!list) … … 2088 2090 return list; 2089 2091 } 2090 return new ( GLOBAL_DATA) CommaNode(GLOBAL_DATA, list, init);2092 return new (globalData) CommaNode(globalData, list, init); 2091 2093 } 2092 2094 … … 2094 2096 // statements (which later get stripped out), because the actual 2095 2097 // declaration work is hoisted up to the start of the function body 2096 static StatementNode* makeVarStatementNode( void* globalPtr, ExpressionNode* expr)2098 static StatementNode* makeVarStatementNode(JSGlobalData* globalData, ExpressionNode* expr) 2097 2099 { 2098 2100 if (!expr) 2099 return new (GLOBAL_DATA) EmptyStatementNode(GLOBAL_DATA); 2100 return new (GLOBAL_DATA) VarStatementNode(GLOBAL_DATA, expr); 2101 } 2102 2103 #undef GLOBAL_DATA 2101 return new (globalData) EmptyStatementNode(globalData); 2102 return new (globalData) VarStatementNode(globalData, expr); 2103 }
Note:
See TracChangeset
for help on using the changeset viewer.