OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/bailout-reason.h" | 7 #include "src/bailout-reason.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/field-index.h" | 9 #include "src/field-index.h" |
10 #include "src/hydrogen.h" | 10 #include "src/hydrogen.h" |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 HConstant* js_function_proxy = | 382 HConstant* js_function_proxy = |
383 Add<HConstant>(JS_FUNCTION_PROXY_TYPE); | 383 Add<HConstant>(JS_FUNCTION_PROXY_TYPE); |
384 is_function.If<HCompareNumericAndBranch>(instance_type, js_function, | 384 is_function.If<HCompareNumericAndBranch>(instance_type, js_function, |
385 Token::EQ); | 385 Token::EQ); |
386 is_function.OrIf<HCompareNumericAndBranch>( | 386 is_function.OrIf<HCompareNumericAndBranch>( |
387 instance_type, js_function_proxy, Token::EQ); | 387 instance_type, js_function_proxy, Token::EQ); |
388 is_function.Then(); | 388 is_function.Then(); |
389 { Push(Add<HConstant>(factory->function_string())); } | 389 { Push(Add<HConstant>(factory->function_string())); } |
390 is_function.Else(); | 390 is_function.Else(); |
391 { | 391 { |
392 IfBuilder is_float32x4(this); | 392 // Is it an undetectable object? |
393 is_float32x4.If<HCompareNumericAndBranch>( | 393 IfBuilder is_undetectable(this); |
394 instance_type, Add<HConstant>(FLOAT32X4_TYPE), Token::EQ); | 394 is_undetectable.If<HIsUndetectableAndBranch>(object); |
395 is_float32x4.Then(); | 395 is_undetectable.Then(); |
396 { Push(Add<HConstant>(factory->float32x4_string())); } | |
397 is_float32x4.Else(); | |
398 { | 396 { |
399 // Is it an undetectable object? | 397 // typeof an undetectable object is 'undefined'. |
400 IfBuilder is_undetectable(this); | 398 Push(undefined_string); |
401 is_undetectable.If<HIsUndetectableAndBranch>(object); | 399 } |
402 is_undetectable.Then(); | 400 is_undetectable.Else(); |
403 { | 401 { |
404 // typeof an undetectable object is 'undefined'. | 402 // For any kind of object not handled above, the spec rule for |
405 Push(undefined_string); | 403 // host objects gives that it is okay to return "object". |
406 } | 404 Push(object_string); |
407 is_undetectable.Else(); | |
408 { | |
409 // For any kind of object not handled above, the spec rule for | |
410 // host objects gives that it is okay to return "object". | |
411 Push(object_string); | |
412 } | |
413 } | 405 } |
414 } | 406 } |
415 is_function.End(); | 407 is_function.End(); |
416 } | 408 } |
417 is_symbol.End(); | 409 is_symbol.End(); |
418 } | 410 } |
419 is_oddball.End(); | 411 is_oddball.End(); |
420 } | 412 } |
421 is_string.End(); | 413 is_string.End(); |
422 } | 414 } |
(...skipping 2064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2487 return Pop(); | 2479 return Pop(); |
2488 } | 2480 } |
2489 | 2481 |
2490 | 2482 |
2491 Handle<Code> KeyedLoadGenericStub::GenerateCode() { | 2483 Handle<Code> KeyedLoadGenericStub::GenerateCode() { |
2492 return DoGenerateCode(this); | 2484 return DoGenerateCode(this); |
2493 } | 2485 } |
2494 | 2486 |
2495 } // namespace internal | 2487 } // namespace internal |
2496 } // namespace v8 | 2488 } // namespace v8 |
OLD | NEW |