Changeset 93070 in webkit
- Timestamp:
- Aug 15, 2011, 4:44:41 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/js/kde/script-tests/operators.js (modified) (11 diffs)
-
Source/JavaScriptCore/ChangeLog (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGOperations.cpp (modified) (3 diffs)
-
Source/JavaScriptCore/dfg/DFGOperations.h (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r93069 r93070 1 2011-08-15 Gavin Barraclough <barraclough@apple.com> 2 3 https://bugs.webkit.org/show_bug.cgi?id=66263 4 DFG JIT does not always zero extend boolean result of DFG operations 5 6 Reviewed by Sam Weinig. 7 8 * fast/js/kde/script-tests/operators.js: 9 (nonSpeculativeNotInner): 10 (nonSpeculativeNot): 11 (nonSpeculativeLessInner): 12 (nonSpeculativeLess): 13 (nonSpeculativeLessEqInner): 14 (nonSpeculativeLessEq): 15 (nonSpeculativeGreaterInner): 16 (nonSpeculativeGreater): 17 (nonSpeculativeGreaterEqInner): 18 (nonSpeculativeGreaterEq): 19 (nonSpeculativeEqualInner): 20 (nonSpeculativeEqual): 21 (nonSpeculativeNotEqualInner): 22 (nonSpeculativeNotEqual): 23 (nonSpeculativeStrictEqualInner): 24 (nonSpeculativeStrictEqual): 25 (nonSpeculativeStrictNotEqualInner): 26 (nonSpeculativeStrictNotEqual): 27 - Add tests cases that will hit the non-spec path. 28 1 29 2011-08-15 Alexey Proskuryakov <ap@apple.com> 2 30 -
trunk/LayoutTests/fast/js/kde/script-tests/operators.js
r48651 r93070 1 function nonSpeculativeNotInner(argument, o1, o2) 2 { 3 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 4 o1 + o2; 5 return !argument; 6 } 7 function nonSpeculativeNot(argument) 8 { 9 return nonSpeculativeNotInner(argument, {}, {}); 10 } 11 12 function nonSpeculativeLessInner(a, b, o1, o2) 13 { 14 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 15 o1 + o2; 16 return a < b; 17 } 18 function nonSpeculativeLess(a, b) 19 { 20 return nonSpeculativeLessInner(a, b, {}, {}); 21 } 22 23 function nonSpeculativeLessEqInner(a, b, o1, o2) 24 { 25 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 26 o1 + o2; 27 return a <= b; 28 } 29 function nonSpeculativeLessEq(a, b) 30 { 31 return nonSpeculativeLessEqInner(a, b, {}, {}); 32 } 33 34 function nonSpeculativeGreaterInner(a, b, o1, o2) 35 { 36 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 37 o1 + o2; 38 return a > b; 39 } 40 function nonSpeculativeGreater(a, b) 41 { 42 return nonSpeculativeGreaterInner(a, b, {}, {}); 43 } 44 45 function nonSpeculativeGreaterEqInner(a, b, o1, o2) 46 { 47 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 48 o1 + o2; 49 return a >= b; 50 } 51 function nonSpeculativeGreaterEq(a, b) 52 { 53 return nonSpeculativeGreaterEqInner(a, b, {}, {}); 54 } 55 56 function nonSpeculativeEqualInner(a, b, o1, o2) 57 { 58 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 59 o1 + o2; 60 return a == b; 61 } 62 function nonSpeculativeEqual(a, b) 63 { 64 return nonSpeculativeEqualInner(a, b, {}, {}); 65 } 66 67 function nonSpeculativeNotEqualInner(a, b, o1, o2) 68 { 69 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 70 o1 + o2; 71 return a != b; 72 } 73 function nonSpeculativeNotEqual(a, b) 74 { 75 return nonSpeculativeNotEqualInner(a, b, {}, {}); 76 } 77 78 function nonSpeculativeStrictEqualInner(a, b, o1, o2) 79 { 80 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 81 o1 + o2; 82 return a === b; 83 } 84 function nonSpeculativeStrictEqual(a, b) 85 { 86 return nonSpeculativeStrictEqualInner(a, b, {}, {}); 87 } 88 89 function nonSpeculativeStrictNotEqualInner(a, b, o1, o2) 90 { 91 // The + operator on objects is a reliable way to avoid the speculative JIT path for now at least. 92 o1 + o2; 93 return a !== b; 94 } 95 function nonSpeculativeStrictNotEqual(a, b) 96 { 97 return nonSpeculativeStrictNotEqualInner(a, b, {}, {}); 98 } 99 1 100 // operator ! 2 101 shouldBeTrue("!undefined"); … … 8 107 shouldBeTrue("!!'a'"); 9 108 shouldBeTrue("!''"); 109 110 shouldBeTrue("nonSpeculativeNot(undefined)"); 111 shouldBeTrue("nonSpeculativeNot(null)"); 112 shouldBeTrue("nonSpeculativeNot(!true)"); 113 shouldBeTrue("nonSpeculativeNot(false)"); 114 shouldBeTrue("nonSpeculativeNot(!1)"); 115 shouldBeTrue("nonSpeculativeNot(0)"); 116 shouldBeTrue("nonSpeculativeNot(!'a')"); 117 shouldBeTrue("nonSpeculativeNot('')"); 10 118 11 119 // unary plus … … 149 257 shouldBe("1==2", "false"); 150 258 259 shouldBe("nonSpeculativeEqual(2,2)", "true"); 260 shouldBe("nonSpeculativeEqual(1,2)", "false"); 261 151 262 shouldBe("1<2", "true"); 152 263 shouldBe("1<=2", "true"); … … 154 265 shouldBe("2<=1", "false"); 155 266 267 shouldBe("nonSpeculativeLess(1,2)", "true"); 268 shouldBe("nonSpeculativeLessEq(1,2)", "true"); 269 shouldBe("nonSpeculativeLess(2,1)", "false"); 270 shouldBe("nonSpeculativeLessEq(2,1)", "false"); 271 156 272 shouldBe("2>1", "true"); 157 273 shouldBe("2>=1", "true"); … … 159 275 shouldBe("1>2", "false"); 160 276 161 shouldBe("'abc' == 'abc'", "true"); 162 shouldBe("'abc' != 'xyz'", "true"); 277 shouldBe("nonSpeculativeGreater(2,1)", "true"); 278 shouldBe("nonSpeculativeGreaterEq(2,1)", "true"); 279 shouldBe("nonSpeculativeGreaterEq(1,2)", "false"); 280 shouldBe("nonSpeculativeGreater(1,2)", "false"); 281 282 shouldBeTrue("'abc' == 'abc'"); 283 shouldBeTrue("'abc' != 'xyz'"); 163 284 shouldBeTrue("true == true"); 164 285 shouldBeTrue("false == false"); … … 185 306 shouldBeTrue("0 == false"); 186 307 308 shouldBeTrue("nonSpeculativeEqual('abc', 'abc')"); 309 shouldBeTrue("nonSpeculativeNotEqual('abc', 'xyz')"); 310 shouldBeTrue("nonSpeculativeEqual(true, true)"); 311 shouldBeTrue("nonSpeculativeEqual(false, false)"); 312 shouldBeTrue("nonSpeculativeNotEqual(true, false)"); 313 shouldBeTrue("nonSpeculativeNotEqual('a', null)"); 314 shouldBeTrue("nonSpeculativeNotEqual('a', undefined)"); 315 shouldBeTrue("nonSpeculativeEqual(null, null)"); 316 shouldBeTrue("nonSpeculativeEqual(null, undefined)"); 317 shouldBeTrue("nonSpeculativeEqual(undefined, undefined)"); 318 shouldBeTrue("nonSpeculativeNotEqual(NaN, NaN)"); 319 shouldBeTrue("nonSpeculativeNotEqual(true, undefined)"); 320 shouldBeTrue("nonSpeculativeNotEqual(true, null)"); 321 shouldBeTrue("nonSpeculativeNotEqual(false, undefined)"); 322 shouldBeTrue("nonSpeculativeNotEqual(false, null)"); 323 shouldBeTrue("nonSpeculativeEqual('0', 0)"); 324 shouldBeTrue("nonSpeculativeEqual(1, '1')"); 325 shouldBeTrue("nonSpeculativeNotEqual(NaN, NaN)"); 326 shouldBeTrue("nonSpeculativeNotEqual(NaN, 0)"); 327 shouldBeTrue("nonSpeculativeNotEqual(NaN, undefined)"); 328 shouldBeTrue("nonSpeculativeEqual(true, 1)"); 329 shouldBeTrue("nonSpeculativeNotEqual(true, 2)"); 330 shouldBeTrue("nonSpeculativeEqual(1, true)"); 331 shouldBeTrue("nonSpeculativeEqual(false, 0)"); 332 shouldBeTrue("nonSpeculativeEqual(0, false)"); 333 187 334 shouldBe("'abc' < 'abx'", "true"); 188 335 shouldBe("'abc' < 'abcd'", "true"); … … 191 338 shouldBe("'abx' < 'abc'", "false"); 192 339 340 shouldBe("nonSpeculativeLess('abc', 'abx')", "true"); 341 shouldBe("nonSpeculativeLess('abc', 'abcd')", "true"); 342 shouldBe("nonSpeculativeLess('abc', 'abc')", "false"); 343 shouldBe("nonSpeculativeLess('abcd', 'abcd')", "false"); 344 shouldBe("nonSpeculativeLess('abx', 'abc')", "false"); 345 193 346 shouldBe("'abc' <= 'abc'", "true"); 194 347 shouldBe("'abc' <= 'abx'", "true"); … … 197 350 shouldBe("'abc' <= 'abcd'", "true"); 198 351 352 shouldBe("nonSpeculativeLessEq('abc', 'abc')", "true"); 353 shouldBe("nonSpeculativeLessEq('abc', 'abx')", "true"); 354 shouldBe("nonSpeculativeLessEq('abx', 'abc')", "false"); 355 shouldBe("nonSpeculativeLessEq('abcd', 'abc')", "false"); 356 shouldBe("nonSpeculativeLessEq('abc', 'abcd')", "true"); 357 199 358 shouldBe("'abc' > 'abx'", "false"); 200 359 shouldBe("'abc' > 'abc'", "false"); … … 202 361 shouldBe("'abx' > 'abc'", "true"); 203 362 shouldBe("'abc' > 'abcd'", "false"); 363 364 shouldBe("nonSpeculativeGreater('abc', 'abx')", "false"); 365 shouldBe("nonSpeculativeGreater('abc', 'abc')", "false"); 366 shouldBe("nonSpeculativeGreater('abcd', 'abc')", "true"); 367 shouldBe("nonSpeculativeGreater('abx', 'abc')", "true"); 368 shouldBe("nonSpeculativeGreater('abc', 'abcd')", "false"); 204 369 205 370 shouldBe("'abc' >= 'abc'", "true"); … … 209 374 shouldBe("'abc' >= 'abx'", "false"); 210 375 shouldBe("'abc' >= 'abcd'", "false"); 376 377 shouldBe("nonSpeculativeGreaterEq('abc', 'abc')", "true"); 378 shouldBe("nonSpeculativeGreaterEq('abcd', 'abc')", "true"); 379 shouldBe("nonSpeculativeGreaterEq('abx', 'abc')", "true"); 380 shouldBe("nonSpeculativeGreaterEq('abc', 'abx')", "false"); 381 shouldBe("nonSpeculativeGreaterEq('abc', 'abx')", "false"); 382 shouldBe("nonSpeculativeGreaterEq('abc', 'abcd')", "false"); 211 383 212 384 // mixed strings and numbers - results validated in NS+moz+IE5 … … 221 393 shouldBeTrue("6 < '52'"); 222 394 shouldBeTrue("6 < '72'"); // #36087 223 shouldBe("NaN < 0", "false"); 224 shouldBe("NaN <= 0", "false"); 225 shouldBe("NaN > 0", "false"); 226 shouldBe("NaN >= 0", "false"); 395 shouldBeFalse("NaN < 0"); 396 shouldBeFalse("NaN <= 0"); 397 shouldBeFalse("NaN > 0"); 398 shouldBeFalse("NaN >= 0"); 399 400 shouldBeFalse("nonSpeculativeLessEq('abc', 0)"); // #35246 401 shouldBeTrue("nonSpeculativeLessEq('', 0)"); 402 shouldBeTrue("nonSpeculativeLessEq(' ', 0)"); 403 shouldBeTrue("nonSpeculativeLessEq(null, 0)"); 404 shouldBeFalse("nonSpeculativeLessEq(0, 'abc')"); 405 shouldBeTrue("nonSpeculativeLessEq(0, '')"); 406 shouldBeTrue("nonSpeculativeLessEq(0, null)"); 407 shouldBeTrue("nonSpeculativeLessEq(null, null)"); 408 shouldBeTrue("nonSpeculativeLess(6, '52')"); 409 shouldBeTrue("nonSpeculativeLess(6, '72')"); // #36087 410 shouldBeFalse("nonSpeculativeLess(NaN, 0)"); 411 shouldBeFalse("nonSpeculativeLessEq(NaN, 0)"); 412 shouldBeFalse("nonSpeculativeGreater(NaN, 0)"); 413 shouldBeFalse("nonSpeculativeGreaterEq(NaN, 0)"); 227 414 228 415 // strict comparison === 229 shouldBe ("0 === false", "false");416 shouldBeFalse("0 === false"); 230 417 //shouldBe("undefined === undefined", "true"); // aborts in IE5 (undefined is not defined ;) 231 shouldBe("null === null", "true"); 232 shouldBe("NaN === NaN", "false"); 233 shouldBe("0.0 === 0", "true"); 234 shouldBe("'abc' === 'abc'", "true"); 235 shouldBe("'a' === 'x'", "false"); 236 shouldBe("1 === '1'", "false"); 237 shouldBe("'1' === 1", "false"); 238 shouldBe("true === true", "true"); 239 shouldBe("false === false", "true"); 240 shouldBe("true === false", "false"); 241 shouldBe("Math === Math", "true"); 242 shouldBe("Math === Boolean", "false"); 243 shouldBe("Infinity === Infinity", "true"); 418 shouldBeTrue("null === null"); 419 shouldBeFalse("NaN === NaN"); 420 shouldBeTrue("0.0 === 0"); 421 shouldBeTrue("'abc' === 'abc'"); 422 shouldBeFalse("'a' === 'x'"); 423 shouldBeFalse("1 === '1'"); 424 shouldBeFalse("'1' === 1"); 425 shouldBeTrue("true === true"); 426 shouldBeTrue("false === false"); 427 shouldBeFalse("true === false"); 428 shouldBeTrue("Math === Math"); 429 shouldBeFalse("Math === Boolean"); 430 shouldBeTrue("Infinity === Infinity"); 431 432 // strict comparison === 433 shouldBeFalse("nonSpeculativeStrictEqual(0, false)"); 434 //shouldBe("undefined === undefined", "true"); // aborts in IE5 (undefined is not defined ;) 435 shouldBeTrue("nonSpeculativeStrictEqual(null, null)"); 436 shouldBeFalse("nonSpeculativeStrictEqual(NaN, NaN)"); 437 shouldBeTrue("nonSpeculativeStrictEqual(0.0, 0)"); 438 shouldBeTrue("nonSpeculativeStrictEqual('abc', 'abc')"); 439 shouldBeFalse("nonSpeculativeStrictEqual('a', 'x')"); 440 shouldBeFalse("nonSpeculativeStrictEqual(1, '1')"); 441 shouldBeFalse("nonSpeculativeStrictEqual('1', 1)"); 442 shouldBeTrue("nonSpeculativeStrictEqual(true, true)"); 443 shouldBeTrue("nonSpeculativeStrictEqual(false, false)"); 444 shouldBeFalse("nonSpeculativeStrictEqual(true, false)"); 445 shouldBeTrue("nonSpeculativeStrictEqual(Math, Math)"); 446 shouldBeFalse("nonSpeculativeStrictEqual(Math, Boolean)"); 447 shouldBeTrue("nonSpeculativeStrictEqual(Infinity, Infinity)"); 244 448 245 449 // !== 246 450 shouldBe("0 !== 0", "false"); 247 451 shouldBe("0 !== 1", "true"); 452 453 // !== 454 shouldBe("nonSpeculativeStrictNotEqual(0, 0)", "false"); 455 shouldBe("nonSpeculativeStrictNotEqual(0, 1)", "true"); 248 456 249 457 shouldBe("typeof undefined", "'undefined'"); -
trunk/Source/JavaScriptCore/ChangeLog
r93048 r93070 1 2011-08-15 Gavin Barraclough <barraclough@apple.com> 2 3 https://bugs.webkit.org/show_bug.cgi?id=66263 4 DFG JIT does not always zero extend boolean result of DFG operations 5 6 Reviewed by Sam Weinig. 7 8 * dfg/DFGOperations.cpp: 9 * dfg/DFGOperations.h: 10 - Change bool return values to a 64-bit type. 11 1 12 2011-08-15 Gavin Barraclough <barraclough@apple.com> 2 13 -
trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp
r92569 r93070 398 398 } 399 399 400 booloperationCompareLess(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)400 RegisterSizedBoolean operationCompareLess(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) 401 401 { 402 402 return jsLess<true>(exec, JSValue::decode(encodedOp1), JSValue::decode(encodedOp2)); 403 403 } 404 404 405 booloperationCompareLessEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)405 RegisterSizedBoolean operationCompareLessEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) 406 406 { 407 407 return jsLessEq<true>(exec, JSValue::decode(encodedOp1), JSValue::decode(encodedOp2)); 408 408 } 409 409 410 booloperationCompareGreater(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)410 RegisterSizedBoolean operationCompareGreater(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) 411 411 { 412 412 return jsLess<false>(exec, JSValue::decode(encodedOp2), JSValue::decode(encodedOp1)); 413 413 } 414 414 415 booloperationCompareGreaterEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)415 RegisterSizedBoolean operationCompareGreaterEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) 416 416 { 417 417 return jsLessEq<false>(exec, JSValue::decode(encodedOp2), JSValue::decode(encodedOp1)); 418 418 } 419 419 420 booloperationCompareEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)420 RegisterSizedBoolean operationCompareEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) 421 421 { 422 422 return JSValue::equalSlowCaseInline(exec, JSValue::decode(encodedOp1), JSValue::decode(encodedOp2)); 423 423 } 424 424 425 booloperationCompareStrictEqCell(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)425 RegisterSizedBoolean operationCompareStrictEqCell(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) 426 426 { 427 427 JSValue op1 = JSValue::decode(encodedOp1); … … 434 434 } 435 435 436 booloperationCompareStrictEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)436 RegisterSizedBoolean operationCompareStrictEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2) 437 437 { 438 438 return JSValue::strictEqual(exec, JSValue::decode(encodedOp1), JSValue::decode(encodedOp2)); … … 685 685 } 686 686 687 booldfgConvertJSValueToBoolean(ExecState* exec, EncodedJSValue encodedOp)687 RegisterSizedBoolean dfgConvertJSValueToBoolean(ExecState* exec, EncodedJSValue encodedOp) 688 688 { 689 689 return JSValue::decode(encodedOp).toBoolean(exec); -
trunk/Source/JavaScriptCore/dfg/DFGOperations.h
r91607 r93070 35 35 enum PutKind { Direct, NotDirect }; 36 36 37 typedef intptr_t RegisterSizedBoolean; 38 37 39 extern "C" { 38 40 … … 45 47 typedef EncodedJSValue (*J_DFGOperation_EP)(ExecState*, void*); 46 48 typedef EncodedJSValue (*J_DFGOperation_EI)(ExecState*, Identifier*); 47 typedef bool(*Z_DFGOperation_EJ)(ExecState*, EncodedJSValue);48 typedef bool(*Z_DFGOperation_EJJ)(ExecState*, EncodedJSValue, EncodedJSValue);49 typedef RegisterSizedBoolean (*Z_DFGOperation_EJ)(ExecState*, EncodedJSValue); 50 typedef RegisterSizedBoolean (*Z_DFGOperation_EJJ)(ExecState*, EncodedJSValue, EncodedJSValue); 49 51 typedef void (*V_DFGOperation_EJJJ)(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue); 50 52 typedef void (*V_DFGOperation_EJJP)(ExecState*, EncodedJSValue, EncodedJSValue, void*); … … 83 85 void operationPutByIdDirectStrictOptimize(ExecState*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, Identifier*); 84 86 void operationPutByIdDirectNonStrictOptimize(ExecState*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, Identifier*); 85 booloperationCompareLess(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2);86 booloperationCompareLessEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2);87 booloperationCompareGreater(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2);88 booloperationCompareGreaterEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2);89 booloperationCompareEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2);90 booloperationCompareStrictEqCell(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2);91 booloperationCompareStrictEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2);87 RegisterSizedBoolean operationCompareLess(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2); 88 RegisterSizedBoolean operationCompareLessEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2); 89 RegisterSizedBoolean operationCompareGreater(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2); 90 RegisterSizedBoolean operationCompareGreaterEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2); 91 RegisterSizedBoolean operationCompareEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2); 92 RegisterSizedBoolean operationCompareStrictEqCell(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2); 93 RegisterSizedBoolean operationCompareStrictEq(ExecState*, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2); 92 94 void* operationVirtualCall(ExecState*); 93 95 void* operationLinkCall(ExecState*); … … 112 114 double dfgConvertJSValueToNumber(ExecState*, EncodedJSValue); 113 115 int32_t dfgConvertJSValueToInt32(ExecState*, EncodedJSValue); 114 booldfgConvertJSValueToBoolean(ExecState*, EncodedJSValue);116 RegisterSizedBoolean dfgConvertJSValueToBoolean(ExecState*, EncodedJSValue); 115 117 116 118 } // extern "C"
Note:
See TracChangeset
for help on using the changeset viewer.