Reviewers: Yang,
Description:
Handlify Accessors::FunctionGetArguments method.
[email protected]
Please review this at https://codereview.chromium.org/19638003/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/accessors.h
M src/accessors.cc
M src/deoptimizer.cc
M src/runtime.cc
Index: src/accessors.cc
diff --git a/src/accessors.cc b/src/accessors.cc
index
648f1135bc7f3f1fb2009a1b1cc46c821a59c70e..51db3615c382f38d787333b98ac753bf9e7f83d9
100644
--- a/src/accessors.cc
+++ b/src/accessors.cc
@@ -576,6 +576,13 @@ const AccessorDescriptor Accessors::FunctionName = {
//
+Handle<Object> Accessors::FunctionGetArguments(Handle<Object> object) {
+ Isolate* isolate = Isolate::Current();
+ CALL_HEAP_FUNCTION(
+ isolate, Accessors::FunctionGetArguments(*object, 0), Object);
+}
+
+
static MaybeObject* ConstructArgumentsObjectForInlinedFunction(
JavaScriptFrame* frame,
Handle<JSFunction> inlined_function,
Index: src/accessors.h
diff --git a/src/accessors.h b/src/accessors.h
index
a7e67b524d58ee5ee10289832ad8aaf0ed0f57cb..ae56a3d444914365571c28e8ced7be99265eb5e1
100644
--- a/src/accessors.h
+++ b/src/accessors.h
@@ -78,11 +78,11 @@ class Accessors : public AllStatic {
// Accessor functions called directly from the runtime system.
static Handle<Object> FunctionGetPrototype(Handle<Object> object);
+ static Handle<Object> FunctionGetArguments(Handle<Object> object);
MUST_USE_RESULT static MaybeObject* FunctionSetPrototype(JSObject*
object,
Object* value,
void*);
- static MaybeObject* FunctionGetArguments(Object* object, void*);
// Accessor infos.
static Handle<AccessorInfo> MakeModuleExport(
@@ -90,10 +90,11 @@ class Accessors : public AllStatic {
private:
// Accessor functions only used through the descriptor.
+ static MaybeObject* FunctionGetPrototype(Object* object, void*);
static MaybeObject* FunctionGetLength(Object* object, void*);
static MaybeObject* FunctionGetName(Object* object, void*);
+ static MaybeObject* FunctionGetArguments(Object* object, void*);
static MaybeObject* FunctionGetCaller(Object* object, void*);
- static MaybeObject* FunctionGetPrototype(Object* object, void*);
MUST_USE_RESULT static MaybeObject* ArraySetLength(JSObject* object,
Object* value, void*);
static MaybeObject* ArrayGetLength(Object* object, void*);
Index: src/deoptimizer.cc
diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc
index
5f59fd9ab05584e96fec88e23ed8598ab5a0bc9b..4ee9fbe639159a12c0fab00d8114009baa7185cb
100644
--- a/src/deoptimizer.cc
+++ b/src/deoptimizer.cc
@@ -1620,9 +1620,7 @@ void
Deoptimizer::MaterializeHeapObjects(JavaScriptFrameIterator* it) {
// Use the arguments adapter frame we just built to
materialize the
// arguments object. FunctionGetArguments can't throw an
exception,
// so cast away the doubt with an assert.
- arguments = Handle<JSObject>(JSObject::cast(
- Accessors::FunctionGetArguments(*function,
-
NULL)->ToObjectUnchecked()));
+ arguments = Accessors::FunctionGetArguments(function);
values.RewindBy(length);
} else {
// Construct an arguments object and copy the parameters to a
newly
Index: src/runtime.cc
diff --git a/src/runtime.cc b/src/runtime.cc
index
c22a7f65a8a3e37fa292ff03eca8abc371144b1a..ed68e4b3eaf8425f0493e904088ae123bc22c2df
100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -12484,8 +12484,7 @@ RUNTIME_FUNCTION(MaybeObject*,
Runtime_ClearStepping) {
static Handle<JSObject> MaterializeArgumentsObject(
Isolate* isolate,
Handle<JSObject> target,
- Handle<JSFunction> function,
- FrameInspector* frame_inspector) {
+ Handle<JSFunction> function) {
// Do not materialize the arguments object for eval or top-level code.
// Skip if "arguments" is already taken.
if (!function->shared()->is_function() ||
@@ -12493,10 +12492,8 @@ static Handle<JSObject> MaterializeArgumentsObject(
return target;
}
- // FunctionGetArguments can't return a non-Object.
- Handle<JSObject> arguments(JSObject::cast(
- Accessors::FunctionGetArguments(frame_inspector->GetFunction(),
- NULL)->ToObjectUnchecked()),
isolate);
+ // FunctionGetArguments can't throw an exception.
+ Handle<JSObject> arguments = Accessors::FunctionGetArguments(function);
SetProperty(isolate,
target,
isolate->factory()->arguments_string(),
@@ -12600,8 +12597,7 @@ RUNTIME_FUNCTION(MaybeObject*,
Runtime_DebugEvaluate) {
isolate, materialized, function, &frame_inspector);
RETURN_IF_EMPTY_HANDLE(isolate, materialized);
- materialized = MaterializeArgumentsObject(
- isolate, materialized, function, &frame_inspector);
+ materialized = MaterializeArgumentsObject(isolate, materialized,
function);
RETURN_IF_EMPTY_HANDLE(isolate, materialized);
// Add the materialized object in a with-scope to shadow the stack
locals.
--
--
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.