Revision: 17038
Author: [email protected]
Date: Tue Oct 1 09:47:37 2013 UTC
Log: Defer allocation of native function literals.
[email protected]
Review URL: https://codereview.chromium.org/25473002
http://code.google.com/p/v8/source/detail?r=17038
Modified:
/branches/bleeding_edge/src/ast.cc
/branches/bleeding_edge/src/ast.h
/branches/bleeding_edge/src/full-codegen.cc
/branches/bleeding_edge/src/hydrogen.cc
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/src/parser.cc
/branches/bleeding_edge/src/prettyprinter.cc
/branches/bleeding_edge/src/typing.cc
=======================================
--- /branches/bleeding_edge/src/ast.cc Mon Sep 30 17:42:58 2013 UTC
+++ /branches/bleeding_edge/src/ast.cc Tue Oct 1 09:47:37 2013 UTC
@@ -1143,7 +1143,7 @@
DONT_OPTIMIZE_NODE(TryCatchStatement)
DONT_OPTIMIZE_NODE(TryFinallyStatement)
DONT_OPTIMIZE_NODE(DebuggerStatement)
-DONT_OPTIMIZE_NODE(SharedFunctionInfoLiteral)
+DONT_OPTIMIZE_NODE(NativeFunctionLiteral)
DONT_SELFOPTIMIZE_NODE(DoWhileStatement)
DONT_SELFOPTIMIZE_NODE(WhileStatement)
=======================================
--- /branches/bleeding_edge/src/ast.h Mon Sep 30 17:42:58 2013 UTC
+++ /branches/bleeding_edge/src/ast.h Tue Oct 1 09:47:37 2013 UTC
@@ -97,7 +97,7 @@
#define EXPRESSION_NODE_LIST(V) \
V(FunctionLiteral) \
- V(SharedFunctionInfoLiteral) \
+ V(NativeFunctionLiteral) \
V(Conditional) \
V(VariableProxy) \
V(Literal) \
@@ -2380,23 +2380,21 @@
};
-class SharedFunctionInfoLiteral V8_FINAL : public Expression {
+class NativeFunctionLiteral V8_FINAL : public Expression {
public:
- DECLARE_NODE_TYPE(SharedFunctionInfoLiteral)
+ DECLARE_NODE_TYPE(NativeFunctionLiteral)
- Handle<SharedFunctionInfo> shared_function_info() const {
- return shared_function_info_;
- }
+ Handle<String> name() const { return name_; }
+ v8::Extension* extension() const { return extension_; }
protected:
- SharedFunctionInfoLiteral(
- Isolate* isolate,
- Handle<SharedFunctionInfo> shared_function_info)
- : Expression(isolate),
- shared_function_info_(shared_function_info) { }
+ NativeFunctionLiteral(
+ Isolate* isolate, Handle<String> name, v8::Extension* extension)
+ : Expression(isolate), name_(name), extension_(extension) { }
private:
- Handle<SharedFunctionInfo> shared_function_info_;
+ Handle<String> name_;
+ v8::Extension* extension_;
};
@@ -3237,11 +3235,11 @@
return lit;
}
- SharedFunctionInfoLiteral* NewSharedFunctionInfoLiteral(
- Handle<SharedFunctionInfo> shared_function_info) {
- SharedFunctionInfoLiteral* lit =
- new(zone_) SharedFunctionInfoLiteral(isolate_,
shared_function_info);
- VISIT_AND_RETURN(SharedFunctionInfoLiteral, lit)
+ NativeFunctionLiteral* NewNativeFunctionLiteral(Handle<String> name,
+ v8::Extension*
extension) {
+ NativeFunctionLiteral* lit =
+ new(zone_) NativeFunctionLiteral(isolate_, name, extension);
+ VISIT_AND_RETURN(NativeFunctionLiteral, lit)
}
ThisFunction* NewThisFunction() {
=======================================
--- /branches/bleeding_edge/src/full-codegen.cc Mon Sep 30 17:42:58 2013 UTC
+++ /branches/bleeding_edge/src/full-codegen.cc Tue Oct 1 09:47:37 2013 UTC
@@ -197,8 +197,8 @@
}
-void BreakableStatementChecker::VisitSharedFunctionInfoLiteral(
- SharedFunctionInfoLiteral* expr) {
+void BreakableStatementChecker::VisitNativeFunctionLiteral(
+ NativeFunctionLiteral* expr) {
}
@@ -1567,10 +1567,33 @@
}
-void FullCodeGenerator::VisitSharedFunctionInfoLiteral(
- SharedFunctionInfoLiteral* expr) {
- Comment cmnt(masm_, "[ SharedFunctionInfoLiteral");
- EmitNewClosure(expr->shared_function_info(), false);
+void FullCodeGenerator::VisitNativeFunctionLiteral(
+ NativeFunctionLiteral* expr) {
+ Comment cmnt(masm_, "[ NativeFunctionLiteral");
+
+ // Compute the function template for the native function.
+ Handle<String> name = expr->name();
+ v8::Handle<v8::FunctionTemplate> fun_template =
+ expr->extension()->GetNativeFunction(v8::Utils::ToLocal(name));
+ ASSERT(!fun_template.IsEmpty());
+
+ // Instantiate the function and create a shared function info from it.
+ Handle<JSFunction> fun = Utils::OpenHandle(*fun_template->GetFunction());
+ const int literals = fun->NumberOfLiterals();
+ Handle<Code> code = Handle<Code>(fun->shared()->code());
+ Handle<Code> construct_stub =
Handle<Code>(fun->shared()->construct_stub());
+ bool is_generator = false;
+ Handle<SharedFunctionInfo> shared =
+ isolate()->factory()->NewSharedFunctionInfo(name, literals,
is_generator,
+ code, Handle<ScopeInfo>(fun->shared()->scope_info()));
+ shared->set_construct_stub(*construct_stub);
+
+ // Copy the function data to the shared function info.
+ shared->set_function_data(fun->shared()->function_data());
+ int parameters = fun->shared()->formal_parameter_count();
+ shared->set_formal_parameter_count(parameters);
+
+ EmitNewClosure(shared, false);
}
=======================================
--- /branches/bleeding_edge/src/hydrogen.cc Tue Oct 1 08:22:01 2013 UTC
+++ /branches/bleeding_edge/src/hydrogen.cc Tue Oct 1 09:47:37 2013 UTC
@@ -3983,12 +3983,12 @@
}
-void HOptimizedGraphBuilder::VisitSharedFunctionInfoLiteral(
- SharedFunctionInfoLiteral* expr) {
+void HOptimizedGraphBuilder::VisitNativeFunctionLiteral(
+ NativeFunctionLiteral* expr) {
ASSERT(!HasStackOverflow());
ASSERT(current_block() != NULL);
ASSERT(current_block()->HasPredecessor());
- return Bailout(kSharedFunctionInfoLiteral);
+ return Bailout(kNativeFunctionLiteral);
}
=======================================
--- /branches/bleeding_edge/src/objects.h Tue Oct 1 09:44:35 2013 UTC
+++ /branches/bleeding_edge/src/objects.h Tue Oct 1 09:47:37 2013 UTC
@@ -1196,6 +1196,7 @@
V(kModuleStatement, "Module
statement") \
V(kModuleVariable, "Module
variable") \
V(kModuleUrl, "Module
url") \
+ V(kNativeFunctionLiteral, "Native function
literal") \
V(kNoCasesLeft, "no cases
left") \
V(kNoEmptyArraysHereInEmitFastAsciiArrayJoin,
\
"No empty arrays here in
EmitFastAsciiArrayJoin") \
@@ -1239,7 +1240,6 @@
V(kRegisterDidNotMatchExpectedRoot, "Register did not match expected
root") \
V(kRegisterWasClobbered, "register was
clobbered") \
V(kScopedBlock, "ScopedBlock")
\
- V(kSharedFunctionInfoLiteral, "Shared function info
literal") \
V(kSmiAdditionOverflow, "Smi addition
overflow") \
V(kSmiSubtractionOverflow, "Smi subtraction
overflow") \
V(kStackFrameTypesMustMatch, "stack frame types must
match") \
=======================================
--- /branches/bleeding_edge/src/parser.cc Tue Oct 1 09:27:03 2013 UTC
+++ /branches/bleeding_edge/src/parser.cc Tue Oct 1 09:47:37 2013 UTC
@@ -1667,27 +1667,6 @@
// because of lazy compilation.
DeclarationScope(VAR)->ForceEagerCompilation();
- // Compute the function template for the native function.
- v8::Handle<v8::FunctionTemplate> fun_template =
- extension_->GetNativeFunction(v8::Utils::ToLocal(name));
- ASSERT(!fun_template.IsEmpty());
-
- // Instantiate the function and create a shared function info from it.
- Handle<JSFunction> fun = Utils::OpenHandle(*fun_template->GetFunction());
- const int literals = fun->NumberOfLiterals();
- Handle<Code> code = Handle<Code>(fun->shared()->code());
- Handle<Code> construct_stub =
Handle<Code>(fun->shared()->construct_stub());
- bool is_generator = false;
- Handle<SharedFunctionInfo> shared =
- isolate()->factory()->NewSharedFunctionInfo(name, literals,
is_generator,
- code, Handle<ScopeInfo>(fun->shared()->scope_info()));
- shared->set_construct_stub(*construct_stub);
-
- // Copy the function data to the shared function info.
- shared->set_function_data(fun->shared()->function_data());
- int parameters = fun->shared()->formal_parameter_count();
- shared->set_formal_parameter_count(parameters);
-
// TODO(1240846): It's weird that native function declarations are
// introduced dynamically when we meet their declarations, whereas
// other functions are set up when entering the surrounding scope.
@@ -1695,8 +1674,8 @@
Declaration* declaration =
factory()->NewVariableDeclaration(proxy, VAR, top_scope_);
Declare(declaration, true, CHECK_OK);
- SharedFunctionInfoLiteral* lit =
- factory()->NewSharedFunctionInfoLiteral(shared);
+ NativeFunctionLiteral* lit =
+ factory()->NewNativeFunctionLiteral(name, extension_);
return factory()->NewExpressionStatement(
factory()->NewAssignment(
Token::INIT_VAR, proxy, lit, RelocInfo::kNoPosition));
=======================================
--- /branches/bleeding_edge/src/prettyprinter.cc Mon Sep 30 17:42:58 2013
UTC
+++ /branches/bleeding_edge/src/prettyprinter.cc Tue Oct 1 09:47:37 2013
UTC
@@ -297,10 +297,9 @@
}
-void PrettyPrinter::VisitSharedFunctionInfoLiteral(
- SharedFunctionInfoLiteral* node) {
+void PrettyPrinter::VisitNativeFunctionLiteral(NativeFunctionLiteral*
node) {
Print("(");
- PrintLiteral(node->shared_function_info(), true);
+ PrintLiteral(node->name(), false);
Print(")");
}
@@ -982,10 +981,9 @@
}
-void AstPrinter::VisitSharedFunctionInfoLiteral(
- SharedFunctionInfoLiteral* node) {
- IndentedScope indent(this, "FUNC LITERAL");
- PrintLiteralIndented("SHARED INFO", node->shared_function_info(), true);
+void AstPrinter::VisitNativeFunctionLiteral(NativeFunctionLiteral* node) {
+ IndentedScope indent(this, "NATIVE FUNC LITERAL");
+ PrintLiteralIndented("NAME", node->name(), false);
}
=======================================
--- /branches/bleeding_edge/src/typing.cc Mon Sep 30 17:42:58 2013 UTC
+++ /branches/bleeding_edge/src/typing.cc Tue Oct 1 09:47:37 2013 UTC
@@ -305,7 +305,7 @@
}
-void AstTyper::VisitSharedFunctionInfoLiteral(SharedFunctionInfoLiteral*
expr) {
+void AstTyper::VisitNativeFunctionLiteral(NativeFunctionLiteral* expr) {
}
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.