| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 friend class SCTableReference; | 394 friend class SCTableReference; |
| 395 | 395 |
| 396 DISALLOW_COPY_AND_ASSIGN(StubCache); | 396 DISALLOW_COPY_AND_ASSIGN(StubCache); |
| 397 }; | 397 }; |
| 398 | 398 |
| 399 | 399 |
| 400 // ------------------------------------------------------------------------ | 400 // ------------------------------------------------------------------------ |
| 401 | 401 |
| 402 | 402 |
| 403 // Support functions for IC stubs for callbacks. | 403 // Support functions for IC stubs for callbacks. |
| 404 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadCallbackProperty); | |
| 405 DECLARE_RUNTIME_FUNCTION(MaybeObject*, StoreCallbackProperty); | 404 DECLARE_RUNTIME_FUNCTION(MaybeObject*, StoreCallbackProperty); |
| 406 | 405 |
| 407 | 406 |
| 408 // Support functions for IC stubs for interceptors. | 407 // Support functions for IC stubs for interceptors. |
| 409 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorOnly); | 408 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorOnly); |
| 410 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForLoad); | 409 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForLoad); |
| 411 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForCall); | 410 DECLARE_RUNTIME_FUNCTION(MaybeObject*, LoadPropertyWithInterceptorForCall); |
| 412 DECLARE_RUNTIME_FUNCTION(MaybeObject*, StoreInterceptorProperty); | 411 DECLARE_RUNTIME_FUNCTION(MaybeObject*, StoreInterceptorProperty); |
| 413 DECLARE_RUNTIME_FUNCTION(MaybeObject*, CallInterceptorProperty); | 412 DECLARE_RUNTIME_FUNCTION(MaybeObject*, CallInterceptorProperty); |
| 414 DECLARE_RUNTIME_FUNCTION(MaybeObject*, KeyedLoadPropertyWithInterceptor); | 413 DECLARE_RUNTIME_FUNCTION(MaybeObject*, KeyedLoadPropertyWithInterceptor); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 528 Label* miss); | 527 Label* miss); |
| 529 | 528 |
| 530 | 529 |
| 531 protected: | 530 protected: |
| 532 Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name); | 531 Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name); |
| 533 Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<String> name); | 532 Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<String> name); |
| 534 | 533 |
| 535 MacroAssembler* masm() { return &masm_; } | 534 MacroAssembler* masm() { return &masm_; } |
| 536 void set_failure(Failure* failure) { failure_ = failure; } | 535 void set_failure(Failure* failure) { failure_ = failure; } |
| 537 | 536 |
| 538 void GenerateLoadField(Handle<JSObject> object, | |
| 539 Handle<JSObject> holder, | |
| 540 Register receiver, | |
| 541 Register scratch1, | |
| 542 Register scratch2, | |
| 543 Register scratch3, | |
| 544 PropertyIndex index, | |
| 545 Handle<String> name, | |
| 546 Label* miss); | |
| 547 | |
| 548 void GenerateLoadCallback(Handle<JSObject> object, | |
| 549 Handle<JSObject> holder, | |
| 550 Register receiver, | |
| 551 Register name_reg, | |
| 552 Register scratch1, | |
| 553 Register scratch2, | |
| 554 Register scratch3, | |
| 555 Register scratch4, | |
| 556 Handle<AccessorInfo> callback, | |
| 557 Handle<String> name, | |
| 558 Label* miss); | |
| 559 | |
| 560 void GenerateDictionaryLoadCallback(Register receiver, | |
| 561 Register name_reg, | |
| 562 Register scratch1, | |
| 563 Register scratch2, | |
| 564 Register scratch3, | |
| 565 Handle<AccessorInfo> callback, | |
| 566 Handle<String> name, | |
| 567 Label* miss); | |
| 568 | |
| 569 void GenerateLoadConstant(Handle<JSObject> object, | |
| 570 Handle<JSObject> holder, | |
| 571 Register receiver, | |
| 572 Register scratch1, | |
| 573 Register scratch2, | |
| 574 Register scratch3, | |
| 575 Handle<JSFunction> value, | |
| 576 Handle<String> name, | |
| 577 Label* miss); | |
| 578 | |
| 579 void GenerateLoadInterceptor(Handle<JSObject> object, | |
| 580 Handle<JSObject> holder, | |
| 581 LookupResult* lookup, | |
| 582 Register receiver, | |
| 583 Register name_reg, | |
| 584 Register scratch1, | |
| 585 Register scratch2, | |
| 586 Register scratch3, | |
| 587 Handle<String> name, | |
| 588 Label* miss); | |
| 589 | |
| 590 static void LookupPostInterceptor(Handle<JSObject> holder, | 537 static void LookupPostInterceptor(Handle<JSObject> holder, |
| 591 Handle<String> name, | 538 Handle<String> name, |
| 592 LookupResult* lookup); | 539 LookupResult* lookup); |
| 593 | 540 |
| 594 Isolate* isolate() { return isolate_; } | 541 Isolate* isolate() { return isolate_; } |
| 595 Heap* heap() { return isolate()->heap(); } | 542 Heap* heap() { return isolate()->heap(); } |
| 596 Factory* factory() { return isolate()->factory(); } | 543 Factory* factory() { return isolate()->factory(); } |
| 597 | 544 |
| 598 private: | 545 private: |
| 599 Isolate* isolate_; | 546 Isolate* isolate_; |
| 600 MacroAssembler masm_; | 547 MacroAssembler masm_; |
| 601 Failure* failure_; | 548 Failure* failure_; |
| 602 }; | 549 }; |
| 603 | 550 |
| 604 | 551 |
| 552 enum FrontendCheckType { PERFORM_INITIAL_CHECKS, SKIP_INITIAL_CHECKS }; |
| 553 |
| 554 |
| 605 class BaseLoadStubCompiler: public StubCompiler { | 555 class BaseLoadStubCompiler: public StubCompiler { |
| 606 public: | 556 public: |
| 607 BaseLoadStubCompiler(Isolate* isolate, Register* registers) | 557 BaseLoadStubCompiler(Isolate* isolate, Register* registers) |
| 608 : StubCompiler(isolate), registers_(registers) { } | 558 : StubCompiler(isolate), registers_(registers) { } |
| 609 virtual ~BaseLoadStubCompiler() { } | 559 virtual ~BaseLoadStubCompiler() { } |
| 610 | 560 |
| 611 Handle<Code> CompileLoadField(Handle<JSObject> object, | 561 Handle<Code> CompileLoadField(Handle<JSObject> object, |
| 612 Handle<JSObject> holder, | 562 Handle<JSObject> holder, |
| 613 Handle<String> name, | 563 Handle<String> name, |
| 614 PropertyIndex index); | 564 PropertyIndex index); |
| 615 | 565 |
| 616 Handle<Code> CompileLoadCallback(Handle<JSObject> object, | 566 Handle<Code> CompileLoadCallback(Handle<JSObject> object, |
| 617 Handle<JSObject> holder, | 567 Handle<JSObject> holder, |
| 618 Handle<String> name, | 568 Handle<String> name, |
| 619 Handle<AccessorInfo> callback); | 569 Handle<AccessorInfo> callback); |
| 620 | 570 |
| 621 Handle<Code> CompileLoadConstant(Handle<JSObject> object, | 571 Handle<Code> CompileLoadConstant(Handle<JSObject> object, |
| 622 Handle<JSObject> holder, | 572 Handle<JSObject> holder, |
| 623 Handle<String> name, | 573 Handle<String> name, |
| 624 Handle<JSFunction> value); | 574 Handle<JSFunction> value); |
| 625 | 575 |
| 626 Handle<Code> CompileLoadInterceptor(Handle<JSObject> object, | 576 Handle<Code> CompileLoadInterceptor(Handle<JSObject> object, |
| 627 Handle<JSObject> holder, | 577 Handle<JSObject> holder, |
| 628 Handle<String> name); | 578 Handle<String> name); |
| 629 | 579 |
| 630 protected: | 580 protected: |
| 581 Register HandlerFrontendHeader(Handle<JSObject> object, |
| 582 Register object_reg, |
| 583 Handle<JSObject> holder, |
| 584 Handle<String> name, |
| 585 Label* success, |
| 586 FrontendCheckType check); |
| 587 void HandlerFrontendFooter(Label* success, Label* miss); |
| 588 |
| 589 Register HandlerFrontend(Handle<JSObject> object, |
| 590 Register object_reg, |
| 591 Handle<JSObject> holder, |
| 592 Handle<String> name, |
| 593 Label* success, |
| 594 FrontendCheckType check); |
| 595 Register CallbackHandlerFrontend(Handle<JSObject> object, |
| 596 Register object_reg, |
| 597 Handle<JSObject> holder, |
| 598 Handle<String> name, |
| 599 Label* success, |
| 600 FrontendCheckType check, |
| 601 Handle<AccessorInfo> callback); |
| 602 void NonexistentHandlerFrontend(Handle<JSObject> object, |
| 603 Handle<JSObject> last, |
| 604 Handle<String> name, |
| 605 Label* success, |
| 606 Handle<GlobalObject> global); |
| 607 |
| 608 void GenerateLoadField(Register reg, |
| 609 Handle<JSObject> holder, |
| 610 PropertyIndex index); |
| 611 void GenerateLoadConstant(Handle<JSFunction> value); |
| 612 void GenerateLoadCallback(Register reg, Handle<AccessorInfo> callback); |
| 613 void GenerateLoadInterceptor(Register holder_reg, |
| 614 Handle<JSObject> object, |
| 615 Handle<JSObject> holder, |
| 616 LookupResult* lookup, |
| 617 Handle<String> name); |
| 618 void GenerateLoadPostInterceptor(Register reg, |
| 619 Handle<JSObject> interceptor_holder, |
| 620 Handle<String> name, |
| 621 LookupResult* lookup); |
| 622 |
| 623 |
| 631 Register receiver() { return registers_[0]; } | 624 Register receiver() { return registers_[0]; } |
| 632 Register name() { return registers_[1]; } | 625 Register name() { return registers_[1]; } |
| 633 Register scratch1() { return registers_[2]; } | 626 Register scratch1() { return registers_[2]; } |
| 634 Register scratch2() { return registers_[3]; } | 627 Register scratch2() { return registers_[3]; } |
| 635 Register scratch3() { return registers_[4]; } | 628 Register scratch3() { return registers_[4]; } |
| 636 Register scratch4() { return registers_[5]; } | 629 Register scratch4() { return registers_[5]; } |
| 637 | 630 |
| 638 private: | 631 private: |
| 639 virtual Code::Kind kind() = 0; | 632 virtual Code::Kind kind() = 0; |
| 640 virtual void GenerateNameCheck(Handle<String> name, | 633 virtual void GenerateNameCheck(Handle<String> name, |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 Handle<JSFunction> constant_function_; | 946 Handle<JSFunction> constant_function_; |
| 954 bool is_simple_api_call_; | 947 bool is_simple_api_call_; |
| 955 Handle<FunctionTemplateInfo> expected_receiver_type_; | 948 Handle<FunctionTemplateInfo> expected_receiver_type_; |
| 956 Handle<CallHandlerInfo> api_call_info_; | 949 Handle<CallHandlerInfo> api_call_info_; |
| 957 }; | 950 }; |
| 958 | 951 |
| 959 | 952 |
| 960 } } // namespace v8::internal | 953 } } // namespace v8::internal |
| 961 | 954 |
| 962 #endif // V8_STUB_CACHE_H_ | 955 #endif // V8_STUB_CACHE_H_ |
| OLD | NEW |