Changeset 153073 in webkit
- Timestamp:
- Jul 23, 2013 5:56:52 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r153067 r153073 1 2013-07-23 Mark Lam <mark.lam@apple.com> 2 3 Added ExpressionRangeInfo for BinaryOpNodes that can throw exceptions 4 due to type coersion. 5 https://bugs.webkit.org/show_bug.cgi?id=116853. 6 7 Reviewed by Geoffrey Garen. 8 9 Added the test case from bugzilla which exercises the general binary op 10 type coersion case, plus another for exercising the strcat case. 11 12 * fast/js/line-column-numbers-expected.txt: 13 * fast/js/line-column-numbers.html: 14 * fast/js/script-tests/line-column-numbers.js: 15 1 16 2013-07-22 Ryosuke Niwa <rniwa@webkit.org> 2 17 -
trunk/LayoutTests/fast/js/line-column-numbers-expected.txt
r152494 r153073 94 94 3 global code at line-column-numbers.html:155:5 95 95 96 --> Case 19 Stack Trace: 97 0 toString at line-column-numbers.html:170:26 98 1 toString at line-column-numbers.html:170:26 99 2 toString at line-column-numbers.html:170:26 100 3 toString at line-column-numbers.html:170:26 101 4 toString at line-column-numbers.html:170:26 102 5 toString at line-column-numbers.html:170:26 103 6 toString at line-column-numbers.html:170:26 104 7 toString at line-column-numbers.html:170:26 105 8 toString at line-column-numbers.html:170:26 106 9 toString at line-column-numbers.html:170:26 107 10 toString at line-column-numbers.html:170:26 108 11 toString at line-column-numbers.html:170:26 109 12 toString at line-column-numbers.html:170:26 110 13 toString at line-column-numbers.html:170:26 111 14 toString at line-column-numbers.html:170:26 112 15 toString at line-column-numbers.html:170:26 113 16 toString at line-column-numbers.html:170:26 114 17 toString at line-column-numbers.html:170:26 115 18 toString at line-column-numbers.html:170:26 116 19 toString at line-column-numbers.html:170:26 117 118 --> Case 20 Stack Trace: 119 0 g at line-column-numbers.html:190:17 120 1 g at line-column-numbers.html:190:30 121 2 g at line-column-numbers.html:190:30 122 3 g at line-column-numbers.html:190:30 123 4 g at line-column-numbers.html:190:30 124 5 g at line-column-numbers.html:190:30 125 6 g at line-column-numbers.html:190:30 126 7 g at line-column-numbers.html:190:30 127 8 g at line-column-numbers.html:190:30 128 9 g at line-column-numbers.html:190:30 129 10 g at line-column-numbers.html:190:30 130 11 g at line-column-numbers.html:190:30 131 12 g at line-column-numbers.html:190:30 132 13 g at line-column-numbers.html:190:30 133 14 g at line-column-numbers.html:190:30 134 15 g at line-column-numbers.html:190:30 135 16 g at line-column-numbers.html:190:30 136 17 g at line-column-numbers.html:190:30 137 18 g at line-column-numbers.html:190:30 138 19 g at line-column-numbers.html:190:30 139 96 140 --> Case 1 Stack Trace: 97 141 0 global code at line-column-numbers.js:3:28 … … 184 228 3 global code at line-column-numbers.js:96:5 185 229 230 --> Case 19 Stack Trace: 231 0 toString at line-column-numbers.js:109:26 232 1 toString at line-column-numbers.js:109:26 233 2 toString at line-column-numbers.js:109:26 234 3 toString at line-column-numbers.js:109:26 235 4 toString at line-column-numbers.js:109:26 236 5 toString at line-column-numbers.js:109:26 237 6 toString at line-column-numbers.js:109:26 238 7 toString at line-column-numbers.js:109:26 239 8 toString at line-column-numbers.js:109:26 240 9 toString at line-column-numbers.js:109:26 241 10 toString at line-column-numbers.js:109:26 242 11 toString at line-column-numbers.js:109:26 243 12 toString at line-column-numbers.js:109:26 244 13 toString at line-column-numbers.js:109:26 245 14 toString at line-column-numbers.js:109:26 246 15 toString at line-column-numbers.js:109:26 247 16 toString at line-column-numbers.js:109:26 248 17 toString at line-column-numbers.js:109:26 249 18 toString at line-column-numbers.js:109:26 250 19 toString at line-column-numbers.js:109:26 251 252 --> Case 20 Stack Trace: 253 0 g at line-column-numbers.js:127:17 254 1 g at line-column-numbers.js:127:30 255 2 g at line-column-numbers.js:127:30 256 3 g at line-column-numbers.js:127:30 257 4 g at line-column-numbers.js:127:30 258 5 g at line-column-numbers.js:127:30 259 6 g at line-column-numbers.js:127:30 260 7 g at line-column-numbers.js:127:30 261 8 g at line-column-numbers.js:127:30 262 9 g at line-column-numbers.js:127:30 263 10 g at line-column-numbers.js:127:30 264 11 g at line-column-numbers.js:127:30 265 12 g at line-column-numbers.js:127:30 266 13 g at line-column-numbers.js:127:30 267 14 g at line-column-numbers.js:127:30 268 15 g at line-column-numbers.js:127:30 269 16 g at line-column-numbers.js:127:30 270 17 g at line-column-numbers.js:127:30 271 18 g at line-column-numbers.js:127:30 272 19 g at line-column-numbers.js:127:30 273 186 274 PASS successfullyParsed is true 187 275 -
trunk/LayoutTests/fast/js/line-column-numbers.html
r152494 r153073 22 22 debug("--> Case " + testId + " Stack Trace:") 23 23 stackTrace = stackTrace.split("\n"); 24 var length = Math.min(stackTrace.length, 100);24 var length = Math.min(stackTrace.length, 20); 25 25 for (var i = 0; i < length; i++) { 26 26 var indexOfAt = stackTrace[i].indexOf('@') … … 162 162 </script> 163 163 164 <!-- Case 19: Binary op with type coersion on strcat. --> 165 <script>testId++;</script> 166 <script> 167 try { 168 testObj19 = { 169 toString: function() { 170 var result = ("Hello " + "World") + this; 171 b = 5; 172 return result; 173 }, 174 run: function() { 175 return testObj19.toString(); 176 } 177 }; 178 testObj19.run(); 179 } catch(e) { 180 printStack(e.stack); 181 } 182 </script> 183 184 <!-- Case 20: BinaryOp with type coersion on comparison. --> 185 <script>testId++;</script> 186 <script> 187 try { 188 function test20() { 189 var f = function g() { 190 if (this != 10) f(); 191 }; 192 var a = f(); 193 } 194 195 test20(); 196 } catch(e) { 197 printStack(e.stack); 198 } 199 </script> 200 164 201 <!-- Now do it all over with a loaded script file. --> 165 202 <script>testId = 0;</script> -
trunk/LayoutTests/fast/js/script-tests/line-column-numbers.js
r152494 r153073 102 102 ""); 103 103 104 // Case 19: Binary op with type coersion on strcat. 105 testId++; 106 try { 107 testObj19b = { 108 toString: function() { 109 var result = ("Hello " + "World") + this; 110 b19 = 5; 111 return result; 112 }, 113 run: function() { 114 return testObj19b.toString(); 115 } 116 }; 117 testObj19b.run(); 118 } catch(e) { 119 printStack(e.stack); 120 } 121 122 // Case 20: BinaryOp with type coersion on comparison. 123 testId++; 124 try { 125 function test20b() { 126 var f = function g() { 127 if (this != 10) f(); 128 }; 129 var a = f(); 130 } 131 132 test20b(); 133 } catch(e) { 134 printStack(e.stack); 135 } 136 104 137 successfullyParsed = true; -
trunk/Source/JavaScriptCore/ChangeLog
r153071 r153073 1 2013-07-23 Mark Lam <mark.lam@apple.com> 2 3 Added ExpressionRangeInfo for BinaryOpNodes that can throw exceptions 4 due to type coersion. 5 https://bugs.webkit.org/show_bug.cgi?id=116853. 6 7 Reviewed by Geoffrey Garen. 8 9 * bytecompiler/NodesCodegen.cpp: 10 (JSC::BinaryOpNode::emitBytecode): 11 - Added expression info for the strcat and the general binary op cases. 12 I did not add expression info for the "compare with null" case because 13 that comparison cannot trigger type coersion, and hence it won't throw 14 any exceptions and doesn't need the expression info. 15 1 16 2013-07-23 Mark Lam <mark.lam@apple.com> 2 17 -
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r153071 r153073 1096 1096 OpcodeID opcodeID = this->opcodeID(); 1097 1097 1098 if (opcodeID == op_add && m_expr1->isAdd() && m_expr1->resultDescriptor().definitelyIsString()) 1098 if (opcodeID == op_add && m_expr1->isAdd() && m_expr1->resultDescriptor().definitelyIsString()) { 1099 generator.emitExpressionInfo(startOffset(), 0, 0, lineNo(), lineStartOffset()); 1099 1100 return emitStrcat(generator, dst); 1101 } 1100 1102 1101 1103 if (opcodeID == op_neq) { … … 1117 1119 bool wasTypeof = generator.m_lastOpcodeID == op_typeof; 1118 1120 RegisterID* src2 = generator.emitNode(right); 1121 generator.emitExpressionInfo(startOffset(), 0, 0, lineNo(), lineStartOffset()); 1119 1122 if (wasTypeof && (opcodeID == op_neq || opcodeID == op_nstricteq)) { 1120 1123 RefPtr<RegisterID> tmp = generator.tempDestination(dst);
Note: See TracChangeset
for help on using the changeset viewer.