18e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 2d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// Redistribution and use in source and binary forms, with or without 3d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// modification, are permitted provided that the following conditions are 4d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// met: 5d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// 6d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// * Redistributions of source code must retain the above copyright 7d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// notice, this list of conditions and the following disclaimer. 8d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// * Redistributions in binary form must reproduce the above 9d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// copyright notice, this list of conditions and the following 10d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// disclaimer in the documentation and/or other materials provided 11d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// with the distribution. 12d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// * Neither the name of Google Inc. nor the names of its 13d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// contributors may be used to endorse or promote products derived 14d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// from this software without specific prior written permission. 15d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// 16d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 2857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 29196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 30d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 31196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/api.h" 32196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/debug.h" 33196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/runtime.h" 34196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "test/cctest/cctest.h" 35d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 36d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 3771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgusing ::v8::internal::CStrVector; 3871affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgusing ::v8::internal::Factory; 39d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgusing ::v8::internal::Handle; 4071affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgusing ::v8::internal::Heap; 41ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgusing ::v8::internal::Isolate; 42d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgusing ::v8::internal::JSFunction; 43d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgusing ::v8::internal::Object; 4471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgusing ::v8::internal::Runtime; 45d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgusing ::v8::internal::Script; 4683e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.orgusing ::v8::internal::SmartArrayPointer; 47d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgusing ::v8::internal::SharedFunctionInfo; 48d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgusing ::v8::internal::String; 49d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 50d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 51d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgstatic void CheckFunctionName(v8::Handle<v8::Script> script, 52d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org const char* func_pos_src, 53d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org const char* ref_inferred_name) { 54528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 55d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org Factory* factory = isolate->factory(); 56d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org 57d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org // Get script source. 585d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org Handle<Object> obj = v8::Utils::OpenHandle(*script); 595d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org Handle<SharedFunctionInfo> shared_function; 605d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org if (obj->IsSharedFunctionInfo()) { 615d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org shared_function = 625d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org Handle<SharedFunctionInfo>(SharedFunctionInfo::cast(*obj)); 635d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org } else { 645d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org shared_function = 655d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org Handle<SharedFunctionInfo>(JSFunction::cast(*obj)->shared()); 665d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org } 675d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.org Handle<Script> i_script(Script::cast(shared_function->script())); 68d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CHECK(i_script->source()->IsString()); 69d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org Handle<String> script_src(String::cast(i_script->source())); 70d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 71d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org // Find the position of a given func source substring in the source. 72d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org Handle<String> func_pos_str = 738496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org factory->NewStringFromAsciiChecked(func_pos_src); 74d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org int func_pos = Runtime::StringMatch(isolate, 75ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org script_src, 76ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org func_pos_str, 77ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 0); 78d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CHECK_NE(0, func_pos); 79d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 80d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org // Obtain SharedFunctionInfo for the function. 81d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org isolate->debug()->PrepareForBreakPoints(); 82d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org Object* shared_func_info_ptr = 83d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org isolate->debug()->FindSharedFunctionInfoInScript(i_script, func_pos); 84528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org CHECK(shared_func_info_ptr != CcTest::heap()->undefined_value()); 85d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org Handle<SharedFunctionInfo> shared_func_info( 86d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org SharedFunctionInfo::cast(shared_func_info_ptr)); 87d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 88d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org // Verify inferred function name. 8983e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org SmartArrayPointer<char> inferred_name = 90d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org shared_func_info->inferred_name()->ToCString(); 91afbdadc5f06365a7889e7c1c1fdb7dbf596cce68machenbach@chromium.org CHECK_EQ(ref_inferred_name, inferred_name.get()); 92d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 93d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 94d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 95f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.orgstatic v8::Handle<v8::Script> Compile(v8::Isolate* isolate, const char* src) { 96f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org return v8::Script::Compile(v8::String::NewFromUtf8(isolate, src)); 97d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 98d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 99d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 100d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(GlobalProperty) { 101e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 102e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 103d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 104d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 105f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 106d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "fun1 = function() { return 1; }\n" 107d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "fun2 = function() { return 2; }\n"); 108d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", "fun1"); 109d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", "fun2"); 110d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 111d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 112d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 113d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(GlobalVar) { 114e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 115e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 116d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 117d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 118f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 119d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "var fun1 = function() { return 1; }\n" 120d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "var fun2 = function() { return 2; }\n"); 121d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", "fun1"); 122d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", "fun2"); 123d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 124d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 125d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 126d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(LocalVar) { 127e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 128e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 129d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 130d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 131f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 132d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "function outer() {\n" 133d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " var fun1 = function() { return 1; }\n" 134d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " var fun2 = function() { return 2; }\n" 135d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "}"); 136d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", "fun1"); 137d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", "fun2"); 138d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 139d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 140d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 141d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(InConstructor) { 142e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 143e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 144d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 145d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 146f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 147d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "function MyClass() {\n" 148d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " this.method1 = function() { return 1; }\n" 149d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " this.method2 = function() { return 2; }\n" 150d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "}"); 151d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", "MyClass.method1"); 152d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", "MyClass.method2"); 153d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 154d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 155d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 156d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(Factory) { 157e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 158e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 159d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 160d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 161f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 162d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "function createMyObj() {\n" 163d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " var obj = {};\n" 164d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " obj.method1 = function() { return 1; }\n" 165d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " obj.method2 = function() { return 2; }\n" 166d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " return obj;\n" 167d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "}"); 168d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", "obj.method1"); 169d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", "obj.method2"); 170d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 171d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 172d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 173d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(Static) { 174e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 175e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 176d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 177d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 178f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 179d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "function MyClass() {}\n" 180d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.static1 = function() { return 1; }\n" 181d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.static2 = function() { return 2; }\n" 182d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.MyInnerClass = {}\n" 183d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.MyInnerClass.static3 = function() { return 3; }\n" 184d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.MyInnerClass.static4 = function() { return 4; }"); 185d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", "MyClass.static1"); 186d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", "MyClass.static2"); 187d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 3", "MyClass.MyInnerClass.static3"); 188d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 4", "MyClass.MyInnerClass.static4"); 189d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 190d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 191d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 192d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(Prototype) { 193e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 194e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 195d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 196d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 197f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 198d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "function MyClass() {}\n" 199d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.prototype.method1 = function() { return 1; }\n" 200d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.prototype.method2 = function() { return 2; }\n" 201d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.MyInnerClass = function() {}\n" 202d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.MyInnerClass.prototype.method3 = function() { return 3; }\n" 203d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.MyInnerClass.prototype.method4 = function() { return 4; }"); 204d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", "MyClass.method1"); 205d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", "MyClass.method2"); 206d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 3", "MyClass.MyInnerClass.method3"); 207d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 4", "MyClass.MyInnerClass.method4"); 208d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 209d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 210d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 211d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(ObjectLiteral) { 212e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 213e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 214d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 215d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 216f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 217d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "function MyClass() {}\n" 218d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "MyClass.prototype = {\n" 219d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " method1: function() { return 1; },\n" 220d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org " method2: function() { return 2; } }"); 221d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", "MyClass.method1"); 222d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", "MyClass.method2"); 223d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 224d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 225d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 226d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgTEST(AsParameter) { 227e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 228e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 229d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org 230d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org v8::Handle<v8::Script> script = Compile( 231f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 232d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "function f1(a) { return a(); }\n" 233d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "function f2(a, b) { return a() + b(); }\n" 234d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "var result1 = f1(function() { return 1; })\n" 235d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org "var result2 = f2(function() { return 2; }, function() { return 3; })"); 236d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org // Can't infer names here. 237d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 1", ""); 238d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 2", ""); 239d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org CheckFunctionName(script, "return 3", ""); 240d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.org} 24165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 24265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 24365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.orgTEST(MultipleFuncsConditional) { 244e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 245e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 24665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 24765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org v8::Handle<v8::Script> script = Compile( 248f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 24965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org "fun1 = 0 ?\n" 25065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org " function() { return 1; } :\n" 25165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org " function() { return 2; }"); 25265dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org CheckFunctionName(script, "return 1", "fun1"); 25365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org CheckFunctionName(script, "return 2", "fun1"); 25465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org} 25565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 25665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 25765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.orgTEST(MultipleFuncsInLiteral) { 258e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 259e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 26065dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org 26165dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org v8::Handle<v8::Script> script = Compile( 262f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 26365dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org "function MyClass() {}\n" 26465dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org "MyClass.prototype = {\n" 26565dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org " method1: 0 ? function() { return 1; } :\n" 26665dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org " function() { return 2; } }"); 26765dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org CheckFunctionName(script, "return 1", "MyClass.method1"); 26865dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org CheckFunctionName(script, "return 2", "MyClass.method1"); 26965dad4b091d2925543c6326db635d0f7cf9e1edcager@chromium.org} 2705aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org 2715aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org 27279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.orgTEST(AnonymousInAnonymousClosure1) { 27379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org CcTest::InitializeVM(); 27479e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org v8::HandleScope scope(CcTest::isolate()); 27579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 27679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org v8::Handle<v8::Script> script = Compile( 277f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 27879e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org "(function() {\n" 27979e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " (function() {\n" 28079e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " var a = 1;\n" 28179e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " return;\n" 28279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " })();\n" 28379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " var b = function() {\n" 28479e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " var c = 1;\n" 28579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " return;\n" 28679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " };\n" 28779e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org "})();"); 28879e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org CheckFunctionName(script, "return", ""); 28979e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org} 29079e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 29179e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 29279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.orgTEST(AnonymousInAnonymousClosure2) { 29379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org CcTest::InitializeVM(); 29479e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org v8::HandleScope scope(CcTest::isolate()); 29579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 29679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org v8::Handle<v8::Script> script = Compile( 297f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 29879e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org "(function() {\n" 29979e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " (function() {\n" 30079e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " var a = 1;\n" 30179e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " return;\n" 30279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " })();\n" 30379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " var c = 1;\n" 30479e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org "})();"); 30579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org CheckFunctionName(script, "return", ""); 30679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org} 30779e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 30879e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 30979e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.orgTEST(NamedInAnonymousClosure) { 31079e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org CcTest::InitializeVM(); 31179e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org v8::HandleScope scope(CcTest::isolate()); 31279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 31379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org v8::Handle<v8::Script> script = Compile( 314f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 31579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org "var foo = function() {\n" 31679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " (function named() {\n" 31779e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " var a = 1;\n" 31879e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " })();\n" 31979e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " var c = 1;\n" 32079e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org " return;\n" 32179e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org "};"); 32279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org CheckFunctionName(script, "return", "foo"); 32379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org} 32479e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 32579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org 3265aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org// See http://code.google.com/p/v8/issues/detail?id=380 3275aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.orgTEST(Issue380) { 328e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 329e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 3305aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org 3315aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org v8::Handle<v8::Script> script = Compile( 332f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 3335aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org "function a() {\n" 3345aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org "var result = function(p,a,c,k,e,d)" 3355aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org "{return p}(\"if blah blah\",62,1976,\'a|b\'.split(\'|\'),0,{})\n" 3365aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org "}"); 3375aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org CheckFunctionName(script, "return p", ""); 3385aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org} 3398e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3408e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3418e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.orgTEST(MultipleAssignments) { 342e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 343e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 3448e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3458e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org v8::Handle<v8::Script> script = Compile( 346f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 34704921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org "var fun1 = fun2 = function () { return 1; }\n" 34804921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org "var bar1 = bar2 = bar3 = function () { return 2; }\n" 34904921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org "foo1 = foo2 = function () { return 3; }\n" 35004921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org "baz1 = baz2 = baz3 = function () { return 4; }"); 3518e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org CheckFunctionName(script, "return 1", "fun2"); 35204921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org CheckFunctionName(script, "return 2", "bar3"); 35304921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org CheckFunctionName(script, "return 3", "foo2"); 35404921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org CheckFunctionName(script, "return 4", "baz3"); 3558e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org} 3568e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3578e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 35804921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.orgTEST(AsConstructorParameter) { 359e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 360e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 3618e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3628e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org v8::Handle<v8::Script> script = Compile( 363f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 3648e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org "function Foo() {}\n" 36504921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org "var foo = new Foo(function() { return 1; })\n" 36604921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org "var bar = new Foo(function() { return 2; }, function() { return 3; })"); 3678e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org CheckFunctionName(script, "return 1", ""); 36804921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org CheckFunctionName(script, "return 2", ""); 36904921a8093ce8bbec34084bd742b7aa3d299be15ager@chromium.org CheckFunctionName(script, "return 3", ""); 3708e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org} 3718e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3728e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3738e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.orgTEST(FactoryHashmap) { 374e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 375e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 3768e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3778e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org v8::Handle<v8::Script> script = Compile( 378f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 3798e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org "function createMyObj() {\n" 3808e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " var obj = {};\n" 3818e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " obj[\"method1\"] = function() { return 1; }\n" 3828e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " obj[\"method2\"] = function() { return 2; }\n" 3838e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " return obj;\n" 3848e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org "}"); 3858e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org CheckFunctionName(script, "return 1", "obj.method1"); 3868e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org CheckFunctionName(script, "return 2", "obj.method2"); 3878e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org} 3888e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3898e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3908e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.orgTEST(FactoryHashmapVariable) { 391e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 392e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 3938e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 3948e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org v8::Handle<v8::Script> script = Compile( 395f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 3968e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org "function createMyObj() {\n" 3978e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " var obj = {};\n" 3988e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " var methodName = \"method1\";\n" 3998e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " obj[methodName] = function() { return 1; }\n" 4008e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " methodName = \"method2\";\n" 4018e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " obj[methodName] = function() { return 2; }\n" 4028e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " return obj;\n" 4038e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org "}"); 4048e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org // Can't infer function names statically. 4058e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org CheckFunctionName(script, "return 1", "obj.(anonymous function)"); 4068e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org CheckFunctionName(script, "return 2", "obj.(anonymous function)"); 4078e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org} 4088e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 4098e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 4108e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.orgTEST(FactoryHashmapConditional) { 411e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 412e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 4138e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org 4148e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org v8::Handle<v8::Script> script = Compile( 415f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 4168e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org "function createMyObj() {\n" 4178e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " var obj = {};\n" 4188e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " obj[0 ? \"method1\" : \"method2\"] = function() { return 1; }\n" 4198e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org " return obj;\n" 4208e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org "}"); 4218e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org // Can't infer the function name statically. 4228e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org CheckFunctionName(script, "return 1", "obj.(anonymous function)"); 4238e8294a88dc7d58f579aee0ba08c19fc8a616e2dsgjesse@chromium.org} 424c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 425c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 426c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comTEST(GlobalAssignmentAndCall) { 427e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 428e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 429c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 430c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com v8::Handle<v8::Script> script = Compile( 431f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 432c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com "var Foo = function() {\n" 433c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " return 1;\n" 434c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com "}();\n" 435c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com "var Baz = Bar = function() {\n" 436c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " return 2;\n" 437c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com "}"); 438c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // The inferred name is empty, because this is an assignment of a result. 439c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CheckFunctionName(script, "return 1", ""); 440c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // See MultipleAssignments test. 441c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CheckFunctionName(script, "return 2", "Bar"); 442c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 443c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 444c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 445c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comTEST(AssignmentAndCall) { 446e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 447e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 448c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 449c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com v8::Handle<v8::Script> script = Compile( 450f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 451c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com "(function Enclosing() {\n" 452c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " var Foo;\n" 453c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " Foo = function() {\n" 454c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " return 1;\n" 455c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " }();\n" 456c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " var Baz = Bar = function() {\n" 457c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " return 2;\n" 458c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com " }\n" 459c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com "})();"); 460c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // The inferred name is empty, because this is an assignment of a result. 461c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CheckFunctionName(script, "return 1", ""); 462c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // See MultipleAssignments test. 463471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org // TODO(2276): Lazy compiling the enclosing outer closure would yield 464471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org // in "Enclosing.Bar" being the inferred name here. 465471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org CheckFunctionName(script, "return 2", "Bar"); 466c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 467830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 468830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 469830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgTEST(MethodAssignmentInAnonymousFunctionCall) { 470e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 471e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 472830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 473830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org v8::Handle<v8::Script> script = Compile( 474f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 475830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org "(function () {\n" 476830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " var EventSource = function () { };\n" 477830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " EventSource.prototype.addListener = function () {\n" 478830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " return 2012;\n" 479830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " };\n" 480830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " this.PublicEventSource = EventSource;\n" 481830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org "})();"); 482830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org CheckFunctionName(script, "return 2012", "EventSource.addListener"); 483830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org} 484830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 485830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 486830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgTEST(ReturnAnonymousFunction) { 487e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 488e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org v8::HandleScope scope(CcTest::isolate()); 489830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 490830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org v8::Handle<v8::Script> script = Compile( 491f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org CcTest::isolate(), 492830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org "(function() {\n" 493830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " function wrapCode() {\n" 494830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " return function () {\n" 495830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " return 2012;\n" 496830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " };\n" 497830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " };\n" 498830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " var foo = 10;\n" 499830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " function f() {\n" 500830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " return wrapCode();\n" 501830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " }\n" 502830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org " this.ref = f;\n" 503830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org "})()"); 504830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org script->Run(); 505830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org CheckFunctionName(script, "return 2012", ""); 506830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org} 507