Changeset 37405 in webkit for trunk/JavaScriptCore/kjs
- Timestamp:
- Oct 7, 2008, 8:46:34 PM (17 years ago)
- Location:
- trunk/JavaScriptCore/kjs
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/grammar.y
r37402 r37405 1425 1425 static ExpressionNode* makeMultNode(void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 1426 1426 { 1427 // these transforms are valid because unary + only does a toNumber 1428 // conversion, which * does anyway: 1429 expr1 = expr1->stripUnaryPlus(); // +FOO * BAR ==> FOO * BAR 1430 expr2 = expr2->stripUnaryPlus(); // FOO * +BAR ==> FOO * BAR 1431 1427 1432 if (expr1->isNumber() && expr2->isNumber()) 1428 1433 return makeNumberNode(globalPtr, static_cast<NumberNode*>(expr1)->value() * static_cast<NumberNode*>(expr2)->value()); 1434 1435 // these transforms are valid because multiplying by 1 has no 1436 // effect but toNumber conversion 1437 if (expr1->isNumber() && static_cast<NumberNode*>(expr1)->value() == 1) 1438 return new UnaryPlusNode(GLOBAL_DATA, expr2); // 1 * FOO ==> +FOO 1439 if (expr2->isNumber() && static_cast<NumberNode*>(expr2)->value() == 1) 1440 return new UnaryPlusNode(GLOBAL_DATA, expr1); // FOO * 1 ==> +FOO 1441 1429 1442 return new MultNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments); 1430 1443 } … … 1432 1445 static ExpressionNode* makeDivNode(void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 1433 1446 { 1447 // these transforms are valid because unary + only does a toNumber 1448 // conversion, which / does anyway: 1449 expr1 = expr1->stripUnaryPlus(); // +FOO / BAR ==> FOO / BAR 1450 expr2 = expr2->stripUnaryPlus(); // FOO / +BAR ==> FOO / BAR 1451 1434 1452 if (expr1->isNumber() && expr2->isNumber()) 1435 1453 return makeNumberNode(globalPtr, static_cast<NumberNode*>(expr1)->value() / static_cast<NumberNode*>(expr2)->value()); … … 1446 1464 static ExpressionNode* makeSubNode(void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) 1447 1465 { 1466 // these transforms are valid because unary + only does a toNumber 1467 // conversion, which - does anyway: 1468 expr1 = expr1->stripUnaryPlus(); // +FOO - BAR ==> FOO - BAR 1469 expr2 = expr2->stripUnaryPlus(); // FOO - +BAR ==> FOO - BAR 1470 1448 1471 if (expr1->isNumber() && expr2->isNumber()) 1449 1472 return makeNumberNode(globalPtr, static_cast<NumberNode*>(expr1)->value() - static_cast<NumberNode*>(expr2)->value()); -
trunk/JavaScriptCore/kjs/nodes.h
r37326 r37405 227 227 virtual bool isDotAccessorNode() const JSC_FAST_CALL { return false; } 228 228 229 virtual ExpressionNode* stripUnaryPlus() { return this; } 230 229 231 ResultType resultDescriptor() const JSC_FAST_CALL { return m_resultDesc; } 230 232 … … 1179 1181 { 1180 1182 } 1183 1184 virtual ExpressionNode* stripUnaryPlus() { return m_expr.get(); } 1181 1185 1182 1186 virtual OpcodeID opcode() const JSC_FAST_CALL { return op_to_jsnumber; }
Note:
See TracChangeset
for help on using the changeset viewer.