Author: [email protected]
Date: Tue Jun 16 04:47:00 2009
New Revision: 2185

Modified:
    branches/bleeding_edge/src/rewriter.cc
    branches/bleeding_edge/test/cctest/test-func-name-inference.cc

Log:
Fix issue 380.

Don't infer name for a function if a result of its call is assigned to a  
variable / property. E.g., in this case:

   a = function() { ... } ();

the function must remain anonymous because 'a' doesn't receive a function  
reference, but instead a result of its call.

BUG=http://code.google.com/p/v8/issues/detail?id=380
TEST=cctest/test-func-name-inference/Issue380

Review URL: http://codereview.chromium.org/126195


Modified: branches/bleeding_edge/src/rewriter.cc
==============================================================================
--- branches/bleeding_edge/src/rewriter.cc      (original)
+++ branches/bleeding_edge/src/rewriter.cc      Tue Jun 16 04:47:00 2009
@@ -283,7 +283,10 @@
      case Token::ASSIGN:
        // No type can be infered from the general assignment.

-      scoped_fni.Enter();
+      // Don't infer if it is "a = function(){...}();"-like expression.
+      if (node->value()->AsCall() == NULL) {
+        scoped_fni.Enter();
+      }
        break;
      case Token::ASSIGN_BIT_OR:
      case Token::ASSIGN_BIT_XOR:

Modified: branches/bleeding_edge/test/cctest/test-func-name-inference.cc
==============================================================================
--- branches/bleeding_edge/test/cctest/test-func-name-inference.cc       
(original)
+++ branches/bleeding_edge/test/cctest/test-func-name-inference.cc      Tue Jun 
 
16 04:47:00 2009
@@ -251,3 +251,17 @@
    CheckFunctionName(script, "return 1", "MyClass.method1");
    CheckFunctionName(script, "return 2", "MyClass.method1");
  }
+
+
+// See http://code.google.com/p/v8/issues/detail?id=380
+TEST(Issue380) {
+  InitializeVM();
+  v8::HandleScope scope;
+
+  v8::Handle<v8::Script> script = Compile(
+      "function a() {\n"
+      "var result = function(p,a,c,k,e,d)"
+      "{return p}(\"if blah blah\",62,1976,\'a|b\'.split(\'|\'),0,{})\n"
+      "}");
+  CheckFunctionName(script, "return p", "");
+}

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

Reply via email to