OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/interpreter/interpreter.h" | 5 #include "src/interpreter/interpreter.h" |
6 | 6 |
7 #include <fstream> | 7 #include <fstream> |
8 | 8 |
9 #include "src/ast/prettyprinter.h" | 9 #include "src/ast/prettyprinter.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 403 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
404 return __ CallStub(ic.descriptor(), code_target, context, global, name, | 404 return __ CallStub(ic.descriptor(), code_target, context, global, name, |
405 smi_slot, type_feedback_vector); | 405 smi_slot, type_feedback_vector); |
406 } | 406 } |
407 | 407 |
408 // LdaGlobal <name_index> <slot> | 408 // LdaGlobal <name_index> <slot> |
409 // | 409 // |
410 // Load the global with name in constant pool entry <name_index> into the | 410 // Load the global with name in constant pool entry <name_index> into the |
411 // accumulator using FeedBackVector slot <slot> outside of a typeof. | 411 // accumulator using FeedBackVector slot <slot> outside of a typeof. |
412 void Interpreter::DoLdaGlobal(InterpreterAssembler* assembler) { | 412 void Interpreter::DoLdaGlobal(InterpreterAssembler* assembler) { |
413 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF, | 413 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); |
414 UNINITIALIZED); | |
415 Node* result = BuildLoadGlobal(ic, assembler); | 414 Node* result = BuildLoadGlobal(ic, assembler); |
416 __ SetAccumulator(result); | 415 __ SetAccumulator(result); |
417 __ Dispatch(); | 416 __ Dispatch(); |
418 } | 417 } |
419 | 418 |
420 // LdrGlobal <name_index> <slot> <reg> | 419 // LdrGlobal <name_index> <slot> <reg> |
421 // | 420 // |
422 // Load the global with name in constant pool entry <name_index> into | 421 // Load the global with name in constant pool entry <name_index> into |
423 // register <reg> using FeedBackVector slot <slot> outside of a typeof. | 422 // register <reg> using FeedBackVector slot <slot> outside of a typeof. |
424 void Interpreter::DoLdrGlobal(InterpreterAssembler* assembler) { | 423 void Interpreter::DoLdrGlobal(InterpreterAssembler* assembler) { |
425 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF, | 424 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); |
426 UNINITIALIZED); | |
427 Node* result = BuildLoadGlobal(ic, assembler); | 425 Node* result = BuildLoadGlobal(ic, assembler); |
428 Node* destination = __ BytecodeOperandReg(2); | 426 Node* destination = __ BytecodeOperandReg(2); |
429 __ StoreRegister(result, destination); | 427 __ StoreRegister(result, destination); |
430 __ Dispatch(); | 428 __ Dispatch(); |
431 } | 429 } |
432 | 430 |
433 // LdaGlobalInsideTypeof <name_index> <slot> | 431 // LdaGlobalInsideTypeof <name_index> <slot> |
434 // | 432 // |
435 // Load the global with name in constant pool entry <name_index> into the | 433 // Load the global with name in constant pool entry <name_index> into the |
436 // accumulator using FeedBackVector slot <slot> inside of a typeof. | 434 // accumulator using FeedBackVector slot <slot> inside of a typeof. |
437 void Interpreter::DoLdaGlobalInsideTypeof(InterpreterAssembler* assembler) { | 435 void Interpreter::DoLdaGlobalInsideTypeof(InterpreterAssembler* assembler) { |
438 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF, | 436 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, INSIDE_TYPEOF); |
439 UNINITIALIZED); | |
440 Node* result = BuildLoadGlobal(ic, assembler); | 437 Node* result = BuildLoadGlobal(ic, assembler); |
441 __ SetAccumulator(result); | 438 __ SetAccumulator(result); |
442 __ Dispatch(); | 439 __ Dispatch(); |
443 } | 440 } |
444 | 441 |
445 void Interpreter::DoStaGlobal(Callable ic, InterpreterAssembler* assembler) { | 442 void Interpreter::DoStaGlobal(Callable ic, InterpreterAssembler* assembler) { |
446 // Get the global object. | 443 // Get the global object. |
447 Node* context = __ GetContext(); | 444 Node* context = __ GetContext(); |
448 Node* native_context = | 445 Node* native_context = |
449 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX); | 446 __ LoadContextSlot(context, Context::NATIVE_CONTEXT_INDEX); |
(...skipping 10 matching lines...) Expand all Loading... |
460 __ CallStub(ic.descriptor(), code_target, context, global, name, value, | 457 __ CallStub(ic.descriptor(), code_target, context, global, name, value, |
461 smi_slot, type_feedback_vector); | 458 smi_slot, type_feedback_vector); |
462 __ Dispatch(); | 459 __ Dispatch(); |
463 } | 460 } |
464 | 461 |
465 // StaGlobalSloppy <name_index> <slot> | 462 // StaGlobalSloppy <name_index> <slot> |
466 // | 463 // |
467 // Store the value in the accumulator into the global with name in constant pool | 464 // Store the value in the accumulator into the global with name in constant pool |
468 // entry <name_index> using FeedBackVector slot <slot> in sloppy mode. | 465 // entry <name_index> using FeedBackVector slot <slot> in sloppy mode. |
469 void Interpreter::DoStaGlobalSloppy(InterpreterAssembler* assembler) { | 466 void Interpreter::DoStaGlobalSloppy(InterpreterAssembler* assembler) { |
470 Callable ic = | 467 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY); |
471 CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED); | |
472 DoStaGlobal(ic, assembler); | 468 DoStaGlobal(ic, assembler); |
473 } | 469 } |
474 | 470 |
475 // StaGlobalStrict <name_index> <slot> | 471 // StaGlobalStrict <name_index> <slot> |
476 // | 472 // |
477 // Store the value in the accumulator into the global with name in constant pool | 473 // Store the value in the accumulator into the global with name in constant pool |
478 // entry <name_index> using FeedBackVector slot <slot> in strict mode. | 474 // entry <name_index> using FeedBackVector slot <slot> in strict mode. |
479 void Interpreter::DoStaGlobalStrict(InterpreterAssembler* assembler) { | 475 void Interpreter::DoStaGlobalStrict(InterpreterAssembler* assembler) { |
480 Callable ic = | 476 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, STRICT); |
481 CodeFactory::StoreICInOptimizedCode(isolate_, STRICT, UNINITIALIZED); | |
482 DoStaGlobal(ic, assembler); | 477 DoStaGlobal(ic, assembler); |
483 } | 478 } |
484 | 479 |
485 compiler::Node* Interpreter::BuildLoadContextSlot( | 480 compiler::Node* Interpreter::BuildLoadContextSlot( |
486 InterpreterAssembler* assembler) { | 481 InterpreterAssembler* assembler) { |
487 Node* reg_index = __ BytecodeOperandReg(0); | 482 Node* reg_index = __ BytecodeOperandReg(0); |
488 Node* context = __ LoadRegister(reg_index); | 483 Node* context = __ LoadRegister(reg_index); |
489 Node* slot_index = __ BytecodeOperandIdx(1); | 484 Node* slot_index = __ BytecodeOperandIdx(1); |
490 return __ LoadContextSlot(context, slot_index); | 485 return __ LoadContextSlot(context, slot_index); |
491 } | 486 } |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 Node* context = __ GetContext(); | 585 Node* context = __ GetContext(); |
591 return __ CallStub(ic.descriptor(), code_target, context, object, name, | 586 return __ CallStub(ic.descriptor(), code_target, context, object, name, |
592 smi_slot, type_feedback_vector); | 587 smi_slot, type_feedback_vector); |
593 } | 588 } |
594 | 589 |
595 // LdaNamedProperty <object> <name_index> <slot> | 590 // LdaNamedProperty <object> <name_index> <slot> |
596 // | 591 // |
597 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at | 592 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at |
598 // constant pool entry <name_index>. | 593 // constant pool entry <name_index>. |
599 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) { | 594 void Interpreter::DoLdaNamedProperty(InterpreterAssembler* assembler) { |
600 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF, | 595 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); |
601 UNINITIALIZED); | |
602 Node* result = BuildLoadNamedProperty(ic, assembler); | 596 Node* result = BuildLoadNamedProperty(ic, assembler); |
603 __ SetAccumulator(result); | 597 __ SetAccumulator(result); |
604 __ Dispatch(); | 598 __ Dispatch(); |
605 } | 599 } |
606 | 600 |
607 // LdrNamedProperty <object> <name_index> <slot> <reg> | 601 // LdrNamedProperty <object> <name_index> <slot> <reg> |
608 // | 602 // |
609 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at | 603 // Calls the LoadIC at FeedBackVector slot <slot> for <object> and the name at |
610 // constant pool entry <name_index> and puts the result into register <reg>. | 604 // constant pool entry <name_index> and puts the result into register <reg>. |
611 void Interpreter::DoLdrNamedProperty(InterpreterAssembler* assembler) { | 605 void Interpreter::DoLdrNamedProperty(InterpreterAssembler* assembler) { |
612 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF, | 606 Callable ic = CodeFactory::LoadICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); |
613 UNINITIALIZED); | |
614 Node* result = BuildLoadNamedProperty(ic, assembler); | 607 Node* result = BuildLoadNamedProperty(ic, assembler); |
615 Node* destination = __ BytecodeOperandReg(3); | 608 Node* destination = __ BytecodeOperandReg(3); |
616 __ StoreRegister(result, destination); | 609 __ StoreRegister(result, destination); |
617 __ Dispatch(); | 610 __ Dispatch(); |
618 } | 611 } |
619 | 612 |
620 Node* Interpreter::BuildLoadKeyedProperty(Callable ic, | 613 Node* Interpreter::BuildLoadKeyedProperty(Callable ic, |
621 InterpreterAssembler* assembler) { | 614 InterpreterAssembler* assembler) { |
622 Node* code_target = __ HeapConstant(ic.code()); | 615 Node* code_target = __ HeapConstant(ic.code()); |
623 Node* reg_index = __ BytecodeOperandReg(0); | 616 Node* reg_index = __ BytecodeOperandReg(0); |
624 Node* object = __ LoadRegister(reg_index); | 617 Node* object = __ LoadRegister(reg_index); |
625 Node* name = __ GetAccumulator(); | 618 Node* name = __ GetAccumulator(); |
626 Node* raw_slot = __ BytecodeOperandIdx(1); | 619 Node* raw_slot = __ BytecodeOperandIdx(1); |
627 Node* smi_slot = __ SmiTag(raw_slot); | 620 Node* smi_slot = __ SmiTag(raw_slot); |
628 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 621 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
629 Node* context = __ GetContext(); | 622 Node* context = __ GetContext(); |
630 return __ CallStub(ic.descriptor(), code_target, context, object, name, | 623 return __ CallStub(ic.descriptor(), code_target, context, object, name, |
631 smi_slot, type_feedback_vector); | 624 smi_slot, type_feedback_vector); |
632 } | 625 } |
633 | 626 |
634 // KeyedLoadIC <object> <slot> | 627 // KeyedLoadIC <object> <slot> |
635 // | 628 // |
636 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key | 629 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key |
637 // in the accumulator. | 630 // in the accumulator. |
638 void Interpreter::DoLdaKeyedProperty(InterpreterAssembler* assembler) { | 631 void Interpreter::DoLdaKeyedProperty(InterpreterAssembler* assembler) { |
639 Callable ic = | 632 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_); |
640 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, UNINITIALIZED); | |
641 Node* result = BuildLoadKeyedProperty(ic, assembler); | 633 Node* result = BuildLoadKeyedProperty(ic, assembler); |
642 __ SetAccumulator(result); | 634 __ SetAccumulator(result); |
643 __ Dispatch(); | 635 __ Dispatch(); |
644 } | 636 } |
645 | 637 |
646 // LdrKeyedProperty <object> <slot> <reg> | 638 // LdrKeyedProperty <object> <slot> <reg> |
647 // | 639 // |
648 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key | 640 // Calls the KeyedLoadIC at FeedBackVector slot <slot> for <object> and the key |
649 // in the accumulator and puts the result in register <reg>. | 641 // in the accumulator and puts the result in register <reg>. |
650 void Interpreter::DoLdrKeyedProperty(InterpreterAssembler* assembler) { | 642 void Interpreter::DoLdrKeyedProperty(InterpreterAssembler* assembler) { |
651 Callable ic = | 643 Callable ic = CodeFactory::KeyedLoadICInOptimizedCode(isolate_); |
652 CodeFactory::KeyedLoadICInOptimizedCode(isolate_, UNINITIALIZED); | |
653 Node* result = BuildLoadKeyedProperty(ic, assembler); | 644 Node* result = BuildLoadKeyedProperty(ic, assembler); |
654 Node* destination = __ BytecodeOperandReg(2); | 645 Node* destination = __ BytecodeOperandReg(2); |
655 __ StoreRegister(result, destination); | 646 __ StoreRegister(result, destination); |
656 __ Dispatch(); | 647 __ Dispatch(); |
657 } | 648 } |
658 | 649 |
659 void Interpreter::DoStoreIC(Callable ic, InterpreterAssembler* assembler) { | 650 void Interpreter::DoStoreIC(Callable ic, InterpreterAssembler* assembler) { |
660 Node* code_target = __ HeapConstant(ic.code()); | 651 Node* code_target = __ HeapConstant(ic.code()); |
661 Node* object_reg_index = __ BytecodeOperandReg(0); | 652 Node* object_reg_index = __ BytecodeOperandReg(0); |
662 Node* object = __ LoadRegister(object_reg_index); | 653 Node* object = __ LoadRegister(object_reg_index); |
663 Node* constant_index = __ BytecodeOperandIdx(1); | 654 Node* constant_index = __ BytecodeOperandIdx(1); |
664 Node* name = __ LoadConstantPoolEntry(constant_index); | 655 Node* name = __ LoadConstantPoolEntry(constant_index); |
665 Node* value = __ GetAccumulator(); | 656 Node* value = __ GetAccumulator(); |
666 Node* raw_slot = __ BytecodeOperandIdx(2); | 657 Node* raw_slot = __ BytecodeOperandIdx(2); |
667 Node* smi_slot = __ SmiTag(raw_slot); | 658 Node* smi_slot = __ SmiTag(raw_slot); |
668 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 659 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
669 Node* context = __ GetContext(); | 660 Node* context = __ GetContext(); |
670 __ CallStub(ic.descriptor(), code_target, context, object, name, value, | 661 __ CallStub(ic.descriptor(), code_target, context, object, name, value, |
671 smi_slot, type_feedback_vector); | 662 smi_slot, type_feedback_vector); |
672 __ Dispatch(); | 663 __ Dispatch(); |
673 } | 664 } |
674 | 665 |
675 // StaNamedPropertySloppy <object> <name_index> <slot> | 666 // StaNamedPropertySloppy <object> <name_index> <slot> |
676 // | 667 // |
677 // Calls the sloppy mode StoreIC at FeedBackVector slot <slot> for <object> and | 668 // Calls the sloppy mode StoreIC at FeedBackVector slot <slot> for <object> and |
678 // the name in constant pool entry <name_index> with the value in the | 669 // the name in constant pool entry <name_index> with the value in the |
679 // accumulator. | 670 // accumulator. |
680 void Interpreter::DoStaNamedPropertySloppy(InterpreterAssembler* assembler) { | 671 void Interpreter::DoStaNamedPropertySloppy(InterpreterAssembler* assembler) { |
681 Callable ic = | 672 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY); |
682 CodeFactory::StoreICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED); | |
683 DoStoreIC(ic, assembler); | 673 DoStoreIC(ic, assembler); |
684 } | 674 } |
685 | 675 |
686 // StaNamedPropertyStrict <object> <name_index> <slot> | 676 // StaNamedPropertyStrict <object> <name_index> <slot> |
687 // | 677 // |
688 // Calls the strict mode StoreIC at FeedBackVector slot <slot> for <object> and | 678 // Calls the strict mode StoreIC at FeedBackVector slot <slot> for <object> and |
689 // the name in constant pool entry <name_index> with the value in the | 679 // the name in constant pool entry <name_index> with the value in the |
690 // accumulator. | 680 // accumulator. |
691 void Interpreter::DoStaNamedPropertyStrict(InterpreterAssembler* assembler) { | 681 void Interpreter::DoStaNamedPropertyStrict(InterpreterAssembler* assembler) { |
692 Callable ic = | 682 Callable ic = CodeFactory::StoreICInOptimizedCode(isolate_, STRICT); |
693 CodeFactory::StoreICInOptimizedCode(isolate_, STRICT, UNINITIALIZED); | |
694 DoStoreIC(ic, assembler); | 683 DoStoreIC(ic, assembler); |
695 } | 684 } |
696 | 685 |
697 void Interpreter::DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler) { | 686 void Interpreter::DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler) { |
698 Node* code_target = __ HeapConstant(ic.code()); | 687 Node* code_target = __ HeapConstant(ic.code()); |
699 Node* object_reg_index = __ BytecodeOperandReg(0); | 688 Node* object_reg_index = __ BytecodeOperandReg(0); |
700 Node* object = __ LoadRegister(object_reg_index); | 689 Node* object = __ LoadRegister(object_reg_index); |
701 Node* name_reg_index = __ BytecodeOperandReg(1); | 690 Node* name_reg_index = __ BytecodeOperandReg(1); |
702 Node* name = __ LoadRegister(name_reg_index); | 691 Node* name = __ LoadRegister(name_reg_index); |
703 Node* value = __ GetAccumulator(); | 692 Node* value = __ GetAccumulator(); |
704 Node* raw_slot = __ BytecodeOperandIdx(2); | 693 Node* raw_slot = __ BytecodeOperandIdx(2); |
705 Node* smi_slot = __ SmiTag(raw_slot); | 694 Node* smi_slot = __ SmiTag(raw_slot); |
706 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); | 695 Node* type_feedback_vector = __ LoadTypeFeedbackVector(); |
707 Node* context = __ GetContext(); | 696 Node* context = __ GetContext(); |
708 __ CallStub(ic.descriptor(), code_target, context, object, name, value, | 697 __ CallStub(ic.descriptor(), code_target, context, object, name, value, |
709 smi_slot, type_feedback_vector); | 698 smi_slot, type_feedback_vector); |
710 __ Dispatch(); | 699 __ Dispatch(); |
711 } | 700 } |
712 | 701 |
713 // StaKeyedPropertySloppy <object> <key> <slot> | 702 // StaKeyedPropertySloppy <object> <key> <slot> |
714 // | 703 // |
715 // Calls the sloppy mode KeyStoreIC at FeedBackVector slot <slot> for <object> | 704 // Calls the sloppy mode KeyStoreIC at FeedBackVector slot <slot> for <object> |
716 // and the key <key> with the value in the accumulator. | 705 // and the key <key> with the value in the accumulator. |
717 void Interpreter::DoStaKeyedPropertySloppy(InterpreterAssembler* assembler) { | 706 void Interpreter::DoStaKeyedPropertySloppy(InterpreterAssembler* assembler) { |
718 Callable ic = | 707 Callable ic = CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY); |
719 CodeFactory::KeyedStoreICInOptimizedCode(isolate_, SLOPPY, UNINITIALIZED); | |
720 DoKeyedStoreIC(ic, assembler); | 708 DoKeyedStoreIC(ic, assembler); |
721 } | 709 } |
722 | 710 |
723 // StaKeyedPropertyStrict <object> <key> <slot> | 711 // StaKeyedPropertyStrict <object> <key> <slot> |
724 // | 712 // |
725 // Calls the strict mode KeyStoreIC at FeedBackVector slot <slot> for <object> | 713 // Calls the strict mode KeyStoreIC at FeedBackVector slot <slot> for <object> |
726 // and the key <key> with the value in the accumulator. | 714 // and the key <key> with the value in the accumulator. |
727 void Interpreter::DoStaKeyedPropertyStrict(InterpreterAssembler* assembler) { | 715 void Interpreter::DoStaKeyedPropertyStrict(InterpreterAssembler* assembler) { |
728 Callable ic = | 716 Callable ic = CodeFactory::KeyedStoreICInOptimizedCode(isolate_, STRICT); |
729 CodeFactory::KeyedStoreICInOptimizedCode(isolate_, STRICT, UNINITIALIZED); | |
730 DoKeyedStoreIC(ic, assembler); | 717 DoKeyedStoreIC(ic, assembler); |
731 } | 718 } |
732 | 719 |
733 // PushContext <context> | 720 // PushContext <context> |
734 // | 721 // |
735 // Saves the current context in <context>, and pushes the accumulator as the | 722 // Saves the current context in <context>, and pushes the accumulator as the |
736 // new current context. | 723 // new current context. |
737 void Interpreter::DoPushContext(InterpreterAssembler* assembler) { | 724 void Interpreter::DoPushContext(InterpreterAssembler* assembler) { |
738 Node* reg_index = __ BytecodeOperandReg(0); | 725 Node* reg_index = __ BytecodeOperandReg(0); |
739 Node* new_context = __ GetAccumulator(); | 726 Node* new_context = __ GetAccumulator(); |
(...skipping 1095 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1835 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, | 1822 __ StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, |
1836 __ SmiTag(new_state)); | 1823 __ SmiTag(new_state)); |
1837 __ SetAccumulator(old_state); | 1824 __ SetAccumulator(old_state); |
1838 | 1825 |
1839 __ Dispatch(); | 1826 __ Dispatch(); |
1840 } | 1827 } |
1841 | 1828 |
1842 } // namespace interpreter | 1829 } // namespace interpreter |
1843 } // namespace internal | 1830 } // namespace internal |
1844 } // namespace v8 | 1831 } // namespace v8 |
OLD | NEW |