X-Git-Url: https://git.webkit.org/?p=WebKit.git;a=blobdiff_plain;f=JavaScriptCore%2Fkjs%2Fgrammar.y;h=d60554792b4f6383fa43014466ee1d93a350b4a8;hp=81e84b37d31277aa2f5a2a6eac52918861963753;hb=9b5c619a686f6f952b3ef5e4b3ec0cd42e029aeb;hpb=a55bd2bb4be21f2218bc63f4976691ca16ad5ec3 diff --git a/JavaScriptCore/kjs/grammar.y b/JavaScriptCore/kjs/grammar.y index 81e84b37d312..d60554792b4f 100644 --- a/JavaScriptCore/kjs/grammar.y +++ b/JavaScriptCore/kjs/grammar.y @@ -1424,13 +1424,26 @@ static ExpressionNode* makeBitwiseNotNode(void* globalPtr, ExpressionNode* expr) static ExpressionNode* makeMultNode(void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) { + expr1 = expr1->stripUnaryPlus(); + expr2 = expr2->stripUnaryPlus(); + if (expr1->isNumber() && expr2->isNumber()) return makeNumberNode(globalPtr, static_cast(expr1)->value() * static_cast(expr2)->value()); + + if (expr1->isNumber() && static_cast(expr1)->value() == 1) + return new UnaryPlusNode(GLOBAL_DATA, expr2); + + if (expr2->isNumber() && static_cast(expr2)->value() == 1) + return new UnaryPlusNode(GLOBAL_DATA, expr1); + return new MultNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments); } static ExpressionNode* makeDivNode(void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) { + expr1 = expr1->stripUnaryPlus(); + expr2 = expr2->stripUnaryPlus(); + if (expr1->isNumber() && expr2->isNumber()) return makeNumberNode(globalPtr, static_cast(expr1)->value() / static_cast(expr2)->value()); return new DivNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments); @@ -1445,6 +1458,9 @@ static ExpressionNode* makeAddNode(void* globalPtr, ExpressionNode* expr1, Expre static ExpressionNode* makeSubNode(void* globalPtr, ExpressionNode* expr1, ExpressionNode* expr2, bool rightHasAssignments) { + expr1 = expr1->stripUnaryPlus(); + expr2 = expr2->stripUnaryPlus(); + if (expr1->isNumber() && expr2->isNumber()) return makeNumberNode(globalPtr, static_cast(expr1)->value() - static_cast(expr2)->value()); return new SubNode(GLOBAL_DATA, expr1, expr2, rightHasAssignments);