Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(435)

Side by Side Diff: test/cctest/test-heap.cc

Issue 239243018: Heap::AllocateStringFromOneByte() and major part of its callers handlified. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressing comment + some cleanup Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/cctest/test-hashing.cc ('k') | test/cctest/test-heap-profiler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 value = factory->NewNumberFromUint(static_cast<uint32_t>(1) << 31); 197 value = factory->NewNumberFromUint(static_cast<uint32_t>(1) << 31);
198 CHECK(value->IsHeapNumber()); 198 CHECK(value->IsHeapNumber());
199 CHECK(value->IsNumber()); 199 CHECK(value->IsNumber());
200 CHECK_EQ(static_cast<double>(static_cast<uint32_t>(1) << 31), 200 CHECK_EQ(static_cast<double>(static_cast<uint32_t>(1) << 31),
201 value->Number()); 201 value->Number());
202 202
203 // nan oddball checks 203 // nan oddball checks
204 CHECK(factory->nan_value()->IsNumber()); 204 CHECK(factory->nan_value()->IsNumber());
205 CHECK(std::isnan(factory->nan_value()->Number())); 205 CHECK(std::isnan(factory->nan_value()->Number()));
206 206
207 Handle<String> s = factory->NewStringFromAscii(CStrVector("fisk hest ")); 207 Handle<String> s = factory->NewStringFromStaticAscii("fisk hest ");
208 CHECK(s->IsString()); 208 CHECK(s->IsString());
209 CHECK_EQ(10, s->length()); 209 CHECK_EQ(10, s->length());
210 210
211 Handle<String> object_string = Handle<String>::cast(factory->Object_string()); 211 Handle<String> object_string = Handle<String>::cast(factory->Object_string());
212 Handle<GlobalObject> global(CcTest::i_isolate()->context()->global_object()); 212 Handle<GlobalObject> global(CcTest::i_isolate()->context()->global_object());
213 CHECK(JSReceiver::HasLocalProperty(global, object_string)); 213 CHECK(JSReceiver::HasLocalProperty(global, object_string));
214 214
215 // Check ToString for oddballs 215 // Check ToString for oddballs
216 CheckOddball(isolate, heap->true_value(), "true"); 216 CheckOddball(isolate, heap->true_value(), "true");
217 CheckOddball(isolate, heap->false_value(), "false"); 217 CheckOddball(isolate, heap->false_value(), "false");
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 Handle<Object> obj = 312 Handle<Object> obj =
313 Object::GetProperty(global, obj_name).ToHandleChecked(); 313 Object::GetProperty(global, obj_name).ToHandleChecked();
314 CHECK(obj->IsJSObject()); 314 CHECK(obj->IsJSObject());
315 CHECK_EQ(Smi::FromInt(23), 315 CHECK_EQ(Smi::FromInt(23),
316 *Object::GetProperty(obj, prop_name).ToHandleChecked()); 316 *Object::GetProperty(obj, prop_name).ToHandleChecked());
317 } 317 }
318 318
319 319
320 static void VerifyStringAllocation(Isolate* isolate, const char* string) { 320 static void VerifyStringAllocation(Isolate* isolate, const char* string) {
321 HandleScope scope(isolate); 321 HandleScope scope(isolate);
322 Handle<String> s = isolate->factory()->NewStringFromUtf8(CStrVector(string)); 322 Handle<String> s = isolate->factory()->NewStringFromUtf8(
323 CStrVector(string)).ToHandleChecked();
323 CHECK_EQ(StrLength(string), s->length()); 324 CHECK_EQ(StrLength(string), s->length());
324 for (int index = 0; index < s->length(); index++) { 325 for (int index = 0; index < s->length(); index++) {
325 CHECK_EQ(static_cast<uint16_t>(string[index]), s->Get(index)); 326 CHECK_EQ(static_cast<uint16_t>(string[index]), s->Get(index));
326 } 327 }
327 } 328 }
328 329
329 330
330 TEST(String) { 331 TEST(String) {
331 CcTest::InitializeVM(); 332 CcTest::InitializeVM();
332 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); 333 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate());
333 334
334 VerifyStringAllocation(isolate, "a"); 335 VerifyStringAllocation(isolate, "a");
335 VerifyStringAllocation(isolate, "ab"); 336 VerifyStringAllocation(isolate, "ab");
336 VerifyStringAllocation(isolate, "abc"); 337 VerifyStringAllocation(isolate, "abc");
337 VerifyStringAllocation(isolate, "abcd"); 338 VerifyStringAllocation(isolate, "abcd");
338 VerifyStringAllocation(isolate, "fiskerdrengen er paa havet"); 339 VerifyStringAllocation(isolate, "fiskerdrengen er paa havet");
339 } 340 }
340 341
341 342
342 TEST(LocalHandles) { 343 TEST(LocalHandles) {
343 CcTest::InitializeVM(); 344 CcTest::InitializeVM();
344 Isolate* isolate = CcTest::i_isolate(); 345 Isolate* isolate = CcTest::i_isolate();
345 Factory* factory = isolate->factory(); 346 Factory* factory = isolate->factory();
346 347
347 v8::HandleScope scope(CcTest::isolate()); 348 v8::HandleScope scope(CcTest::isolate());
348 const char* name = "Kasper the spunky"; 349 const char* name = "Kasper the spunky";
349 Handle<String> string = factory->NewStringFromAscii(CStrVector(name)); 350 Handle<String> string = factory->NewStringFromAsciiChecked(name);
350 CHECK_EQ(StrLength(name), string->length()); 351 CHECK_EQ(StrLength(name), string->length());
351 } 352 }
352 353
353 354
354 TEST(GlobalHandles) { 355 TEST(GlobalHandles) {
355 CcTest::InitializeVM(); 356 CcTest::InitializeVM();
356 Isolate* isolate = CcTest::i_isolate(); 357 Isolate* isolate = CcTest::i_isolate();
357 Heap* heap = isolate->heap(); 358 Heap* heap = isolate->heap();
358 Factory* factory = isolate->factory(); 359 Factory* factory = isolate->factory();
359 GlobalHandles* global_handles = isolate->global_handles(); 360 GlobalHandles* global_handles = isolate->global_handles();
360 361
361 Handle<Object> h1; 362 Handle<Object> h1;
362 Handle<Object> h2; 363 Handle<Object> h2;
363 Handle<Object> h3; 364 Handle<Object> h3;
364 Handle<Object> h4; 365 Handle<Object> h4;
365 366
366 { 367 {
367 HandleScope scope(isolate); 368 HandleScope scope(isolate);
368 369
369 Handle<Object> i = factory->NewStringFromAscii(CStrVector("fisk")); 370 Handle<Object> i = factory->NewStringFromStaticAscii("fisk");
370 Handle<Object> u = factory->NewNumber(1.12344); 371 Handle<Object> u = factory->NewNumber(1.12344);
371 372
372 h1 = global_handles->Create(*i); 373 h1 = global_handles->Create(*i);
373 h2 = global_handles->Create(*u); 374 h2 = global_handles->Create(*u);
374 h3 = global_handles->Create(*i); 375 h3 = global_handles->Create(*i);
375 h4 = global_handles->Create(*u); 376 h4 = global_handles->Create(*u);
376 } 377 }
377 378
378 // after gc, it should survive 379 // after gc, it should survive
379 heap->CollectGarbage(NEW_SPACE); 380 heap->CollectGarbage(NEW_SPACE);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 GlobalHandles* global_handles = isolate->global_handles(); 415 GlobalHandles* global_handles = isolate->global_handles();
415 416
416 WeakPointerCleared = false; 417 WeakPointerCleared = false;
417 418
418 Handle<Object> h1; 419 Handle<Object> h1;
419 Handle<Object> h2; 420 Handle<Object> h2;
420 421
421 { 422 {
422 HandleScope scope(isolate); 423 HandleScope scope(isolate);
423 424
424 Handle<Object> i = factory->NewStringFromAscii(CStrVector("fisk")); 425 Handle<Object> i = factory->NewStringFromStaticAscii("fisk");
425 Handle<Object> u = factory->NewNumber(1.12344); 426 Handle<Object> u = factory->NewNumber(1.12344);
426 427
427 h1 = global_handles->Create(*i); 428 h1 = global_handles->Create(*i);
428 h2 = global_handles->Create(*u); 429 h2 = global_handles->Create(*u);
429 } 430 }
430 431
431 std::pair<Handle<Object>*, int> handle_and_id(&h2, 1234); 432 std::pair<Handle<Object>*, int> handle_and_id(&h2, 1234);
432 GlobalHandles::MakeWeak(h2.location(), 433 GlobalHandles::MakeWeak(h2.location(),
433 reinterpret_cast<void*>(&handle_and_id), 434 reinterpret_cast<void*>(&handle_and_id),
434 &TestWeakGlobalHandleCallback); 435 &TestWeakGlobalHandleCallback);
(...skipping 21 matching lines...) Expand all
456 GlobalHandles* global_handles = isolate->global_handles(); 457 GlobalHandles* global_handles = isolate->global_handles();
457 458
458 WeakPointerCleared = false; 459 WeakPointerCleared = false;
459 460
460 Handle<Object> h1; 461 Handle<Object> h1;
461 Handle<Object> h2; 462 Handle<Object> h2;
462 463
463 { 464 {
464 HandleScope scope(isolate); 465 HandleScope scope(isolate);
465 466
466 Handle<Object> i = factory->NewStringFromAscii(CStrVector("fisk")); 467 Handle<Object> i = factory->NewStringFromStaticAscii("fisk");
467 Handle<Object> u = factory->NewNumber(1.12344); 468 Handle<Object> u = factory->NewNumber(1.12344);
468 469
469 h1 = global_handles->Create(*i); 470 h1 = global_handles->Create(*i);
470 h2 = global_handles->Create(*u); 471 h2 = global_handles->Create(*u);
471 } 472 }
472 473
473 // Make sure the objects are promoted. 474 // Make sure the objects are promoted.
474 heap->CollectGarbage(OLD_POINTER_SPACE); 475 heap->CollectGarbage(OLD_POINTER_SPACE);
475 heap->CollectGarbage(NEW_SPACE); 476 heap->CollectGarbage(NEW_SPACE);
476 CHECK(!heap->InNewSpace(*h1) && !heap->InNewSpace(*h2)); 477 CHECK(!heap->InNewSpace(*h1) && !heap->InNewSpace(*h2));
(...skipping 25 matching lines...) Expand all
502 Factory* factory = isolate->factory(); 503 Factory* factory = isolate->factory();
503 GlobalHandles* global_handles = isolate->global_handles(); 504 GlobalHandles* global_handles = isolate->global_handles();
504 505
505 WeakPointerCleared = false; 506 WeakPointerCleared = false;
506 507
507 Handle<Object> h; 508 Handle<Object> h;
508 509
509 { 510 {
510 HandleScope scope(isolate); 511 HandleScope scope(isolate);
511 512
512 Handle<Object> i = factory->NewStringFromAscii(CStrVector("fisk")); 513 Handle<Object> i = factory->NewStringFromStaticAscii("fisk");
513 h = global_handles->Create(*i); 514 h = global_handles->Create(*i);
514 } 515 }
515 516
516 std::pair<Handle<Object>*, int> handle_and_id(&h, 1234); 517 std::pair<Handle<Object>*, int> handle_and_id(&h, 1234);
517 GlobalHandles::MakeWeak(h.location(), 518 GlobalHandles::MakeWeak(h.location(),
518 reinterpret_cast<void*>(&handle_and_id), 519 reinterpret_cast<void*>(&handle_and_id),
519 &TestWeakGlobalHandleCallback); 520 &TestWeakGlobalHandleCallback);
520 521
521 // Scanvenge does not recognize weak reference. 522 // Scanvenge does not recognize weak reference.
522 heap->CollectGarbage(NEW_SPACE); 523 heap->CollectGarbage(NEW_SPACE);
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 697
697 // delete second and then first 698 // delete second and then first
698 JSReceiver::DeleteProperty(obj, second, JSReceiver::NORMAL_DELETION).Check(); 699 JSReceiver::DeleteProperty(obj, second, JSReceiver::NORMAL_DELETION).Check();
699 CHECK(JSReceiver::HasLocalProperty(obj, first)); 700 CHECK(JSReceiver::HasLocalProperty(obj, first));
700 JSReceiver::DeleteProperty(obj, first, JSReceiver::NORMAL_DELETION).Check(); 701 JSReceiver::DeleteProperty(obj, first, JSReceiver::NORMAL_DELETION).Check();
701 CHECK(!JSReceiver::HasLocalProperty(obj, first)); 702 CHECK(!JSReceiver::HasLocalProperty(obj, first));
702 CHECK(!JSReceiver::HasLocalProperty(obj, second)); 703 CHECK(!JSReceiver::HasLocalProperty(obj, second));
703 704
704 // check string and internalized string match 705 // check string and internalized string match
705 const char* string1 = "fisk"; 706 const char* string1 = "fisk";
706 Handle<String> s1 = factory->NewStringFromAscii(CStrVector(string1)); 707 Handle<String> s1 = factory->NewStringFromAsciiChecked(string1);
707 JSReceiver::SetProperty(obj, s1, one, NONE, SLOPPY).Check(); 708 JSReceiver::SetProperty(obj, s1, one, NONE, SLOPPY).Check();
708 Handle<String> s1_string = factory->InternalizeUtf8String(string1); 709 Handle<String> s1_string = factory->InternalizeUtf8String(string1);
709 CHECK(JSReceiver::HasLocalProperty(obj, s1_string)); 710 CHECK(JSReceiver::HasLocalProperty(obj, s1_string));
710 711
711 // check internalized string and string match 712 // check internalized string and string match
712 const char* string2 = "fugl"; 713 const char* string2 = "fugl";
713 Handle<String> s2_string = factory->InternalizeUtf8String(string2); 714 Handle<String> s2_string = factory->InternalizeUtf8String(string2);
714 JSReceiver::SetProperty(obj, s2_string, one, NONE, SLOPPY).Check(); 715 JSReceiver::SetProperty(obj, s2_string, one, NONE, SLOPPY).Check();
715 Handle<String> s2 = factory->NewStringFromAscii(CStrVector(string2)); 716 Handle<String> s2 = factory->NewStringFromAsciiChecked(string2);
716 CHECK(JSReceiver::HasLocalProperty(obj, s2)); 717 CHECK(JSReceiver::HasLocalProperty(obj, s2));
717 } 718 }
718 719
719 720
720 TEST(JSObjectMaps) { 721 TEST(JSObjectMaps) {
721 CcTest::InitializeVM(); 722 CcTest::InitializeVM();
722 Isolate* isolate = CcTest::i_isolate(); 723 Isolate* isolate = CcTest::i_isolate();
723 Factory* factory = isolate->factory(); 724 Factory* factory = isolate->factory();
724 725
725 v8::HandleScope sc(CcTest::isolate()); 726 v8::HandleScope sc(CcTest::isolate());
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 non_ascii[3 * i + 1] = chars[1]; 868 non_ascii[3 * i + 1] = chars[1];
868 non_ascii[3 * i + 2] = chars[2]; 869 non_ascii[3 * i + 2] = chars[2];
869 } 870 }
870 Handle<String> non_ascii_sym = 871 Handle<String> non_ascii_sym =
871 factory->InternalizeUtf8String( 872 factory->InternalizeUtf8String(
872 Vector<const char>(non_ascii, 3 * length)); 873 Vector<const char>(non_ascii, 3 * length));
873 CHECK_EQ(length, non_ascii_sym->length()); 874 CHECK_EQ(length, non_ascii_sym->length());
874 Handle<String> ascii_sym = 875 Handle<String> ascii_sym =
875 factory->InternalizeOneByteString(OneByteVector(ascii, length)); 876 factory->InternalizeOneByteString(OneByteVector(ascii, length));
876 CHECK_EQ(length, ascii_sym->length()); 877 CHECK_EQ(length, ascii_sym->length());
877 Handle<String> non_ascii_str = 878 Handle<String> non_ascii_str = factory->NewStringFromUtf8(
878 factory->NewStringFromUtf8(Vector<const char>(non_ascii, 3 * length)); 879 Vector<const char>(non_ascii, 3 * length)).ToHandleChecked();
879 non_ascii_str->Hash(); 880 non_ascii_str->Hash();
880 CHECK_EQ(length, non_ascii_str->length()); 881 CHECK_EQ(length, non_ascii_str->length());
881 Handle<String> ascii_str = 882 Handle<String> ascii_str = factory->NewStringFromUtf8(
882 factory->NewStringFromUtf8(Vector<const char>(ascii, length)); 883 Vector<const char>(ascii, length)).ToHandleChecked();
883 ascii_str->Hash(); 884 ascii_str->Hash();
884 CHECK_EQ(length, ascii_str->length()); 885 CHECK_EQ(length, ascii_str->length());
885 DeleteArray(non_ascii); 886 DeleteArray(non_ascii);
886 DeleteArray(ascii); 887 DeleteArray(ascii);
887 } 888 }
888 } 889 }
889 890
890 891
891 static int ObjectsFoundInHeap(Heap* heap, Handle<Object> objs[], int size) { 892 static int ObjectsFoundInHeap(Heap* heap, Handle<Object> objs[], int size) {
892 // Count the number of objects found in the heap. 893 // Count the number of objects found in the heap.
(...skipping 23 matching lines...) Expand all
916 int next_objs_index = 0; 917 int next_objs_index = 0;
917 918
918 // Allocate a JS array to OLD_POINTER_SPACE and NEW_SPACE 919 // Allocate a JS array to OLD_POINTER_SPACE and NEW_SPACE
919 objs[next_objs_index++] = factory->NewJSArray(10); 920 objs[next_objs_index++] = factory->NewJSArray(10);
920 objs[next_objs_index++] = factory->NewJSArray(10, 921 objs[next_objs_index++] = factory->NewJSArray(10,
921 FAST_HOLEY_ELEMENTS, 922 FAST_HOLEY_ELEMENTS,
922 TENURED); 923 TENURED);
923 924
924 // Allocate a small string to OLD_DATA_SPACE and NEW_SPACE 925 // Allocate a small string to OLD_DATA_SPACE and NEW_SPACE
925 objs[next_objs_index++] = 926 objs[next_objs_index++] =
926 factory->NewStringFromAscii(CStrVector("abcdefghij")); 927 factory->NewStringFromStaticAscii("abcdefghij");
927 objs[next_objs_index++] = 928 objs[next_objs_index++] =
928 factory->NewStringFromAscii(CStrVector("abcdefghij"), TENURED); 929 factory->NewStringFromStaticAscii("abcdefghij", TENURED);
929 930
930 // Allocate a large string (for large object space). 931 // Allocate a large string (for large object space).
931 int large_size = Page::kMaxRegularHeapObjectSize + 1; 932 int large_size = Page::kMaxRegularHeapObjectSize + 1;
932 char* str = new char[large_size]; 933 char* str = new char[large_size];
933 for (int i = 0; i < large_size - 1; ++i) str[i] = 'a'; 934 for (int i = 0; i < large_size - 1; ++i) str[i] = 'a';
934 str[large_size - 1] = '\0'; 935 str[large_size - 1] = '\0';
935 objs[next_objs_index++] = 936 objs[next_objs_index++] = factory->NewStringFromAsciiChecked(str, TENURED);
936 factory->NewStringFromAscii(CStrVector(str), TENURED);
937 delete[] str; 937 delete[] str;
938 938
939 // Add a Map object to look for. 939 // Add a Map object to look for.
940 objs[next_objs_index++] = Handle<Map>(HeapObject::cast(*objs[0])->map()); 940 objs[next_objs_index++] = Handle<Map>(HeapObject::cast(*objs[0])->map());
941 941
942 CHECK_EQ(objs_count, next_objs_index); 942 CHECK_EQ(objs_count, next_objs_index);
943 CHECK_EQ(objs_count, ObjectsFoundInHeap(CcTest::heap(), objs, objs_count)); 943 CHECK_EQ(objs_count, ObjectsFoundInHeap(CcTest::heap(), objs, objs_count));
944 } 944 }
945 945
946 946
(...skipping 1991 matching lines...) Expand 10 before | Expand all | Expand 10 after
2938 CcTest::InitializeVM(); 2938 CcTest::InitializeVM();
2939 Isolate* isolate = CcTest::i_isolate(); 2939 Isolate* isolate = CcTest::i_isolate();
2940 Factory* factory = isolate->factory(); 2940 Factory* factory = isolate->factory();
2941 v8::HandleScope scope(CcTest::isolate()); 2941 v8::HandleScope scope(CcTest::isolate());
2942 Handle<String> slice(CcTest::heap()->empty_string()); 2942 Handle<String> slice(CcTest::heap()->empty_string());
2943 2943
2944 { 2944 {
2945 // Generate a parent that lives in new-space. 2945 // Generate a parent that lives in new-space.
2946 v8::HandleScope inner_scope(CcTest::isolate()); 2946 v8::HandleScope inner_scope(CcTest::isolate());
2947 const char* c = "This text is long enough to trigger sliced strings."; 2947 const char* c = "This text is long enough to trigger sliced strings.";
2948 Handle<String> s = factory->NewStringFromAscii(CStrVector(c)); 2948 Handle<String> s = factory->NewStringFromAsciiChecked(c);
2949 CHECK(s->IsSeqOneByteString()); 2949 CHECK(s->IsSeqOneByteString());
2950 CHECK(CcTest::heap()->InNewSpace(*s)); 2950 CHECK(CcTest::heap()->InNewSpace(*s));
2951 2951
2952 // Generate a sliced string that is based on the above parent and 2952 // Generate a sliced string that is based on the above parent and
2953 // lives in old-space. 2953 // lives in old-space.
2954 SimulateFullSpace(CcTest::heap()->new_space()); 2954 SimulateFullSpace(CcTest::heap()->new_space());
2955 AlwaysAllocateScope always_allocate(isolate); 2955 AlwaysAllocateScope always_allocate(isolate);
2956 Handle<String> t = factory->NewProperSubString(s, 5, 35); 2956 Handle<String> t = factory->NewProperSubString(s, 5, 35);
2957 CHECK(t->IsSlicedString()); 2957 CHECK(t->IsSlicedString());
2958 CHECK(!CcTest::heap()->InNewSpace(*t)); 2958 CHECK(!CcTest::heap()->InNewSpace(*t));
(...skipping 1223 matching lines...) Expand 10 before | Expand all | Expand 10 after
4182 v8::Context::Scope cscope(context); 4182 v8::Context::Scope cscope(context);
4183 4183
4184 v8::Local<v8::Value> result = CompileRun( 4184 v8::Local<v8::Value> result = CompileRun(
4185 "var locals = '';" 4185 "var locals = '';"
4186 "for (var i = 0; i < 512; i++) locals += 'var v' + i + '= 42;';" 4186 "for (var i = 0; i < 512; i++) locals += 'var v' + i + '= 42;';"
4187 "eval('function f() {' + locals + 'return function() { return v0; }; }');" 4187 "eval('function f() {' + locals + 'return function() { return v0; }; }');"
4188 "interrupt();" // This triggers a fake stack overflow in f. 4188 "interrupt();" // This triggers a fake stack overflow in f.
4189 "f()()"); 4189 "f()()");
4190 CHECK_EQ(42.0, result->ToNumber()->Value()); 4190 CHECK_EQ(42.0, result->ToNumber()->Value());
4191 } 4191 }
OLDNEW
« no previous file with comments | « test/cctest/test-hashing.cc ('k') | test/cctest/test-heap-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698