Changeset 175724 in webkit
- Timestamp:
- Nov 6, 2014 4:18:23 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r175722 r175724 1 2014-11-06 Mark Lam <mark.lam@apple.com> 2 3 slow_path_get_direct_pname() needs to be hardened against a constant baseValue. 4 <https://webkit.org/b/138476> 5 6 Reviewed by Michael Saboff. 7 8 * js/get-by-pname-expected.txt: 9 * js/script-tests/get-by-pname.js: 10 (getByPnameOnConstant): 11 (getByPnameOnVar): 12 - Added more test cases. 13 1 14 2014-11-06 Mark Lam <mark.lam@apple.com> 2 15 -
trunk/LayoutTests/js/get-by-pname-expected.txt
r175722 r175724 10 10 PASS foo(r) is 113 11 11 PASS foo(s) is 182 12 PASS getByPnameOnConstant(a) is 0 13 PASS getByPnameOnVar(a, 100) is 0 14 PASS getByPnameOnVar(a, 'abc') is '0abc' 15 PASS getByPnameOnVar(a, o) is 0 16 PASS getByPnameOnVar(a, o1) is 4 17 PASS getByPnameOnVar(a, a) is 6 18 PASS getByPnameOnConstant(o1) is 0 19 PASS getByPnameOnVar(o1, 100) is 0 20 PASS getByPnameOnVar(o1, 'abc') is '0bc0' 21 PASS getByPnameOnVar(o1, o) is 0 22 PASS getByPnameOnVar(o1, o1) is 11 23 PASS getByPnameOnVar(o1, a) is 5 24 PASS getByPnameOnConstant(o) is 0 25 PASS getByPnameOnVar(o, 100) is 0 26 PASS getByPnameOnVar(o, 'abc') is 0 27 PASS getByPnameOnVar(o, o) is 11 28 PASS getByPnameOnVar(o, o1) is 0 29 PASS getByPnameOnVar(o, a) is 0 30 PASS getByPnameOnConstant(0) is 0 31 PASS getByPnameOnVar(0, 100) is 0 32 PASS getByPnameOnVar(0, 'abc') is 0 33 PASS getByPnameOnVar(0, o) is 0 34 PASS getByPnameOnVar(0, o1) is 0 35 PASS getByPnameOnVar(0, a) is 0 36 PASS getByPnameOnConstant('abc') is 0 37 PASS getByPnameOnVar('abc', 100) is 0 38 PASS getByPnameOnVar('abc', 'abc') is '0abc' 39 PASS getByPnameOnVar('abc', o) is 0 40 PASS getByPnameOnVar('abc', o1) is 4 41 PASS getByPnameOnVar('abc', a) is 6 42 PASS getByPnameOnVar('def', 'abc') is '0abc' 12 43 13 44 Test tier: llint … … 17 48 PASS foo(r) is 113 18 49 PASS foo(s) is 182 50 PASS getByPnameOnConstant(a) is 0 51 PASS getByPnameOnVar(a, 100) is 0 52 PASS getByPnameOnVar(a, 'abc') is '0abc' 53 PASS getByPnameOnVar(a, o) is 0 54 PASS getByPnameOnVar(a, o1) is 4 55 PASS getByPnameOnVar(a, a) is 6 56 PASS getByPnameOnConstant(o1) is 0 57 PASS getByPnameOnVar(o1, 100) is 0 58 PASS getByPnameOnVar(o1, 'abc') is '0bc0' 59 PASS getByPnameOnVar(o1, o) is 0 60 PASS getByPnameOnVar(o1, o1) is 11 61 PASS getByPnameOnVar(o1, a) is 5 62 PASS getByPnameOnConstant(o) is 0 63 PASS getByPnameOnVar(o, 100) is 0 64 PASS getByPnameOnVar(o, 'abc') is 0 65 PASS getByPnameOnVar(o, o) is 11 66 PASS getByPnameOnVar(o, o1) is 0 67 PASS getByPnameOnVar(o, a) is 0 68 PASS getByPnameOnConstant(0) is 0 69 PASS getByPnameOnVar(0, 100) is 0 70 PASS getByPnameOnVar(0, 'abc') is 0 71 PASS getByPnameOnVar(0, o) is 0 72 PASS getByPnameOnVar(0, o1) is 0 73 PASS getByPnameOnVar(0, a) is 0 74 PASS getByPnameOnConstant('abc') is 0 75 PASS getByPnameOnVar('abc', 100) is 0 76 PASS getByPnameOnVar('abc', 'abc') is '0abc' 77 PASS getByPnameOnVar('abc', o) is 0 78 PASS getByPnameOnVar('abc', o1) is 4 79 PASS getByPnameOnVar('abc', a) is 6 80 PASS getByPnameOnVar('def', 'abc') is '0abc' 19 81 20 82 Test tier: baseline … … 24 86 PASS foo(r) is 113 25 87 PASS foo(s) is 182 88 PASS getByPnameOnConstant(a) is 0 89 PASS getByPnameOnVar(a, 100) is 0 90 PASS getByPnameOnVar(a, 'abc') is '0abc' 91 PASS getByPnameOnVar(a, o) is 0 92 PASS getByPnameOnVar(a, o1) is 4 93 PASS getByPnameOnVar(a, a) is 6 94 PASS getByPnameOnConstant(o1) is 0 95 PASS getByPnameOnVar(o1, 100) is 0 96 PASS getByPnameOnVar(o1, 'abc') is '0bc0' 97 PASS getByPnameOnVar(o1, o) is 0 98 PASS getByPnameOnVar(o1, o1) is 11 99 PASS getByPnameOnVar(o1, a) is 5 100 PASS getByPnameOnConstant(o) is 0 101 PASS getByPnameOnVar(o, 100) is 0 102 PASS getByPnameOnVar(o, 'abc') is 0 103 PASS getByPnameOnVar(o, o) is 11 104 PASS getByPnameOnVar(o, o1) is 0 105 PASS getByPnameOnVar(o, a) is 0 106 PASS getByPnameOnConstant(0) is 0 107 PASS getByPnameOnVar(0, 100) is 0 108 PASS getByPnameOnVar(0, 'abc') is 0 109 PASS getByPnameOnVar(0, o) is 0 110 PASS getByPnameOnVar(0, o1) is 0 111 PASS getByPnameOnVar(0, a) is 0 112 PASS getByPnameOnConstant('abc') is 0 113 PASS getByPnameOnVar('abc', 100) is 0 114 PASS getByPnameOnVar('abc', 'abc') is '0abc' 115 PASS getByPnameOnVar('abc', o) is 0 116 PASS getByPnameOnVar('abc', o1) is 4 117 PASS getByPnameOnVar('abc', a) is 6 118 PASS getByPnameOnVar('def', 'abc') is '0abc' 26 119 27 120 Test tier: dfg … … 31 124 PASS foo(r) is 113 32 125 PASS foo(s) is 182 126 PASS getByPnameOnConstant(a) is 0 127 PASS getByPnameOnVar(a, 100) is 0 128 PASS getByPnameOnVar(a, 'abc') is '0abc' 129 PASS getByPnameOnVar(a, o) is 0 130 PASS getByPnameOnVar(a, o1) is 4 131 PASS getByPnameOnVar(a, a) is 6 132 PASS getByPnameOnConstant(o1) is 0 133 PASS getByPnameOnVar(o1, 100) is 0 134 PASS getByPnameOnVar(o1, 'abc') is '0bc0' 135 PASS getByPnameOnVar(o1, o) is 0 136 PASS getByPnameOnVar(o1, o1) is 11 137 PASS getByPnameOnVar(o1, a) is 5 138 PASS getByPnameOnConstant(o) is 0 139 PASS getByPnameOnVar(o, 100) is 0 140 PASS getByPnameOnVar(o, 'abc') is 0 141 PASS getByPnameOnVar(o, o) is 11 142 PASS getByPnameOnVar(o, o1) is 0 143 PASS getByPnameOnVar(o, a) is 0 144 PASS getByPnameOnConstant(0) is 0 145 PASS getByPnameOnVar(0, 100) is 0 146 PASS getByPnameOnVar(0, 'abc') is 0 147 PASS getByPnameOnVar(0, o) is 0 148 PASS getByPnameOnVar(0, o1) is 0 149 PASS getByPnameOnVar(0, a) is 0 150 PASS getByPnameOnConstant('abc') is 0 151 PASS getByPnameOnVar('abc', 100) is 0 152 PASS getByPnameOnVar('abc', 'abc') is '0abc' 153 PASS getByPnameOnVar('abc', o) is 0 154 PASS getByPnameOnVar('abc', o1) is 4 155 PASS getByPnameOnVar('abc', a) is 6 156 PASS getByPnameOnVar('def', 'abc') is '0abc' 33 157 34 158 PASS successfullyParsed is true -
trunk/LayoutTests/js/script-tests/get-by-pname.js
r175722 r175724 10 10 } 11 11 12 function getByPnameOnConstant(o) { 13 var result = 0; 14 for (var n in o) 15 result += 0[n] ? 0[n] : 0; 16 return result; 17 } 18 19 function getByPnameOnVar(o, v) { 20 var result = 0; 21 for (var n in o) 22 result += v[n] ? v[n] : 0; 23 return result; 24 } 25 12 26 var o = {a:1, b:3, c:7}; 13 27 var p = {a:1, b:2, c:3, d:4}; … … 15 29 var r = {a:1, b:2, c:3, d:4, e:91, f:12}; 16 30 var s = {a:1, b:2, c:3, d:4, e:91, f:12, g:69}; 31 32 var a = [1, 2, 3]; 33 var o1 = {"1":1, "2":3, "3":7}; 17 34 18 35 var testCases = [ … … 22 39 [ "foo(r)", "113" ], 23 40 [ "foo(s)", "182" ], 41 42 [ "getByPnameOnConstant(a)", "0" ], 43 [ "getByPnameOnVar(a, 100)", "0" ], 44 [ "getByPnameOnVar(a, 'abc')", "'0abc'" ], 45 [ "getByPnameOnVar(a, o)", "0" ], 46 [ "getByPnameOnVar(a, o1)", "4" ], 47 [ "getByPnameOnVar(a, a)", "6" ], 48 49 [ "getByPnameOnConstant(o1)", "0" ], 50 [ "getByPnameOnVar(o1, 100)", "0" ], 51 [ "getByPnameOnVar(o1, 'abc')", "'0bc0'" ], 52 [ "getByPnameOnVar(o1, o)", "0" ], 53 [ "getByPnameOnVar(o1, o1)", "11" ], 54 [ "getByPnameOnVar(o1, a)", "5" ], 55 56 [ "getByPnameOnConstant(o)", "0" ], 57 [ "getByPnameOnVar(o, 100)", "0" ], 58 [ "getByPnameOnVar(o, 'abc')", "0" ], 59 [ "getByPnameOnVar(o, o)", "11" ], 60 [ "getByPnameOnVar(o, o1)", "0" ], 61 [ "getByPnameOnVar(o, a)", "0" ], 62 63 [ "getByPnameOnConstant(0)", "0" ], 64 [ "getByPnameOnVar(0, 100)", "0" ], 65 [ "getByPnameOnVar(0, 'abc')", "0" ], 66 [ "getByPnameOnVar(0, o)", "0" ], 67 [ "getByPnameOnVar(0, o1)", "0" ], 68 [ "getByPnameOnVar(0, a)", "0" ], 69 70 [ "getByPnameOnConstant('abc')", "0" ], 71 [ "getByPnameOnVar('abc', 100)", "0" ], 72 [ "getByPnameOnVar('abc', 'abc')", "'0abc'" ], 73 [ "getByPnameOnVar('abc', o)", "0" ], 74 [ "getByPnameOnVar('abc', o1)", "4" ], 75 [ "getByPnameOnVar('abc', a)", "6" ], 76 [ "getByPnameOnVar('def', 'abc')", "'0abc'" ], 24 77 ]; 25 78 -
trunk/Source/JavaScriptCore/ChangeLog
r175706 r175724 1 2014-11-06 Mark Lam <mark.lam@apple.com> 2 3 slow_path_get_direct_pname() needs to be hardened against a constant baseValue. 4 <https://webkit.org/b/138476> 5 6 Reviewed by Michael Saboff. 7 8 slow_path_get_direct_pname() currently assumes that the baseValue is always a 9 non-constant virtual register. However, this is not always the case like in the 10 following: 11 12 function foo() { 13 var o = { a:1 }; 14 for (var n in o) 15 0[n]; 16 } 17 foo(); 18 19 This patch fixes it to also check for constant virtual register indexes. 20 21 * runtime/CommonSlowPaths.cpp: 22 (JSC::SLOW_PATH_DECL): 23 1 24 2014-11-06 Michael Saboff <msaboff@apple.com> 2 25 -
trunk/Source/JavaScriptCore/runtime/CommonSlowPaths.cpp
r174401 r175724 570 570 { 571 571 BEGIN(); 572 JSValue baseValue = OP (2).jsValue();572 JSValue baseValue = OP_C(2).jsValue(); 573 573 JSValue property = OP(3).jsValue(); 574 574 ASSERT(property.isString());
Note: See TracChangeset
for help on using the changeset viewer.