| 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 #ifndef V8_FULL_CODEGEN_FULL_CODEGEN_H_ | 5 #ifndef V8_FULL_CODEGEN_FULL_CODEGEN_H_ |
| 6 #define V8_FULL_CODEGEN_FULL_CODEGEN_H_ | 6 #define V8_FULL_CODEGEN_FULL_CODEGEN_H_ |
| 7 | 7 |
| 8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
| 9 #include "src/assert-scope.h" | 9 #include "src/assert-scope.h" |
| 10 #include "src/ast/ast.h" | 10 #include "src/ast/ast.h" |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 void EmitReturnSequence(); | 460 void EmitReturnSequence(); |
| 461 void EmitProfilingCounterHandlingForReturnSequence(bool is_tail_call); | 461 void EmitProfilingCounterHandlingForReturnSequence(bool is_tail_call); |
| 462 | 462 |
| 463 // Platform-specific code sequences for calls | 463 // Platform-specific code sequences for calls |
| 464 void EmitCall(Call* expr, ConvertReceiverMode = ConvertReceiverMode::kAny); | 464 void EmitCall(Call* expr, ConvertReceiverMode = ConvertReceiverMode::kAny); |
| 465 void EmitSuperConstructorCall(Call* expr); | 465 void EmitSuperConstructorCall(Call* expr); |
| 466 void EmitCallWithLoadIC(Call* expr); | 466 void EmitCallWithLoadIC(Call* expr); |
| 467 void EmitSuperCallWithLoadIC(Call* expr); | 467 void EmitSuperCallWithLoadIC(Call* expr); |
| 468 void EmitKeyedCallWithLoadIC(Call* expr, Expression* key); | 468 void EmitKeyedCallWithLoadIC(Call* expr, Expression* key); |
| 469 void EmitKeyedSuperCallWithLoadIC(Call* expr); | 469 void EmitKeyedSuperCallWithLoadIC(Call* expr); |
| 470 void EmitPossiblyEvalCall(Call* expr); | |
| 471 | 470 |
| 472 #define FOR_EACH_FULL_CODE_INTRINSIC(F) \ | 471 #define FOR_EACH_FULL_CODE_INTRINSIC(F) \ |
| 473 F(IsSmi) \ | 472 F(IsSmi) \ |
| 474 F(IsArray) \ | 473 F(IsArray) \ |
| 475 F(IsTypedArray) \ | 474 F(IsTypedArray) \ |
| 476 F(IsRegExp) \ | 475 F(IsRegExp) \ |
| 477 F(IsJSProxy) \ | 476 F(IsJSProxy) \ |
| 478 F(Call) \ | 477 F(Call) \ |
| 479 F(NewObject) \ | 478 F(NewObject) \ |
| 480 F(IsJSReceiver) \ | 479 F(IsJSReceiver) \ |
| (...skipping 18 matching lines...) Expand all Loading... |
| 499 | 498 |
| 500 void EmitIntrinsicAsStubCall(CallRuntime* expr, const Callable& callable); | 499 void EmitIntrinsicAsStubCall(CallRuntime* expr, const Callable& callable); |
| 501 | 500 |
| 502 // Emits call to respective code stub. | 501 // Emits call to respective code stub. |
| 503 void EmitHasProperty(); | 502 void EmitHasProperty(); |
| 504 | 503 |
| 505 // Platform-specific code for restoring context from current JS frame. | 504 // Platform-specific code for restoring context from current JS frame. |
| 506 void RestoreContext(); | 505 void RestoreContext(); |
| 507 | 506 |
| 508 // Platform-specific code for loading variables. | 507 // Platform-specific code for loading variables. |
| 509 void EmitLoadGlobalCheckExtensions(VariableProxy* proxy, | |
| 510 TypeofMode typeof_mode, Label* slow); | |
| 511 MemOperand ContextSlotOperandCheckExtensions(Variable* var, Label* slow); | |
| 512 void EmitDynamicLookupFastCase(VariableProxy* proxy, TypeofMode typeof_mode, | |
| 513 Label* slow, Label* done); | |
| 514 void EmitGlobalVariableLoad(VariableProxy* proxy, TypeofMode typeof_mode); | 508 void EmitGlobalVariableLoad(VariableProxy* proxy, TypeofMode typeof_mode); |
| 515 void EmitVariableLoad(VariableProxy* proxy, | 509 void EmitVariableLoad(VariableProxy* proxy, |
| 516 TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); | 510 TypeofMode typeof_mode = NOT_INSIDE_TYPEOF); |
| 517 | 511 |
| 518 void EmitAccessor(ObjectLiteralProperty* property); | 512 void EmitAccessor(ObjectLiteralProperty* property); |
| 519 | 513 |
| 520 // Expects the arguments and the function already pushed. | |
| 521 void EmitResolvePossiblyDirectEval(Call* expr); | |
| 522 | |
| 523 // Platform-specific support for allocating a new closure based on | 514 // Platform-specific support for allocating a new closure based on |
| 524 // the given function info. | 515 // the given function info. |
| 525 void EmitNewClosure(Handle<SharedFunctionInfo> info, bool pretenure); | 516 void EmitNewClosure(Handle<SharedFunctionInfo> info, bool pretenure); |
| 526 | 517 |
| 527 // Re-usable portions of CallRuntime | 518 // Re-usable portions of CallRuntime |
| 528 void EmitLoadJSRuntimeFunction(CallRuntime* expr); | 519 void EmitLoadJSRuntimeFunction(CallRuntime* expr); |
| 529 void EmitCallJSRuntimeFunction(CallRuntime* expr); | 520 void EmitCallJSRuntimeFunction(CallRuntime* expr); |
| 530 | 521 |
| 531 // Load a value from a named property. | 522 // Load a value from a named property. |
| 532 // The receiver is left on the stack by the IC. | 523 // The receiver is left on the stack by the IC. |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 void StoreToFrameField(int frame_offset, Register value); | 682 void StoreToFrameField(int frame_offset, Register value); |
| 692 | 683 |
| 693 // Load a value from the current context. Indices are defined as an enum | 684 // Load a value from the current context. Indices are defined as an enum |
| 694 // in v8::internal::Context. | 685 // in v8::internal::Context. |
| 695 void LoadContextField(Register dst, int context_index); | 686 void LoadContextField(Register dst, int context_index); |
| 696 | 687 |
| 697 // Push the function argument for the runtime functions PushWithContext | 688 // Push the function argument for the runtime functions PushWithContext |
| 698 // and PushCatchContext. | 689 // and PushCatchContext. |
| 699 void PushFunctionArgumentForContextAllocation(); | 690 void PushFunctionArgumentForContextAllocation(); |
| 700 | 691 |
| 701 void PushCalleeAndWithBaseObject(Call* expr); | |
| 702 | |
| 703 // AST node visit functions. | 692 // AST node visit functions. |
| 704 #define DECLARE_VISIT(type) void Visit##type(type* node); | 693 #define DECLARE_VISIT(type) void Visit##type(type* node); |
| 705 AST_NODE_LIST(DECLARE_VISIT) | 694 AST_NODE_LIST(DECLARE_VISIT) |
| 706 #undef DECLARE_VISIT | 695 #undef DECLARE_VISIT |
| 707 | 696 |
| 708 void VisitComma(BinaryOperation* expr); | 697 void VisitComma(BinaryOperation* expr); |
| 709 void VisitLogicalExpression(BinaryOperation* expr); | 698 void VisitLogicalExpression(BinaryOperation* expr); |
| 710 void VisitArithmeticExpression(BinaryOperation* expr); | 699 void VisitArithmeticExpression(BinaryOperation* expr); |
| 711 | 700 |
| 712 void VisitForTypeofValue(Expression* expr); | 701 void VisitForTypeofValue(Expression* expr); |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1018 Address start_; | 1007 Address start_; |
| 1019 Address instruction_start_; | 1008 Address instruction_start_; |
| 1020 uint32_t length_; | 1009 uint32_t length_; |
| 1021 }; | 1010 }; |
| 1022 | 1011 |
| 1023 | 1012 |
| 1024 } // namespace internal | 1013 } // namespace internal |
| 1025 } // namespace v8 | 1014 } // namespace v8 |
| 1026 | 1015 |
| 1027 #endif // V8_FULL_CODEGEN_FULL_CODEGEN_H_ | 1016 #endif // V8_FULL_CODEGEN_FULL_CODEGEN_H_ |
| OLD | NEW |