Changeset 27749 in webkit for trunk/JavaScriptCore
- Timestamp:
- Nov 13, 2007, 12:34:25 AM (18 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r27748 r27749 1 2007-11-13 Eric Seidel <[email protected]> 2 3 Reviewed by Maciej. 4 5 Clean up evaluateToBoolean functions to use inlines instead of copy/paste code 6 7 * kjs/JSImmediate.h: 8 * kjs/nodes.cpp: 9 (KJS::GreaterNode::inlineEvaluateToBoolean): 10 (KJS::GreaterNode::evaluate): 11 (KJS::LessEqNode::inlineEvaluateToBoolean): 12 (KJS::LessEqNode::evaluate): 13 (KJS::GreaterEqNode::inlineEvaluateToBoolean): 14 (KJS::GreaterEqNode::evaluate): 15 (KJS::InNode::evaluateToBoolean): 16 (KJS::EqualNode::inlineEvaluateToBoolean): 17 (KJS::EqualNode::evaluate): 18 (KJS::NotEqualNode::inlineEvaluateToBoolean): 19 (KJS::NotEqualNode::evaluate): 20 (KJS::StrictEqualNode::inlineEvaluateToBoolean): 21 (KJS::StrictEqualNode::evaluate): 22 (KJS::NotStrictEqualNode::inlineEvaluateToBoolean): 23 (KJS::NotStrictEqualNode::evaluate): 24 * kjs/nodes.h: 25 1 26 2007-11-12 Geoffrey Garen <[email protected]> 2 27 -
trunk/JavaScriptCore/kjs/JSImmediate.h
r27747 r27749 243 243 ALWAYS_INLINE int32_t JSImmediate::getTruncatedInt32(const JSValue* v) 244 244 { 245 ASSERT(isNumber(v)); 245 246 return static_cast<int32_t>(unTag(v)) >> 2; 246 247 } -
trunk/JavaScriptCore/kjs/nodes.cpp
r27747 r27749 2602 2602 2603 2603 // ECMA 11.8.2 2604 JSValue* GreaterNode::evaluate(ExecState* exec) 2605 { 2606 JSValue* v1 = expr1->evaluate(exec); 2607 KJS_CHECKEXCEPTIONVALUE 2608 JSValue* v2 = expr2->evaluate(exec); 2609 KJS_CHECKEXCEPTIONVALUE 2610 return jsBoolean(lessThan(exec, v2, v1)); 2611 } 2612 2613 bool GreaterNode::evaluateToBoolean(ExecState *exec) 2604 bool GreaterNode::inlineEvaluateToBoolean(ExecState *exec) 2614 2605 { 2615 2606 JSValue* v1 = expr1->evaluate(exec); … … 2620 2611 } 2621 2612 2613 JSValue* GreaterNode::evaluate(ExecState* exec) 2614 { 2615 return jsBoolean(inlineEvaluateToBoolean(exec)); 2616 } 2617 2618 bool GreaterNode::evaluateToBoolean(ExecState *exec) 2619 { 2620 return inlineEvaluateToBoolean(exec); 2621 } 2622 2622 2623 void LessEqNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack) 2623 2624 { … … 2627 2628 2628 2629 // ECMA 11.8.3 2629 JSValue* LessEqNode::evaluate(ExecState* exec) 2630 { 2631 JSValue* v1 = expr1->evaluate(exec); 2632 KJS_CHECKEXCEPTIONVALUE 2633 JSValue* v2 = expr2->evaluate(exec); 2634 KJS_CHECKEXCEPTIONVALUE 2635 return jsBoolean(lessThanEq(exec, v1, v2)); 2636 } 2637 2638 bool LessEqNode::evaluateToBoolean(ExecState* exec) 2630 bool LessEqNode::inlineEvaluateToBoolean(ExecState* exec) 2639 2631 { 2640 2632 JSValue* v1 = expr1->evaluate(exec); … … 2645 2637 } 2646 2638 2639 JSValue* LessEqNode::evaluate(ExecState* exec) 2640 { 2641 return jsBoolean(inlineEvaluateToBoolean(exec)); 2642 } 2643 2644 bool LessEqNode::evaluateToBoolean(ExecState* exec) 2645 { 2646 return inlineEvaluateToBoolean(exec); 2647 } 2648 2647 2649 void GreaterEqNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack) 2648 2650 { … … 2652 2654 2653 2655 // ECMA 11.8.4 2654 JSValue* GreaterEqNode::evaluate(ExecState* exec) 2655 { 2656 JSValue* v1 = expr1->evaluate(exec); 2657 KJS_CHECKEXCEPTIONVALUE 2658 JSValue* v2 = expr2->evaluate(exec); 2659 KJS_CHECKEXCEPTIONVALUE 2660 return jsBoolean(lessThanEq(exec, v2, v1)); 2661 } 2662 2663 bool GreaterEqNode::evaluateToBoolean(ExecState* exec) 2656 bool GreaterEqNode::inlineEvaluateToBoolean(ExecState* exec) 2664 2657 { 2665 2658 JSValue* v1 = expr1->evaluate(exec); … … 2668 2661 KJS_CHECKEXCEPTIONBOOLEAN 2669 2662 return lessThanEq(exec, v2, v1); 2663 } 2664 2665 JSValue* GreaterEqNode::evaluate(ExecState* exec) 2666 { 2667 return jsBoolean(inlineEvaluateToBoolean(exec)); 2668 } 2669 2670 bool GreaterEqNode::evaluateToBoolean(ExecState* exec) 2671 { 2672 return inlineEvaluateToBoolean(exec); 2670 2673 } 2671 2674 … … 2750 2753 KJS_CHECKEXCEPTIONBOOLEAN 2751 2754 2752 if (!v2->isObject()) 2753 return throwError(exec, TypeError, "Value %s (result of expression %s) is not an object. Cannot be used with 'in' operator.", v2, expr2.get()); 2755 if (!v2->isObject()) { 2756 throwError(exec, TypeError, "Value %s (result of expression %s) is not an object. Cannot be used with 'in' operator.", v2, expr2.get()); 2757 return false; 2758 } 2754 2759 2755 2760 return static_cast<JSObject*>(v2)->hasProperty(exec, Identifier(v1->toString(exec))); … … 2765 2770 2766 2771 // ECMA 11.9.1 2767 JSValue* EqualNode::evaluate(ExecState* exec) 2768 { 2769 JSValue* v1 = expr1->evaluate(exec); 2770 KJS_CHECKEXCEPTIONVALUE 2771 JSValue* v2 = expr2->evaluate(exec); 2772 KJS_CHECKEXCEPTIONVALUE 2773 2774 return jsBoolean(equal(exec, v1, v2)); 2775 } 2776 2777 bool EqualNode::evaluateToBoolean(ExecState* exec) 2772 bool EqualNode::inlineEvaluateToBoolean(ExecState* exec) 2778 2773 { 2779 2774 JSValue* v1 = expr1->evaluate(exec); … … 2781 2776 JSValue* v2 = expr2->evaluate(exec); 2782 2777 KJS_CHECKEXCEPTIONBOOLEAN 2783 2778 2784 2779 return equal(exec, v1, v2); 2780 } 2781 2782 JSValue* EqualNode::evaluate(ExecState* exec) 2783 { 2784 return jsBoolean(inlineEvaluateToBoolean(exec)); 2785 } 2786 2787 bool EqualNode::evaluateToBoolean(ExecState* exec) 2788 { 2789 return inlineEvaluateToBoolean(exec); 2785 2790 } 2786 2791 … … 2792 2797 2793 2798 // ECMA 11.9.2 2794 JSValue* NotEqualNode::evaluate(ExecState* exec) 2795 { 2796 JSValue* v1 = expr1->evaluate(exec); 2797 KJS_CHECKEXCEPTIONVALUE 2798 JSValue* v2 = expr2->evaluate(exec); 2799 KJS_CHECKEXCEPTIONVALUE 2800 2801 return jsBoolean(!equal(exec,v1, v2)); 2802 } 2803 2804 bool NotEqualNode::evaluateToBoolean(ExecState* exec) 2799 bool NotEqualNode::inlineEvaluateToBoolean(ExecState* exec) 2805 2800 { 2806 2801 JSValue* v1 = expr1->evaluate(exec); … … 2812 2807 } 2813 2808 2809 JSValue* NotEqualNode::evaluate(ExecState* exec) 2810 { 2811 return jsBoolean(inlineEvaluateToBoolean(exec)); 2812 } 2813 2814 bool NotEqualNode::evaluateToBoolean(ExecState* exec) 2815 { 2816 return inlineEvaluateToBoolean(exec); 2817 } 2818 2814 2819 void StrictEqualNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack) 2815 2820 { … … 2819 2824 2820 2825 // ECMA 11.9.4 2821 JSValue* StrictEqualNode::evaluate(ExecState* exec) 2822 { 2823 JSValue* v1 = expr1->evaluate(exec); 2824 KJS_CHECKEXCEPTIONVALUE 2825 JSValue* v2 = expr2->evaluate(exec); 2826 KJS_CHECKEXCEPTIONVALUE 2827 2828 return jsBoolean(strictEqual(exec,v1, v2)); 2829 } 2830 2831 bool StrictEqualNode::evaluateToBoolean(ExecState* exec) 2826 bool StrictEqualNode::inlineEvaluateToBoolean(ExecState* exec) 2832 2827 { 2833 2828 JSValue* v1 = expr1->evaluate(exec); … … 2839 2834 } 2840 2835 2836 JSValue* StrictEqualNode::evaluate(ExecState* exec) 2837 { 2838 return jsBoolean(inlineEvaluateToBoolean(exec)); 2839 } 2840 2841 bool StrictEqualNode::evaluateToBoolean(ExecState* exec) 2842 { 2843 return inlineEvaluateToBoolean(exec); 2844 } 2845 2841 2846 void NotStrictEqualNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack) 2842 2847 { … … 2846 2851 2847 2852 // ECMA 11.9.5 2848 JSValue* NotStrictEqualNode::evaluate(ExecState* exec) 2849 { 2850 JSValue* v1 = expr1->evaluate(exec); 2851 KJS_CHECKEXCEPTIONVALUE 2852 JSValue* v2 = expr2->evaluate(exec); 2853 KJS_CHECKEXCEPTIONVALUE 2854 2855 return jsBoolean(!strictEqual(exec,v1, v2)); 2856 } 2857 2858 bool NotStrictEqualNode::evaluateToBoolean(ExecState* exec) 2853 bool NotStrictEqualNode::inlineEvaluateToBoolean(ExecState* exec) 2859 2854 { 2860 2855 JSValue* v1 = expr1->evaluate(exec); … … 2864 2859 2865 2860 return !strictEqual(exec,v1, v2); 2861 } 2862 2863 JSValue* NotStrictEqualNode::evaluate(ExecState* exec) 2864 { 2865 return jsBoolean(inlineEvaluateToBoolean(exec)); 2866 } 2867 2868 bool NotStrictEqualNode::evaluateToBoolean(ExecState* exec) 2869 { 2870 return inlineEvaluateToBoolean(exec); 2866 2871 } 2867 2872 -
trunk/JavaScriptCore/kjs/nodes.h
r27747 r27749 1288 1288 virtual Precedence precedence() const { return PrecRelational; } 1289 1289 private: 1290 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1290 1291 RefPtr<ExpressionNode> expr1; 1291 1292 RefPtr<ExpressionNode> expr2; … … 1302 1303 virtual Precedence precedence() const { return PrecRelational; } 1303 1304 private: 1305 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1304 1306 RefPtr<ExpressionNode> expr1; 1305 1307 RefPtr<ExpressionNode> expr2; … … 1316 1318 virtual Precedence precedence() const { return PrecRelational; } 1317 1319 private: 1320 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1318 1321 RefPtr<ExpressionNode> expr1; 1319 1322 RefPtr<ExpressionNode> expr2; … … 1358 1361 virtual Precedence precedence() const { return PrecEquality; } 1359 1362 private: 1363 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1360 1364 RefPtr<ExpressionNode> expr1; 1361 1365 RefPtr<ExpressionNode> expr2; … … 1372 1376 virtual Precedence precedence() const { return PrecEquality; } 1373 1377 private: 1378 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1374 1379 RefPtr<ExpressionNode> expr1; 1375 1380 RefPtr<ExpressionNode> expr2; … … 1386 1391 virtual Precedence precedence() const { return PrecEquality; } 1387 1392 private: 1393 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1388 1394 RefPtr<ExpressionNode> expr1; 1389 1395 RefPtr<ExpressionNode> expr2; … … 1400 1406 virtual Precedence precedence() const { return PrecEquality; } 1401 1407 private: 1408 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1402 1409 RefPtr<ExpressionNode> expr1; 1403 1410 RefPtr<ExpressionNode> expr2; … … 1471 1478 virtual Precedence precedence() const { return PrecLogicalAnd; } 1472 1479 private: 1473 ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);1480 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1474 1481 RefPtr<ExpressionNode> expr1; 1475 1482 RefPtr<ExpressionNode> expr2; … … 1486 1493 virtual Precedence precedence() const { return PrecLogicalOr; } 1487 1494 private: 1488 ALWAYS_INLINE int32_t inlineEvaluateToInt32(ExecState*);1495 ALWAYS_INLINE bool inlineEvaluateToBoolean(ExecState*); 1489 1496 RefPtr<ExpressionNode> expr1; 1490 1497 RefPtr<ExpressionNode> expr2;
Note:
See TracChangeset
for help on using the changeset viewer.