Author: [email protected]
Date: Tue May  5 11:12:03 2009
New Revision: 1871

Modified:
    branches/bleeding_edge/src/mirror-delay.js
    branches/bleeding_edge/src/runtime.cc
    branches/bleeding_edge/src/runtime.h
    branches/bleeding_edge/test/mjsunit/debug-backtrace.js
    branches/bleeding_edge/test/mjsunit/mirror-unresolved-function.js

Log:
Add function inferred name to FunctionMirror and its json representation.
Review URL: http://codereview.chromium.org/109026

Modified: branches/bleeding_edge/src/mirror-delay.js
==============================================================================
--- branches/bleeding_edge/src/mirror-delay.js  (original)
+++ branches/bleeding_edge/src/mirror-delay.js  Tue May  5 11:12:03 2009
@@ -756,6 +756,15 @@


  /**
+ * Returns the inferred name of the function.
+ * @return {string} Name of the function
+ */
+FunctionMirror.prototype.inferredName = function() {
+  return %FunctionGetInferredName(this.value_);
+};
+
+
+/**
   * Returns the source code for the function.
   * @return {string or undefined} The source code for the function. If the
   *     function is not resolved undefined will be returned.
@@ -857,6 +866,11 @@
  };


+UnresolvedFunctionMirror.prototype.inferredName = function() {
+  return undefined;
+};
+
+
  UnresolvedFunctionMirror.prototype.propertyNames = function(kind, limit) {
    return [];
  }
@@ -1835,6 +1849,10 @@
    if (mirror.isFunction()) {
      // Add function specific properties.
      content.push(MakeJSONPair_('name', StringToJSON_(mirror.name())));
+    if (!IS_UNDEFINED(mirror.inferredName())) {
+      content.push(MakeJSONPair_('inferredName',
+                                 StringToJSON_(mirror.inferredName())));
+    }
      content.push(MakeJSONPair_('resolved',  
BooleanToJSON_(mirror.resolved())));
      if (mirror.resolved()) {
        content.push(MakeJSONPair_('source',  
StringToJSON_(mirror.source())));

Modified: branches/bleeding_edge/src/runtime.cc
==============================================================================
--- branches/bleeding_edge/src/runtime.cc       (original)
+++ branches/bleeding_edge/src/runtime.cc       Tue May  5 11:12:03 2009
@@ -6860,6 +6860,15 @@
  #endif  // DEBUG
    return Heap::undefined_value();
  }
+
+
+static Object* Runtime_FunctionGetInferredName(Arguments args) {
+  NoHandleAllocation ha;
+  ASSERT(args.length() == 1);
+
+  CONVERT_CHECKED(JSFunction, f, args[0]);
+  return f->shared()->inferred_name();
+}
  #endif  // ENABLE_DEBUGGER_SUPPORT



Modified: branches/bleeding_edge/src/runtime.h
==============================================================================
--- branches/bleeding_edge/src/runtime.h        (original)
+++ branches/bleeding_edge/src/runtime.h        Tue May  5 11:12:03 2009
@@ -298,7 +298,8 @@
    F(DebugConstructedBy, 2) \
    F(DebugGetPrototype, 1) \
    F(SystemBreak, 0) \
-  F(FunctionGetAssemblerCode, 1)
+  F(FunctionGetAssemblerCode, 1) \
+  F(FunctionGetInferredName, 1)
  #else
  #define RUNTIME_FUNCTION_LIST_DEBUGGER_SUPPORT(F)
  #endif

Modified: branches/bleeding_edge/test/mjsunit/debug-backtrace.js
==============================================================================
--- branches/bleeding_edge/test/mjsunit/debug-backtrace.js      (original)
+++ branches/bleeding_edge/test/mjsunit/debug-backtrace.js      Tue May  5  
11:12:03 2009
@@ -32,10 +32,14 @@
    a=1;
  };

-function g() {
+var m = function() {
    new f(1);
  };

+function g() {
+ m();
+};
+

  // Get the Debug object exposed from the debug context global object.
  Debug = debug.Debug
@@ -90,22 +94,26 @@
      // Get the backtrace.
      var json;
      json = '{"seq":0,"type":"request","command":"backtrace"}'
-    response = new ParsedResponse(dcp.processDebugJSONRequest(json));
+    var resp = dcp.processDebugJSONRequest(json);
+    response = new ParsedResponse(resp);
      backtrace = response.body();
      assertEquals(0, backtrace.fromFrame);
-    assertEquals(3, backtrace.toFrame);
-    assertEquals(3, backtrace.totalFrames);
+    assertEquals(4, backtrace.toFrame);
+    assertEquals(4, backtrace.totalFrames);
      var frames = backtrace.frames;
-    assertEquals(3, frames.length);
+    assertEquals(4, frames.length);
      for (var i = 0; i < frames.length; i++) {
        assertEquals('frame', frames[i].type);
      }
      assertEquals(0, frames[0].index);
      assertEquals("f", response.lookup(frames[0].func.ref).name);
      assertEquals(1, frames[1].index);
-    assertEquals("g", response.lookup(frames[1].func.ref).name);
+    assertEquals("", response.lookup(frames[1].func.ref).name);
+    assertEquals("m", response.lookup(frames[1].func.ref).inferredName);
      assertEquals(2, frames[2].index);
-    assertEquals("", response.lookup(frames[2].func.ref).name);
+    assertEquals("g", response.lookup(frames[2].func.ref).name);
+    assertEquals(3, frames[3].index);
+    assertEquals("", response.lookup(frames[3].func.ref).name);

      // Get backtrace with two frames.
      json  
= 
'{"seq":0,"type":"request","command":"backtrace","arguments":{"fromFrame":1,"toFrame":3}}'
@@ -113,16 +121,17 @@
      backtrace = response.body();
      assertEquals(1, backtrace.fromFrame);
      assertEquals(3, backtrace.toFrame);
-    assertEquals(3, backtrace.totalFrames);
+    assertEquals(4, backtrace.totalFrames);
      var frames = backtrace.frames;
      assertEquals(2, frames.length);
      for (var i = 0; i < frames.length; i++) {
        assertEquals('frame', frames[i].type);
      }
      assertEquals(1, frames[0].index);
-    assertEquals("g", response.lookup(frames[0].func.ref).name);
+    assertEquals("", response.lookup(frames[0].func.ref).name);
+    assertEquals("m", response.lookup(frames[0].func.ref).inferredName);
      assertEquals(2, frames[1].index);
-    assertEquals("", response.lookup(frames[1].func.ref).name);
+    assertEquals("g", response.lookup(frames[1].func.ref).name);

      // Get the individual frames.
      json = '{"seq":0,"type":"request","command":"frame"}'
@@ -158,16 +167,17 @@
      response = new ParsedResponse(dcp.processDebugJSONRequest(json));
      frame = response.body();
      assertEquals(1, frame.index);
-    assertEquals("g", response.lookup(frame.func.ref).name);
+    assertEquals("", response.lookup(frame.func.ref).name);
+    assertEquals("m", response.lookup(frame.func.ref).inferredName);
      assertFalse(frame.constructCall);
      assertEquals(35, frame.line);
      assertEquals(2, frame.column);
      assertEquals(0, frame.arguments.length);

-    json  
= '{"seq":0,"type":"request","command":"frame","arguments":{"number":2}}'
+    json  
= '{"seq":0,"type":"request","command":"frame","arguments":{"number":3}}'
      response = new ParsedResponse(dcp.processDebugJSONRequest(json));
      frame = response.body();
-    assertEquals(2, frame.index);
+    assertEquals(3, frame.index);
      assertEquals("", response.lookup(frame.func.ref).name);

      // Source slices for the individual frames (they all refer to this  
script).

Modified: branches/bleeding_edge/test/mjsunit/mirror-unresolved-function.js
==============================================================================
--- branches/bleeding_edge/test/mjsunit/mirror-unresolved-function.js    
(original)
+++ branches/bleeding_edge/test/mjsunit/mirror-unresolved-function.js   Tue  
May  5 11:12:03 2009
@@ -57,6 +57,7 @@
  assertFalse(mirror.isPrimitive());
  assertEquals("Function", mirror.className());
  assertEquals("f", mirror.name());
+assertEquals('undefined', typeof mirror.inferredName());
  assertFalse(mirror.resolved());
  assertEquals(void 0, mirror.source());
  assertEquals('undefined', mirror.constructorFunction().type());
@@ -75,4 +76,5 @@
  assertEquals('undefined',  
refs.lookup(fromJSON.prototypeObject.ref).type, 'Unexpected prototype  
object type in JSON');
  assertFalse(fromJSON.resolved);
  assertEquals("f", fromJSON.name);
+assertFalse('inferredName' in fromJSON);
  assertEquals(void 0, fromJSON.source);

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to