OLD | NEW |
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 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 "var", | 589 "var", |
590 "void", | 590 "void", |
591 "volatile", | 591 "volatile", |
592 "while", | 592 "while", |
593 "with", | 593 "with", |
594 0 | 594 0 |
595 }; | 595 }; |
596 | 596 |
597 | 597 |
598 static void CheckInternalizedStrings(const char** strings) { | 598 static void CheckInternalizedStrings(const char** strings) { |
| 599 Factory* factory = CcTest::i_isolate()->factory(); |
599 for (const char* string = *strings; *strings != 0; string = *strings++) { | 600 for (const char* string = *strings; *strings != 0; string = *strings++) { |
600 Object* a; | 601 Handle<String> a = factory->InternalizeUtf8String(string); |
601 MaybeObject* maybe_a = CcTest::heap()->InternalizeUtf8String(string); | |
602 // InternalizeUtf8String may return a failure if a GC is needed. | |
603 if (!maybe_a->ToObject(&a)) continue; | |
604 CHECK(a->IsInternalizedString()); | 602 CHECK(a->IsInternalizedString()); |
605 Object* b; | 603 Handle<String> b = factory->InternalizeUtf8String(string); |
606 MaybeObject* maybe_b = CcTest::heap()->InternalizeUtf8String(string); | 604 CHECK_EQ(*b, *a); |
607 if (!maybe_b->ToObject(&b)) continue; | 605 CHECK(String::cast(*b)->IsUtf8EqualTo(CStrVector(string))); |
608 CHECK_EQ(b, a); | |
609 CHECK(String::cast(b)->IsUtf8EqualTo(CStrVector(string))); | |
610 } | 606 } |
611 } | 607 } |
612 | 608 |
613 | 609 |
614 TEST(StringTable) { | 610 TEST(StringTable) { |
615 CcTest::InitializeVM(); | 611 CcTest::InitializeVM(); |
616 | 612 |
| 613 v8::HandleScope sc(CcTest::isolate()); |
617 CheckInternalizedStrings(not_so_random_string_table); | 614 CheckInternalizedStrings(not_so_random_string_table); |
618 CheckInternalizedStrings(not_so_random_string_table); | 615 CheckInternalizedStrings(not_so_random_string_table); |
619 } | 616 } |
620 | 617 |
621 | 618 |
622 TEST(FunctionAllocation) { | 619 TEST(FunctionAllocation) { |
623 CcTest::InitializeVM(); | 620 CcTest::InitializeVM(); |
624 Isolate* isolate = CcTest::i_isolate(); | 621 Isolate* isolate = CcTest::i_isolate(); |
625 Factory* factory = isolate->factory(); | 622 Factory* factory = isolate->factory(); |
626 | 623 |
(...skipping 3567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4194 v8::Context::Scope cscope(context); | 4191 v8::Context::Scope cscope(context); |
4195 | 4192 |
4196 v8::Local<v8::Value> result = CompileRun( | 4193 v8::Local<v8::Value> result = CompileRun( |
4197 "var locals = '';" | 4194 "var locals = '';" |
4198 "for (var i = 0; i < 512; i++) locals += 'var v' + i + '= 42;';" | 4195 "for (var i = 0; i < 512; i++) locals += 'var v' + i + '= 42;';" |
4199 "eval('function f() {' + locals + 'return function() { return v0; }; }');" | 4196 "eval('function f() {' + locals + 'return function() { return v0; }; }');" |
4200 "interrupt();" // This triggers a fake stack overflow in f. | 4197 "interrupt();" // This triggers a fake stack overflow in f. |
4201 "f()()"); | 4198 "f()()"); |
4202 CHECK_EQ(42.0, result->ToNumber()->Value()); | 4199 CHECK_EQ(42.0, result->ToNumber()->Value()); |
4203 } | 4200 } |
OLD | NEW |