Reviewers: ,
Description:
Add some more (failing) tests for function names inference.
After the "Naming Anonymous JavaScript Functions" paper by
S. M. Ecole, J. J. Barton, C. Petitpierre.
[email protected]
BUG=1354
TEST=test-func-name-inference/*
Please review this at http://codereview.chromium.org/6893135/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M test/cctest/cctest.status
M test/cctest/test-func-name-inference.cc
Index: test/cctest/cctest.status
diff --git a/test/cctest/cctest.status b/test/cctest/cctest.status
index
bf625207755098bd4af4903e4f9b519a6bdc4227..d4050c2bc25ef129b505b7d895c578249485a4a0
100644
--- a/test/cctest/cctest.status
+++ b/test/cctest/cctest.status
@@ -42,6 +42,14 @@ test-serialize/TestThatAlwaysFails: FAIL
test-serialize/DependentTestThatAlwaysFails: FAIL
##############################################################################
+# BUG(1354): Bad function name inference
+test-func-name-inference/FactoryHashmapConditional: FAIL
+test-func-name-inference/FactoryHashmapVariable: FAIL
+test-func-name-inference/FactoryHashmap: FAIL
+test-func-name-inference/MultipleAssignments: FAIL
+test-func-name-inference/PassedAsConstructorParameter: FAIL
+
+##############################################################################
[ $arch == arm ]
# We cannot assume that we can throw OutOfMemory exceptions in all
situations.
@@ -95,6 +103,3 @@ test-sockets: SKIP
test-strings: SKIP
test-threads: SKIP
test-thread-termination: SKIP
-
-##############################################################################
-# Tests that time out with Isolates
Index: test/cctest/test-func-name-inference.cc
diff --git a/test/cctest/test-func-name-inference.cc
b/test/cctest/test-func-name-inference.cc
index
dea5c47735b8d847f442c16884ff8377611642ae..80f9bd189a06fe3cf4ad1b219f93ce00846c1222
100644
--- a/test/cctest/test-func-name-inference.cc
+++ b/test/cctest/test-func-name-inference.cc
@@ -281,3 +281,74 @@ TEST(Issue380) {
"}");
CheckFunctionName(script, "return p", "");
}
+
+
+TEST(MultipleAssignments) {
+ InitializeVM();
+ v8::HandleScope scope;
+
+ v8::Handle<v8::Script> script = Compile(
+ "var fun1 = fun2 = function () { return 1; }");
+ CheckFunctionName(script, "return 1", "fun2");
+}
+
+
+TEST(PassedAsConstructorParameter) {
+ InitializeVM();
+ v8::HandleScope scope;
+
+ v8::Handle<v8::Script> script = Compile(
+ "function Foo() {}\n"
+ "var foo = new Foo(function() { return 1; })");
+ CheckFunctionName(script, "return 1", "");
+}
+
+
+TEST(FactoryHashmap) {
+ InitializeVM();
+ v8::HandleScope scope;
+
+ v8::Handle<v8::Script> script = Compile(
+ "function createMyObj() {\n"
+ " var obj = {};\n"
+ " obj[\"method1\"] = function() { return 1; }\n"
+ " obj[\"method2\"] = function() { return 2; }\n"
+ " return obj;\n"
+ "}");
+ CheckFunctionName(script, "return 1", "obj.method1");
+ CheckFunctionName(script, "return 2", "obj.method2");
+}
+
+
+TEST(FactoryHashmapVariable) {
+ InitializeVM();
+ v8::HandleScope scope;
+
+ v8::Handle<v8::Script> script = Compile(
+ "function createMyObj() {\n"
+ " var obj = {};\n"
+ " var methodName = \"method1\";\n"
+ " obj[methodName] = function() { return 1; }\n"
+ " methodName = \"method2\";\n"
+ " obj[methodName] = function() { return 2; }\n"
+ " return obj;\n"
+ "}");
+ // Can't infer function names statically.
+ CheckFunctionName(script, "return 1", "obj.(anonymous function)");
+ CheckFunctionName(script, "return 2", "obj.(anonymous function)");
+}
+
+
+TEST(FactoryHashmapConditional) {
+ InitializeVM();
+ v8::HandleScope scope;
+
+ v8::Handle<v8::Script> script = Compile(
+ "function createMyObj() {\n"
+ " var obj = {};\n"
+ " obj[0 ? \"method1\" : \"method2\"] = function() { return 1; }\n"
+ " return obj;\n"
+ "}");
+ // Can't infer the function name statically.
+ CheckFunctionName(script, "return 1", "obj.(anonymous function)");
+}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev