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 1096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 TEST(CachedHashOverflow) { | 1107 TEST(CachedHashOverflow) { |
1108 CcTest::InitializeVM(); | 1108 CcTest::InitializeVM(); |
1109 // We incorrectly allowed strings to be tagged as array indices even if their | 1109 // We incorrectly allowed strings to be tagged as array indices even if their |
1110 // values didn't fit in the hash field. | 1110 // values didn't fit in the hash field. |
1111 // See http://code.google.com/p/v8/issues/detail?id=728 | 1111 // See http://code.google.com/p/v8/issues/detail?id=728 |
1112 Isolate* isolate = CcTest::i_isolate(); | 1112 Isolate* isolate = CcTest::i_isolate(); |
1113 | 1113 |
1114 v8::HandleScope handle_scope(CcTest::isolate()); | 1114 v8::HandleScope handle_scope(CcTest::isolate()); |
1115 // Lines must be executed sequentially. Combining them into one script | 1115 // Lines must be executed sequentially. Combining them into one script |
1116 // makes the bug go away. | 1116 // makes the bug go away. |
1117 const char* lines[] = { | 1117 const char* lines[] = {"var x = [];", "x[4] = 42;", "var s = \"1073741828\";", |
1118 "var x = [];", | 1118 "x[s];", "x[s] = 37;", "x[4];", |
1119 "x[4] = 42;", | 1119 "x[s];"}; |
1120 "var s = \"1073741828\";", | |
1121 "x[s];", | |
1122 "x[s] = 37;", | |
1123 "x[4];", | |
1124 "x[s];", | |
1125 NULL | |
1126 }; | |
1127 | 1120 |
1128 Handle<Smi> fortytwo(Smi::FromInt(42), isolate); | 1121 Handle<Smi> fortytwo(Smi::FromInt(42), isolate); |
1129 Handle<Smi> thirtyseven(Smi::FromInt(37), isolate); | 1122 Handle<Smi> thirtyseven(Smi::FromInt(37), isolate); |
1130 Handle<Object> results[] = { isolate->factory()->undefined_value(), | 1123 Handle<Object> results[] = { isolate->factory()->undefined_value(), |
1131 fortytwo, | 1124 fortytwo, |
1132 isolate->factory()->undefined_value(), | 1125 isolate->factory()->undefined_value(), |
1133 isolate->factory()->undefined_value(), | 1126 isolate->factory()->undefined_value(), |
1134 thirtyseven, | 1127 thirtyseven, |
1135 fortytwo, | 1128 fortytwo, |
1136 thirtyseven // Bug yielded 42 here. | 1129 thirtyseven // Bug yielded 42 here. |
1137 }; | 1130 }; |
1138 | 1131 |
1139 const char* line; | |
1140 v8::Local<v8::Context> context = CcTest::isolate()->GetCurrentContext(); | 1132 v8::Local<v8::Context> context = CcTest::isolate()->GetCurrentContext(); |
1141 for (int i = 0; (line = lines[i]); i++) { | 1133 for (size_t i = 0; i < arraysize(lines); i++) { |
| 1134 const char* line = lines[i]; |
1142 printf("%s\n", line); | 1135 printf("%s\n", line); |
1143 v8::Local<v8::Value> result = | 1136 v8::Local<v8::Value> result = |
1144 v8::Script::Compile(context, | 1137 v8::Script::Compile(context, |
1145 v8::String::NewFromUtf8(CcTest::isolate(), line, | 1138 v8::String::NewFromUtf8(CcTest::isolate(), line, |
1146 v8::NewStringType::kNormal) | 1139 v8::NewStringType::kNormal) |
1147 .ToLocalChecked()) | 1140 .ToLocalChecked()) |
1148 .ToLocalChecked() | 1141 .ToLocalChecked() |
1149 ->Run(context) | 1142 ->Run(context) |
1150 .ToLocalChecked(); | 1143 .ToLocalChecked(); |
1151 CHECK_EQ(results[i]->IsUndefined(CcTest::i_isolate()), | 1144 CHECK_EQ(results[i]->IsUndefined(CcTest::i_isolate()), |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1664 CHECK_EQ(1, CompileRun("external.indexOf('', 1)") | 1657 CHECK_EQ(1, CompileRun("external.indexOf('', 1)") |
1665 ->Int32Value(context.local()) | 1658 ->Int32Value(context.local()) |
1666 .FromJust()); | 1659 .FromJust()); |
1667 CHECK_EQ(-1, CompileRun("external.indexOf('a', 1)") | 1660 CHECK_EQ(-1, CompileRun("external.indexOf('a', 1)") |
1668 ->Int32Value(context.local()) | 1661 ->Int32Value(context.local()) |
1669 .FromJust()); | 1662 .FromJust()); |
1670 CHECK_EQ(-1, CompileRun("external.indexOf('$')") | 1663 CHECK_EQ(-1, CompileRun("external.indexOf('$')") |
1671 ->Int32Value(context.local()) | 1664 ->Int32Value(context.local()) |
1672 .FromJust()); | 1665 .FromJust()); |
1673 } | 1666 } |
OLD | NEW |