Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(490)

Side by Side Diff: src/interpreter/bytecode-generator.cc

Issue 1396693003: [Interpreter] Add function literal support. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@int_newcontext
Patch Set: Review comments Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/interpreter/bytecode-array-builder.cc ('k') | src/interpreter/bytecodes.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/bytecode-generator.h" 5 #include "src/interpreter/bytecode-generator.h"
6 6
7 #include <stack> 7 #include <stack>
8 8
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/interpreter/control-flow-builders.h" 10 #include "src/interpreter/control-flow-builders.h"
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 UNIMPLEMENTED(); 387 UNIMPLEMENTED();
388 } 388 }
389 389
390 390
391 void BytecodeGenerator::VisitDebuggerStatement(DebuggerStatement* stmt) { 391 void BytecodeGenerator::VisitDebuggerStatement(DebuggerStatement* stmt) {
392 UNIMPLEMENTED(); 392 UNIMPLEMENTED();
393 } 393 }
394 394
395 395
396 void BytecodeGenerator::VisitFunctionLiteral(FunctionLiteral* expr) { 396 void BytecodeGenerator::VisitFunctionLiteral(FunctionLiteral* expr) {
397 UNIMPLEMENTED(); 397 // Find or build a shared function info.
398 Handle<SharedFunctionInfo> shared_info =
399 Compiler::GetSharedFunctionInfo(expr, info()->script(), info());
400 CHECK(!shared_info.is_null()); // TODO(rmcilroy): Set stack overflow?
401
402 builder()
403 ->LoadLiteral(shared_info)
404 .CreateClosure(expr->pretenure() ? TENURED : NOT_TENURED);
398 } 405 }
399 406
400 407
401 void BytecodeGenerator::VisitClassLiteral(ClassLiteral* expr) { 408 void BytecodeGenerator::VisitClassLiteral(ClassLiteral* expr) {
402 UNIMPLEMENTED(); 409 UNIMPLEMENTED();
403 } 410 }
404 411
405 412
406 void BytecodeGenerator::VisitNativeFunctionLiteral( 413 void BytecodeGenerator::VisitNativeFunctionLiteral(
407 NativeFunctionLiteral* expr) { 414 NativeFunctionLiteral* expr) {
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 } 679 }
673 case Call::GLOBAL_CALL: { 680 case Call::GLOBAL_CALL: {
674 // Receiver is undefined for global calls. 681 // Receiver is undefined for global calls.
675 builder()->LoadUndefined().StoreAccumulatorInRegister(receiver); 682 builder()->LoadUndefined().StoreAccumulatorInRegister(receiver);
676 // Load callee as a global variable. 683 // Load callee as a global variable.
677 VariableProxy* proxy = callee_expr->AsVariableProxy(); 684 VariableProxy* proxy = callee_expr->AsVariableProxy();
678 VisitVariableLoad(proxy->var(), proxy->VariableFeedbackSlot()); 685 VisitVariableLoad(proxy->var(), proxy->VariableFeedbackSlot());
679 builder()->StoreAccumulatorInRegister(callee); 686 builder()->StoreAccumulatorInRegister(callee);
680 break; 687 break;
681 } 688 }
689 case Call::OTHER_CALL: {
690 builder()->LoadUndefined().StoreAccumulatorInRegister(receiver);
691 Visit(callee_expr);
692 builder()->StoreAccumulatorInRegister(callee);
693 break;
694 }
682 case Call::LOOKUP_SLOT_CALL: 695 case Call::LOOKUP_SLOT_CALL:
683 case Call::SUPER_CALL: 696 case Call::SUPER_CALL:
684 case Call::POSSIBLY_EVAL_CALL: 697 case Call::POSSIBLY_EVAL_CALL:
685 case Call::OTHER_CALL:
686 UNIMPLEMENTED(); 698 UNIMPLEMENTED();
687 } 699 }
688 700
689 // Evaluate all arguments to the function call and store in sequential 701 // Evaluate all arguments to the function call and store in sequential
690 // registers. 702 // registers.
691 ZoneList<Expression*>* args = expr->arguments(); 703 ZoneList<Expression*>* args = expr->arguments();
692 for (int i = 0; i < args->length(); ++i) { 704 for (int i = 0; i < args->length(); ++i) {
693 Visit(args->at(i)); 705 Visit(args->at(i));
694 Register arg = temporary_register_scope.NewRegister(); 706 Register arg = temporary_register_scope.NewRegister();
695 DCHECK(arg.index() - i == receiver.index() + 1); 707 DCHECK(arg.index() - i == receiver.index() + 1);
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { 867 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const {
856 return info()->feedback_vector()->GetIndex(slot); 868 return info()->feedback_vector()->GetIndex(slot);
857 } 869 }
858 870
859 871
860 Register BytecodeGenerator::current_context() const { return current_context_; } 872 Register BytecodeGenerator::current_context() const { return current_context_; }
861 873
862 } // namespace interpreter 874 } // namespace interpreter
863 } // namespace internal 875 } // namespace internal
864 } // namespace v8 876 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-array-builder.cc ('k') | src/interpreter/bytecodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698