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.


Reply via email to