| OLD | NEW |
| 1 // Copyright 2007-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2009 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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 CHECK(foo_before->IsUndefined()); | 257 CHECK(foo_before->IsUndefined()); |
| 258 Local<String> bar_str = v8_str("bar"); | 258 Local<String> bar_str = v8_str("bar"); |
| 259 obj->Set(v8_str("foo"), bar_str); | 259 obj->Set(v8_str("foo"), bar_str); |
| 260 Local<Value> foo_after = obj->Get(v8_str("foo")); | 260 Local<Value> foo_after = obj->Get(v8_str("foo")); |
| 261 CHECK(!foo_after->IsUndefined()); | 261 CHECK(!foo_after->IsUndefined()); |
| 262 CHECK(foo_after->IsString()); | 262 CHECK(foo_after->IsString()); |
| 263 CHECK_EQ(bar_str, foo_after); | 263 CHECK_EQ(bar_str, foo_after); |
| 264 } | 264 } |
| 265 | 265 |
| 266 | 266 |
| 267 THREADED_TEST(AccessElement) { |
| 268 v8::HandleScope scope; |
| 269 LocalContext env; |
| 270 Local<v8::Object> obj = v8::Object::New(); |
| 271 Local<Value> before = obj->Get(1); |
| 272 CHECK(before->IsUndefined()); |
| 273 Local<String> bar_str = v8_str("bar"); |
| 274 obj->Set(1, bar_str); |
| 275 Local<Value> after = obj->Get(1); |
| 276 CHECK(!after->IsUndefined()); |
| 277 CHECK(after->IsString()); |
| 278 CHECK_EQ(bar_str, after); |
| 279 |
| 280 Local<v8::Array> value = CompileRun("[\"a\", \"b\"]").As<v8::Array>(); |
| 281 CHECK_EQ(v8_str("a"), value->Get(0)); |
| 282 CHECK_EQ(v8_str("b"), value->Get(1)); |
| 283 } |
| 284 |
| 285 |
| 267 THREADED_TEST(Script) { | 286 THREADED_TEST(Script) { |
| 268 v8::HandleScope scope; | 287 v8::HandleScope scope; |
| 269 LocalContext env; | 288 LocalContext env; |
| 270 const char* c_source = "1 + 2 + 3"; | 289 const char* c_source = "1 + 2 + 3"; |
| 271 Local<String> source = String::New(c_source); | 290 Local<String> source = String::New(c_source); |
| 272 Local<Script> script = Script::Compile(source); | 291 Local<Script> script = Script::Compile(source); |
| 273 CHECK_EQ(6, script->Run()->Int32Value()); | 292 CHECK_EQ(6, script->Run()->Int32Value()); |
| 274 } | 293 } |
| 275 | 294 |
| 276 | 295 |
| (...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1247 const v8::Arguments& args) { | 1266 const v8::Arguments& args) { |
| 1248 ApiTestFuzzer::Fuzz(); | 1267 ApiTestFuzzer::Fuzz(); |
| 1249 int depth = args.This()->Get(v8_str("depth"))->Int32Value(); | 1268 int depth = args.This()->Get(v8_str("depth"))->Int32Value(); |
| 1250 if (depth == kTargetRecursionDepth) { | 1269 if (depth == kTargetRecursionDepth) { |
| 1251 printf("[depth = %d]\n", depth); | 1270 printf("[depth = %d]\n", depth); |
| 1252 return v8::Undefined(); | 1271 return v8::Undefined(); |
| 1253 } | 1272 } |
| 1254 args.This()->Set(v8_str("depth"), v8::Integer::New(depth + 1)); | 1273 args.This()->Set(v8_str("depth"), v8::Integer::New(depth + 1)); |
| 1255 v8::Handle<Value> function = | 1274 v8::Handle<Value> function = |
| 1256 args.This()->Get(v8_str("callFunctionRecursively")); | 1275 args.This()->Get(v8_str("callFunctionRecursively")); |
| 1257 return v8::Handle<Function>::Cast(function)->Call(args.This(), 0, NULL); | 1276 return function.As<Function>()->Call(args.This(), 0, NULL); |
| 1258 } | 1277 } |
| 1259 | 1278 |
| 1260 | 1279 |
| 1261 THREADED_TEST(DeepCrossLanguageRecursion) { | 1280 THREADED_TEST(DeepCrossLanguageRecursion) { |
| 1262 v8::HandleScope scope; | 1281 v8::HandleScope scope; |
| 1263 v8::Handle<v8::ObjectTemplate> global = ObjectTemplate::New(); | 1282 v8::Handle<v8::ObjectTemplate> global = ObjectTemplate::New(); |
| 1264 global->Set(v8_str("callScriptRecursively"), | 1283 global->Set(v8_str("callScriptRecursively"), |
| 1265 v8::FunctionTemplate::New(CallScriptRecursivelyCall)); | 1284 v8::FunctionTemplate::New(CallScriptRecursivelyCall)); |
| 1266 global->Set(v8_str("callFunctionRecursively"), | 1285 global->Set(v8_str("callFunctionRecursively"), |
| 1267 v8::FunctionTemplate::New(CallFunctionRecursivelyCall)); | 1286 v8::FunctionTemplate::New(CallFunctionRecursivelyCall)); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1333 CHECK_EQ(17, obj->GetInternalField(0)->Int32Value()); | 1352 CHECK_EQ(17, obj->GetInternalField(0)->Int32Value()); |
| 1334 } | 1353 } |
| 1335 | 1354 |
| 1336 | 1355 |
| 1337 THREADED_TEST(GlobalObjectInternalFields) { | 1356 THREADED_TEST(GlobalObjectInternalFields) { |
| 1338 v8::HandleScope scope; | 1357 v8::HandleScope scope; |
| 1339 Local<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); | 1358 Local<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); |
| 1340 global_template->SetInternalFieldCount(1); | 1359 global_template->SetInternalFieldCount(1); |
| 1341 LocalContext env(NULL, global_template); | 1360 LocalContext env(NULL, global_template); |
| 1342 v8::Handle<v8::Object> global_proxy = env->Global(); | 1361 v8::Handle<v8::Object> global_proxy = env->Global(); |
| 1343 v8::Handle<v8::Object> global = | 1362 v8::Handle<v8::Object> global = global_proxy->GetPrototype().As<v8::Object>(); |
| 1344 v8::Handle<v8::Object>::Cast(global_proxy->GetPrototype()); | |
| 1345 CHECK_EQ(1, global->InternalFieldCount()); | 1363 CHECK_EQ(1, global->InternalFieldCount()); |
| 1346 CHECK(global->GetInternalField(0)->IsUndefined()); | 1364 CHECK(global->GetInternalField(0)->IsUndefined()); |
| 1347 global->SetInternalField(0, v8_num(17)); | 1365 global->SetInternalField(0, v8_num(17)); |
| 1348 CHECK_EQ(17, global->GetInternalField(0)->Int32Value()); | 1366 CHECK_EQ(17, global->GetInternalField(0)->Int32Value()); |
| 1349 } | 1367 } |
| 1350 | 1368 |
| 1351 | 1369 |
| 1352 THREADED_TEST(InternalFieldsNativePointers) { | 1370 THREADED_TEST(InternalFieldsNativePointers) { |
| 1353 v8::HandleScope scope; | 1371 v8::HandleScope scope; |
| 1354 LocalContext env; | 1372 LocalContext env; |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1522 } | 1540 } |
| 1523 | 1541 |
| 1524 | 1542 |
| 1525 THREADED_TEST(External) { | 1543 THREADED_TEST(External) { |
| 1526 v8::HandleScope scope; | 1544 v8::HandleScope scope; |
| 1527 int x = 3; | 1545 int x = 3; |
| 1528 Local<v8::External> ext = v8::External::New(&x); | 1546 Local<v8::External> ext = v8::External::New(&x); |
| 1529 LocalContext env; | 1547 LocalContext env; |
| 1530 env->Global()->Set(v8_str("ext"), ext); | 1548 env->Global()->Set(v8_str("ext"), ext); |
| 1531 Local<Value> reext_obj = Script::Compile(v8_str("this.ext"))->Run(); | 1549 Local<Value> reext_obj = Script::Compile(v8_str("this.ext"))->Run(); |
| 1532 v8::Handle<v8::External> reext = v8::Handle<v8::External>::Cast(reext_obj); | 1550 v8::Handle<v8::External> reext = reext_obj.As<v8::External>(); |
| 1533 int* ptr = static_cast<int*>(reext->Value()); | 1551 int* ptr = static_cast<int*>(reext->Value()); |
| 1534 CHECK_EQ(x, 3); | 1552 CHECK_EQ(x, 3); |
| 1535 *ptr = 10; | 1553 *ptr = 10; |
| 1536 CHECK_EQ(x, 10); | 1554 CHECK_EQ(x, 10); |
| 1537 | 1555 |
| 1538 // Make sure unaligned pointers are wrapped properly. | 1556 // Make sure unaligned pointers are wrapped properly. |
| 1539 char* data = i::StrDup("0123456789"); | 1557 char* data = i::StrDup("0123456789"); |
| 1540 Local<v8::Value> zero = v8::External::Wrap(&data[0]); | 1558 Local<v8::Value> zero = v8::External::Wrap(&data[0]); |
| 1541 Local<v8::Value> one = v8::External::Wrap(&data[1]); | 1559 Local<v8::Value> one = v8::External::Wrap(&data[1]); |
| 1542 Local<v8::Value> two = v8::External::Wrap(&data[2]); | 1560 Local<v8::Value> two = v8::External::Wrap(&data[2]); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 Script::Compile(v8_str("delete dont_delete"))->Run(); | 1672 Script::Compile(v8_str("delete dont_delete"))->Run(); |
| 1655 CHECK_EQ(13, context->Global()->Get(prop)->Int32Value()); | 1673 CHECK_EQ(13, context->Global()->Get(prop)->Int32Value()); |
| 1656 } | 1674 } |
| 1657 | 1675 |
| 1658 | 1676 |
| 1659 THREADED_TEST(Array) { | 1677 THREADED_TEST(Array) { |
| 1660 v8::HandleScope scope; | 1678 v8::HandleScope scope; |
| 1661 LocalContext context; | 1679 LocalContext context; |
| 1662 Local<v8::Array> array = v8::Array::New(); | 1680 Local<v8::Array> array = v8::Array::New(); |
| 1663 CHECK_EQ(0, array->Length()); | 1681 CHECK_EQ(0, array->Length()); |
| 1664 CHECK(array->Get(v8::Integer::New(0))->IsUndefined()); | 1682 CHECK(array->Get(0)->IsUndefined()); |
| 1665 CHECK(!array->Has(0)); | 1683 CHECK(!array->Has(0)); |
| 1666 CHECK(array->Get(v8::Integer::New(100))->IsUndefined()); | 1684 CHECK(array->Get(100)->IsUndefined()); |
| 1667 CHECK(!array->Has(100)); | 1685 CHECK(!array->Has(100)); |
| 1668 array->Set(v8::Integer::New(2), v8_num(7)); | 1686 array->Set(2, v8_num(7)); |
| 1669 CHECK_EQ(3, array->Length()); | 1687 CHECK_EQ(3, array->Length()); |
| 1670 CHECK(!array->Has(0)); | 1688 CHECK(!array->Has(0)); |
| 1671 CHECK(!array->Has(1)); | 1689 CHECK(!array->Has(1)); |
| 1672 CHECK(array->Has(2)); | 1690 CHECK(array->Has(2)); |
| 1673 CHECK_EQ(7, array->Get(v8::Integer::New(2))->Int32Value()); | 1691 CHECK_EQ(7, array->Get(2)->Int32Value()); |
| 1674 Local<Value> obj = Script::Compile(v8_str("[1, 2, 3]"))->Run(); | 1692 Local<Value> obj = Script::Compile(v8_str("[1, 2, 3]"))->Run(); |
| 1675 Local<v8::Array> arr = Local<v8::Array>::Cast(obj); | 1693 Local<v8::Array> arr = obj.As<v8::Array>(); |
| 1676 CHECK_EQ(3, arr->Length()); | 1694 CHECK_EQ(3, arr->Length()); |
| 1677 CHECK_EQ(1, arr->Get(v8::Integer::New(0))->Int32Value()); | 1695 CHECK_EQ(1, arr->Get(0)->Int32Value()); |
| 1678 CHECK_EQ(2, arr->Get(v8::Integer::New(1))->Int32Value()); | 1696 CHECK_EQ(2, arr->Get(1)->Int32Value()); |
| 1679 CHECK_EQ(3, arr->Get(v8::Integer::New(2))->Int32Value()); | 1697 CHECK_EQ(3, arr->Get(2)->Int32Value()); |
| 1680 } | 1698 } |
| 1681 | 1699 |
| 1682 | 1700 |
| 1683 v8::Handle<Value> HandleF(const v8::Arguments& args) { | 1701 v8::Handle<Value> HandleF(const v8::Arguments& args) { |
| 1684 v8::HandleScope scope; | 1702 v8::HandleScope scope; |
| 1685 ApiTestFuzzer::Fuzz(); | 1703 ApiTestFuzzer::Fuzz(); |
| 1686 Local<v8::Array> result = v8::Array::New(args.Length()); | 1704 Local<v8::Array> result = v8::Array::New(args.Length()); |
| 1687 for (int i = 0; i < args.Length(); i++) | 1705 for (int i = 0; i < args.Length(); i++) |
| 1688 result->Set(v8::Integer::New(i), args[i]); | 1706 result->Set(i, args[i]); |
| 1689 return scope.Close(result); | 1707 return scope.Close(result); |
| 1690 } | 1708 } |
| 1691 | 1709 |
| 1692 | 1710 |
| 1693 THREADED_TEST(Vector) { | 1711 THREADED_TEST(Vector) { |
| 1694 v8::HandleScope scope; | 1712 v8::HandleScope scope; |
| 1695 Local<ObjectTemplate> global = ObjectTemplate::New(); | 1713 Local<ObjectTemplate> global = ObjectTemplate::New(); |
| 1696 global->Set(v8_str("f"), v8::FunctionTemplate::New(HandleF)); | 1714 global->Set(v8_str("f"), v8::FunctionTemplate::New(HandleF)); |
| 1697 LocalContext context(0, global); | 1715 LocalContext context(0, global); |
| 1698 | 1716 |
| 1699 const char* fun = "f()"; | 1717 const char* fun = "f()"; |
| 1700 Local<v8::Array> a0 = | 1718 Local<v8::Array> a0 = CompileRun(fun).As<v8::Array>(); |
| 1701 Local<v8::Array>::Cast(Script::Compile(String::New(fun))->Run()); | |
| 1702 CHECK_EQ(0, a0->Length()); | 1719 CHECK_EQ(0, a0->Length()); |
| 1703 | 1720 |
| 1704 const char* fun2 = "f(11)"; | 1721 const char* fun2 = "f(11)"; |
| 1705 Local<v8::Array> a1 = | 1722 Local<v8::Array> a1 = CompileRun(fun2).As<v8::Array>(); |
| 1706 Local<v8::Array>::Cast(Script::Compile(String::New(fun2))->Run()); | |
| 1707 CHECK_EQ(1, a1->Length()); | 1723 CHECK_EQ(1, a1->Length()); |
| 1708 CHECK_EQ(11, a1->Get(v8::Integer::New(0))->Int32Value()); | 1724 CHECK_EQ(11, a1->Get(0)->Int32Value()); |
| 1709 | 1725 |
| 1710 const char* fun3 = "f(12, 13)"; | 1726 const char* fun3 = "f(12, 13)"; |
| 1711 Local<v8::Array> a2 = | 1727 Local<v8::Array> a2 = CompileRun(fun3).As<v8::Array>(); |
| 1712 Local<v8::Array>::Cast(Script::Compile(String::New(fun3))->Run()); | |
| 1713 CHECK_EQ(2, a2->Length()); | 1728 CHECK_EQ(2, a2->Length()); |
| 1714 CHECK_EQ(12, a2->Get(v8::Integer::New(0))->Int32Value()); | 1729 CHECK_EQ(12, a2->Get(0)->Int32Value()); |
| 1715 CHECK_EQ(13, a2->Get(v8::Integer::New(1))->Int32Value()); | 1730 CHECK_EQ(13, a2->Get(1)->Int32Value()); |
| 1716 | 1731 |
| 1717 const char* fun4 = "f(14, 15, 16)"; | 1732 const char* fun4 = "f(14, 15, 16)"; |
| 1718 Local<v8::Array> a3 = | 1733 Local<v8::Array> a3 = CompileRun(fun4).As<v8::Array>(); |
| 1719 Local<v8::Array>::Cast(Script::Compile(String::New(fun4))->Run()); | |
| 1720 CHECK_EQ(3, a3->Length()); | 1734 CHECK_EQ(3, a3->Length()); |
| 1721 CHECK_EQ(14, a3->Get(v8::Integer::New(0))->Int32Value()); | 1735 CHECK_EQ(14, a3->Get(0)->Int32Value()); |
| 1722 CHECK_EQ(15, a3->Get(v8::Integer::New(1))->Int32Value()); | 1736 CHECK_EQ(15, a3->Get(1)->Int32Value()); |
| 1723 CHECK_EQ(16, a3->Get(v8::Integer::New(2))->Int32Value()); | 1737 CHECK_EQ(16, a3->Get(2)->Int32Value()); |
| 1724 | 1738 |
| 1725 const char* fun5 = "f(17, 18, 19, 20)"; | 1739 const char* fun5 = "f(17, 18, 19, 20)"; |
| 1726 Local<v8::Array> a4 = | 1740 Local<v8::Array> a4 = CompileRun(fun5).As<v8::Array>(); |
| 1727 Local<v8::Array>::Cast(Script::Compile(String::New(fun5))->Run()); | |
| 1728 CHECK_EQ(4, a4->Length()); | 1741 CHECK_EQ(4, a4->Length()); |
| 1729 CHECK_EQ(17, a4->Get(v8::Integer::New(0))->Int32Value()); | 1742 CHECK_EQ(17, a4->Get(0)->Int32Value()); |
| 1730 CHECK_EQ(18, a4->Get(v8::Integer::New(1))->Int32Value()); | 1743 CHECK_EQ(18, a4->Get(1)->Int32Value()); |
| 1731 CHECK_EQ(19, a4->Get(v8::Integer::New(2))->Int32Value()); | 1744 CHECK_EQ(19, a4->Get(2)->Int32Value()); |
| 1732 CHECK_EQ(20, a4->Get(v8::Integer::New(3))->Int32Value()); | 1745 CHECK_EQ(20, a4->Get(3)->Int32Value()); |
| 1733 } | 1746 } |
| 1734 | 1747 |
| 1735 | 1748 |
| 1736 THREADED_TEST(FunctionCall) { | 1749 THREADED_TEST(FunctionCall) { |
| 1737 v8::HandleScope scope; | 1750 v8::HandleScope scope; |
| 1738 LocalContext context; | 1751 LocalContext context; |
| 1739 CompileRun( | 1752 CompileRun( |
| 1740 "function Foo() {" | 1753 "function Foo() {" |
| 1741 " var result = [];" | 1754 " var result = [];" |
| 1742 " for (var i = 0; i < arguments.length; i++) {" | 1755 " for (var i = 0; i < arguments.length; i++) {" |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2138 return v8::ThrowException(v8_str("FromC")); | 2151 return v8::ThrowException(v8_str("FromC")); |
| 2139 } else { | 2152 } else { |
| 2140 Local<v8::Object> global = Context::GetCurrent()->Global(); | 2153 Local<v8::Object> global = Context::GetCurrent()->Global(); |
| 2141 Local<Value> fun = global->Get(v8_str("JSThrowCountDown")); | 2154 Local<Value> fun = global->Get(v8_str("JSThrowCountDown")); |
| 2142 v8::Handle<Value> argv[] = { v8_num(count - 1), | 2155 v8::Handle<Value> argv[] = { v8_num(count - 1), |
| 2143 args[1], | 2156 args[1], |
| 2144 args[2], | 2157 args[2], |
| 2145 args[3] }; | 2158 args[3] }; |
| 2146 if (count % cInterval == 0) { | 2159 if (count % cInterval == 0) { |
| 2147 v8::TryCatch try_catch; | 2160 v8::TryCatch try_catch; |
| 2148 Local<Value> result = | 2161 Local<Value> result = fun.As<Function>()->Call(global, 4, argv); |
| 2149 v8::Handle<Function>::Cast(fun)->Call(global, 4, argv); | |
| 2150 int expected = args[3]->Int32Value(); | 2162 int expected = args[3]->Int32Value(); |
| 2151 if (try_catch.HasCaught()) { | 2163 if (try_catch.HasCaught()) { |
| 2152 CHECK_EQ(expected, count); | 2164 CHECK_EQ(expected, count); |
| 2153 CHECK(result.IsEmpty()); | 2165 CHECK(result.IsEmpty()); |
| 2154 CHECK(!i::Top::has_scheduled_exception()); | 2166 CHECK(!i::Top::has_scheduled_exception()); |
| 2155 } else { | 2167 } else { |
| 2156 CHECK_NE(expected, count); | 2168 CHECK_NE(expected, count); |
| 2157 } | 2169 } |
| 2158 return result; | 2170 return result; |
| 2159 } else { | 2171 } else { |
| 2160 return v8::Handle<Function>::Cast(fun)->Call(global, 4, argv); | 2172 return fun.As<Function>()->Call(global, 4, argv); |
| 2161 } | 2173 } |
| 2162 } | 2174 } |
| 2163 } | 2175 } |
| 2164 | 2176 |
| 2165 | 2177 |
| 2166 v8::Handle<Value> JSCheck(const v8::Arguments& args) { | 2178 v8::Handle<Value> JSCheck(const v8::Arguments& args) { |
| 2167 ApiTestFuzzer::Fuzz(); | 2179 ApiTestFuzzer::Fuzz(); |
| 2168 CHECK_EQ(3, args.Length()); | 2180 CHECK_EQ(3, args.Length()); |
| 2169 bool equality = args[0]->BooleanValue(); | 2181 bool equality = args[0]->BooleanValue(); |
| 2170 int count = args[1]->Int32Value(); | 2182 int count = args[1]->Int32Value(); |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2540 Local<Value> result = script->Run(); | 2552 Local<Value> result = script->Run(); |
| 2541 CHECK_EQ(result, v8_str("x")); | 2553 CHECK_EQ(result, v8_str("x")); |
| 2542 } | 2554 } |
| 2543 } | 2555 } |
| 2544 | 2556 |
| 2545 | 2557 |
| 2546 static v8::Handle<Value> SetXOnPrototypeGetter(Local<String> property, | 2558 static v8::Handle<Value> SetXOnPrototypeGetter(Local<String> property, |
| 2547 const AccessorInfo& info) { | 2559 const AccessorInfo& info) { |
| 2548 // Set x on the prototype object and do not handle the get request. | 2560 // Set x on the prototype object and do not handle the get request. |
| 2549 v8::Handle<v8::Value> proto = info.Holder()->GetPrototype(); | 2561 v8::Handle<v8::Value> proto = info.Holder()->GetPrototype(); |
| 2550 v8::Handle<v8::Object>::Cast(proto)->Set(v8_str("x"), v8::Integer::New(23)); | 2562 proto.As<v8::Object>()->Set(v8_str("x"), v8::Integer::New(23)); |
| 2551 return v8::Handle<Value>(); | 2563 return v8::Handle<Value>(); |
| 2552 } | 2564 } |
| 2553 | 2565 |
| 2554 | 2566 |
| 2555 // This is a regression test for http://crbug.com/20104. Map | 2567 // This is a regression test for http://crbug.com/20104. Map |
| 2556 // transitions should not interfere with post interceptor lookup. | 2568 // transitions should not interfere with post interceptor lookup. |
| 2557 THREADED_TEST(NamedInterceptorMapTransitionRead) { | 2569 THREADED_TEST(NamedInterceptorMapTransitionRead) { |
| 2558 v8::HandleScope scope; | 2570 v8::HandleScope scope; |
| 2559 Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(); | 2571 Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(); |
| 2560 Local<v8::ObjectTemplate> instance_template | 2572 Local<v8::ObjectTemplate> instance_template |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2876 THREADED_TEST(FunctionPrototypeAcrossContexts) { | 2888 THREADED_TEST(FunctionPrototypeAcrossContexts) { |
| 2877 // Make sure that functions created by cloning boilerplates cannot | 2889 // Make sure that functions created by cloning boilerplates cannot |
| 2878 // communicate through their __proto__ field. | 2890 // communicate through their __proto__ field. |
| 2879 | 2891 |
| 2880 v8::HandleScope scope; | 2892 v8::HandleScope scope; |
| 2881 | 2893 |
| 2882 LocalContext env0; | 2894 LocalContext env0; |
| 2883 v8::Handle<v8::Object> global0 = | 2895 v8::Handle<v8::Object> global0 = |
| 2884 env0->Global(); | 2896 env0->Global(); |
| 2885 v8::Handle<v8::Object> object0 = | 2897 v8::Handle<v8::Object> object0 = |
| 2886 v8::Handle<v8::Object>::Cast(global0->Get(v8_str("Object"))); | 2898 global0->Get(v8_str("Object")).As<v8::Object>(); |
| 2887 v8::Handle<v8::Object> tostring0 = | 2899 v8::Handle<v8::Object> tostring0 = |
| 2888 v8::Handle<v8::Object>::Cast(object0->Get(v8_str("toString"))); | 2900 object0->Get(v8_str("toString")).As<v8::Object>(); |
| 2889 v8::Handle<v8::Object> proto0 = | 2901 v8::Handle<v8::Object> proto0 = |
| 2890 v8::Handle<v8::Object>::Cast(tostring0->Get(v8_str("__proto__"))); | 2902 tostring0->Get(v8_str("__proto__")).As<v8::Object>(); |
| 2891 proto0->Set(v8_str("custom"), v8_num(1234)); | 2903 proto0->Set(v8_str("custom"), v8_num(1234)); |
| 2892 | 2904 |
| 2893 LocalContext env1; | 2905 LocalContext env1; |
| 2894 v8::Handle<v8::Object> global1 = | 2906 v8::Handle<v8::Object> global1 = |
| 2895 env1->Global(); | 2907 env1->Global(); |
| 2896 v8::Handle<v8::Object> object1 = | 2908 v8::Handle<v8::Object> object1 = |
| 2897 v8::Handle<v8::Object>::Cast(global1->Get(v8_str("Object"))); | 2909 global1->Get(v8_str("Object")).As<v8::Object>(); |
| 2898 v8::Handle<v8::Object> tostring1 = | 2910 v8::Handle<v8::Object> tostring1 = |
| 2899 v8::Handle<v8::Object>::Cast(object1->Get(v8_str("toString"))); | 2911 object1->Get(v8_str("toString")).As<v8::Object>(); |
| 2900 v8::Handle<v8::Object> proto1 = | 2912 v8::Handle<v8::Object> proto1 = |
| 2901 v8::Handle<v8::Object>::Cast(tostring1->Get(v8_str("__proto__"))); | 2913 tostring1->Get(v8_str("__proto__")).As<v8::Object>(); |
| 2902 CHECK(!proto1->Has(v8_str("custom"))); | 2914 CHECK(!proto1->Has(v8_str("custom"))); |
| 2903 } | 2915 } |
| 2904 | 2916 |
| 2905 | 2917 |
| 2906 THREADED_TEST(Regress892105) { | 2918 THREADED_TEST(Regress892105) { |
| 2907 // Make sure that object and array literals created by cloning | 2919 // Make sure that object and array literals created by cloning |
| 2908 // boilerplates cannot communicate through their __proto__ | 2920 // boilerplates cannot communicate through their __proto__ |
| 2909 // field. This is rather difficult to check, but we try to add stuff | 2921 // field. This is rather difficult to check, but we try to add stuff |
| 2910 // to Object.prototype and Array.prototype and create a new | 2922 // to Object.prototype and Array.prototype and create a new |
| 2911 // environment. This should succeed. | 2923 // environment. This should succeed. |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3513 i::Heap::CollectAllGarbage(false); | 3525 i::Heap::CollectAllGarbage(false); |
| 3514 return v8::Undefined(); | 3526 return v8::Undefined(); |
| 3515 } | 3527 } |
| 3516 | 3528 |
| 3517 | 3529 |
| 3518 THREADED_TEST(Arguments) { | 3530 THREADED_TEST(Arguments) { |
| 3519 v8::HandleScope scope; | 3531 v8::HandleScope scope; |
| 3520 v8::Handle<v8::ObjectTemplate> global = ObjectTemplate::New(); | 3532 v8::Handle<v8::ObjectTemplate> global = ObjectTemplate::New(); |
| 3521 global->Set(v8_str("f"), v8::FunctionTemplate::New(ArgumentsTestCallback)); | 3533 global->Set(v8_str("f"), v8::FunctionTemplate::New(ArgumentsTestCallback)); |
| 3522 LocalContext context(NULL, global); | 3534 LocalContext context(NULL, global); |
| 3523 args_fun = v8::Handle<Function>::Cast(context->Global()->Get(v8_str("f"))); | 3535 args_fun = context->Global()->Get(v8_str("f")).As<Function>(); |
| 3524 v8_compile("f(1, 2, 3)")->Run(); | 3536 v8_compile("f(1, 2, 3)")->Run(); |
| 3525 } | 3537 } |
| 3526 | 3538 |
| 3527 | 3539 |
| 3528 static v8::Handle<Value> NoBlockGetterX(Local<String> name, | 3540 static v8::Handle<Value> NoBlockGetterX(Local<String> name, |
| 3529 const AccessorInfo&) { | 3541 const AccessorInfo&) { |
| 3530 return v8::Handle<Value>(); | 3542 return v8::Handle<Value>(); |
| 3531 } | 3543 } |
| 3532 | 3544 |
| 3533 | 3545 |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3851 | 3863 |
| 3852 | 3864 |
| 3853 THREADED_TEST(ErrorConstruction) { | 3865 THREADED_TEST(ErrorConstruction) { |
| 3854 v8::HandleScope scope; | 3866 v8::HandleScope scope; |
| 3855 LocalContext context; | 3867 LocalContext context; |
| 3856 | 3868 |
| 3857 v8::Handle<String> foo = v8_str("foo"); | 3869 v8::Handle<String> foo = v8_str("foo"); |
| 3858 v8::Handle<String> message = v8_str("message"); | 3870 v8::Handle<String> message = v8_str("message"); |
| 3859 v8::Handle<Value> range_error = v8::Exception::RangeError(foo); | 3871 v8::Handle<Value> range_error = v8::Exception::RangeError(foo); |
| 3860 CHECK(range_error->IsObject()); | 3872 CHECK(range_error->IsObject()); |
| 3861 v8::Handle<v8::Object> range_obj(v8::Handle<v8::Object>::Cast(range_error)); | 3873 v8::Handle<v8::Object> range_obj = range_error.As<v8::Object>(); |
| 3862 CHECK(v8::Handle<v8::Object>::Cast(range_error)->Get(message)->Equals(foo)); | 3874 CHECK(range_error.As<v8::Object>()->Get(message)->Equals(foo)); |
| 3863 v8::Handle<Value> reference_error = v8::Exception::ReferenceError(foo); | 3875 v8::Handle<Value> reference_error = v8::Exception::ReferenceError(foo); |
| 3864 CHECK(reference_error->IsObject()); | 3876 CHECK(reference_error->IsObject()); |
| 3865 CHECK( | 3877 CHECK(reference_error.As<v8::Object>()->Get(message)->Equals(foo)); |
| 3866 v8::Handle<v8::Object>::Cast(reference_error)->Get(message)->Equals(foo)); | |
| 3867 v8::Handle<Value> syntax_error = v8::Exception::SyntaxError(foo); | 3878 v8::Handle<Value> syntax_error = v8::Exception::SyntaxError(foo); |
| 3868 CHECK(syntax_error->IsObject()); | 3879 CHECK(syntax_error->IsObject()); |
| 3869 CHECK(v8::Handle<v8::Object>::Cast(syntax_error)->Get(message)->Equals(foo)); | 3880 CHECK(syntax_error.As<v8::Object>()->Get(message)->Equals(foo)); |
| 3870 v8::Handle<Value> type_error = v8::Exception::TypeError(foo); | 3881 v8::Handle<Value> type_error = v8::Exception::TypeError(foo); |
| 3871 CHECK(type_error->IsObject()); | 3882 CHECK(type_error->IsObject()); |
| 3872 CHECK(v8::Handle<v8::Object>::Cast(type_error)->Get(message)->Equals(foo)); | 3883 CHECK(type_error.As<v8::Object>()->Get(message)->Equals(foo)); |
| 3873 v8::Handle<Value> error = v8::Exception::Error(foo); | 3884 v8::Handle<Value> error = v8::Exception::Error(foo); |
| 3874 CHECK(error->IsObject()); | 3885 CHECK(error->IsObject()); |
| 3875 CHECK(v8::Handle<v8::Object>::Cast(error)->Get(message)->Equals(foo)); | 3886 CHECK(error.As<v8::Object>()->Get(message)->Equals(foo)); |
| 3876 } | 3887 } |
| 3877 | 3888 |
| 3878 | 3889 |
| 3879 static v8::Handle<Value> YGetter(Local<String> name, const AccessorInfo& info) { | 3890 static v8::Handle<Value> YGetter(Local<String> name, const AccessorInfo& info) { |
| 3880 ApiTestFuzzer::Fuzz(); | 3891 ApiTestFuzzer::Fuzz(); |
| 3881 return v8_num(10); | 3892 return v8_num(10); |
| 3882 } | 3893 } |
| 3883 | 3894 |
| 3884 | 3895 |
| 3885 static void YSetter(Local<String> name, | 3896 static void YSetter(Local<String> name, |
| (...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4788 static bool NamedAccessFlatten(Local<v8::Object> global, | 4799 static bool NamedAccessFlatten(Local<v8::Object> global, |
| 4789 Local<Value> name, | 4800 Local<Value> name, |
| 4790 v8::AccessType type, | 4801 v8::AccessType type, |
| 4791 Local<Value> data) { | 4802 Local<Value> data) { |
| 4792 char buf[100]; | 4803 char buf[100]; |
| 4793 int len; | 4804 int len; |
| 4794 | 4805 |
| 4795 CHECK(name->IsString()); | 4806 CHECK(name->IsString()); |
| 4796 | 4807 |
| 4797 memset(buf, 0x1, sizeof(buf)); | 4808 memset(buf, 0x1, sizeof(buf)); |
| 4798 len = Local<String>::Cast(name)->WriteAscii(buf); | 4809 len = name.As<String>()->WriteAscii(buf); |
| 4799 CHECK_EQ(4, len); | 4810 CHECK_EQ(4, len); |
| 4800 | 4811 |
| 4801 uint16_t buf2[100]; | 4812 uint16_t buf2[100]; |
| 4802 | 4813 |
| 4803 memset(buf, 0x1, sizeof(buf)); | 4814 memset(buf, 0x1, sizeof(buf)); |
| 4804 len = Local<String>::Cast(name)->Write(buf2); | 4815 len = name.As<String>()->Write(buf2); |
| 4805 CHECK_EQ(4, len); | 4816 CHECK_EQ(4, len); |
| 4806 | 4817 |
| 4807 return true; | 4818 return true; |
| 4808 } | 4819 } |
| 4809 | 4820 |
| 4810 | 4821 |
| 4811 static bool IndexedAccessFlatten(Local<v8::Object> global, | 4822 static bool IndexedAccessFlatten(Local<v8::Object> global, |
| 4812 uint32_t key, | 4823 uint32_t key, |
| 4813 v8::AccessType type, | 4824 v8::AccessType type, |
| 4814 Local<Value> data) { | 4825 Local<Value> data) { |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5143 CHECK_EQ(0, o0->Get(v8_str("x"))->Int32Value()); | 5154 CHECK_EQ(0, o0->Get(v8_str("x"))->Int32Value()); |
| 5144 CHECK_EQ(1, o0->Get(v8_str("y"))->Int32Value()); | 5155 CHECK_EQ(1, o0->Get(v8_str("y"))->Int32Value()); |
| 5145 CHECK_EQ(2, o0->Get(v8_str("z"))->Int32Value()); | 5156 CHECK_EQ(2, o0->Get(v8_str("z"))->Int32Value()); |
| 5146 CHECK_EQ(3, o0->Get(v8_str("u"))->Int32Value()); | 5157 CHECK_EQ(3, o0->Get(v8_str("u"))->Int32Value()); |
| 5147 | 5158 |
| 5148 // Getting the prototype of o0 should get the first visible one | 5159 // Getting the prototype of o0 should get the first visible one |
| 5149 // which is o3. Therefore, z should not be defined on the prototype | 5160 // which is o3. Therefore, z should not be defined on the prototype |
| 5150 // object. | 5161 // object. |
| 5151 Local<Value> proto = o0->Get(v8_str("__proto__")); | 5162 Local<Value> proto = o0->Get(v8_str("__proto__")); |
| 5152 CHECK(proto->IsObject()); | 5163 CHECK(proto->IsObject()); |
| 5153 CHECK(Local<v8::Object>::Cast(proto)->Get(v8_str("z"))->IsUndefined()); | 5164 CHECK(proto.As<v8::Object>()->Get(v8_str("z"))->IsUndefined()); |
| 5154 } | 5165 } |
| 5155 | 5166 |
| 5156 | 5167 |
| 5157 THREADED_TEST(SetPrototype) { | 5168 THREADED_TEST(SetPrototype) { |
| 5158 v8::HandleScope handle_scope; | 5169 v8::HandleScope handle_scope; |
| 5159 LocalContext context; | 5170 LocalContext context; |
| 5160 | 5171 |
| 5161 Local<v8::FunctionTemplate> t0 = v8::FunctionTemplate::New(); | 5172 Local<v8::FunctionTemplate> t0 = v8::FunctionTemplate::New(); |
| 5162 t0->InstanceTemplate()->Set(v8_str("x"), v8_num(0)); | 5173 t0->InstanceTemplate()->Set(v8_str("x"), v8_num(0)); |
| 5163 Local<v8::FunctionTemplate> t1 = v8::FunctionTemplate::New(); | 5174 Local<v8::FunctionTemplate> t1 = v8::FunctionTemplate::New(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 5187 CHECK_EQ(0, o0->Get(v8_str("x"))->Int32Value()); | 5198 CHECK_EQ(0, o0->Get(v8_str("x"))->Int32Value()); |
| 5188 CHECK_EQ(1, o0->Get(v8_str("y"))->Int32Value()); | 5199 CHECK_EQ(1, o0->Get(v8_str("y"))->Int32Value()); |
| 5189 CHECK_EQ(2, o0->Get(v8_str("z"))->Int32Value()); | 5200 CHECK_EQ(2, o0->Get(v8_str("z"))->Int32Value()); |
| 5190 CHECK_EQ(3, o0->Get(v8_str("u"))->Int32Value()); | 5201 CHECK_EQ(3, o0->Get(v8_str("u"))->Int32Value()); |
| 5191 | 5202 |
| 5192 // Getting the prototype of o0 should get the first visible one | 5203 // Getting the prototype of o0 should get the first visible one |
| 5193 // which is o3. Therefore, z should not be defined on the prototype | 5204 // which is o3. Therefore, z should not be defined on the prototype |
| 5194 // object. | 5205 // object. |
| 5195 Local<Value> proto = o0->Get(v8_str("__proto__")); | 5206 Local<Value> proto = o0->Get(v8_str("__proto__")); |
| 5196 CHECK(proto->IsObject()); | 5207 CHECK(proto->IsObject()); |
| 5197 CHECK_EQ(v8::Handle<v8::Object>::Cast(proto), o3); | 5208 CHECK_EQ(proto.As<v8::Object>(), o3); |
| 5198 | 5209 |
| 5199 // However, Object::GetPrototype ignores hidden prototype. | 5210 // However, Object::GetPrototype ignores hidden prototype. |
| 5200 Local<Value> proto0 = o0->GetPrototype(); | 5211 Local<Value> proto0 = o0->GetPrototype(); |
| 5201 CHECK(proto0->IsObject()); | 5212 CHECK(proto0->IsObject()); |
| 5202 CHECK_EQ(v8::Handle<v8::Object>::Cast(proto0), o1); | 5213 CHECK_EQ(proto0.As<v8::Object>(), o1); |
| 5203 | 5214 |
| 5204 Local<Value> proto1 = o1->GetPrototype(); | 5215 Local<Value> proto1 = o1->GetPrototype(); |
| 5205 CHECK(proto1->IsObject()); | 5216 CHECK(proto1->IsObject()); |
| 5206 CHECK_EQ(v8::Handle<v8::Object>::Cast(proto1), o2); | 5217 CHECK_EQ(proto1.As<v8::Object>(), o2); |
| 5207 | 5218 |
| 5208 Local<Value> proto2 = o2->GetPrototype(); | 5219 Local<Value> proto2 = o2->GetPrototype(); |
| 5209 CHECK(proto2->IsObject()); | 5220 CHECK(proto2->IsObject()); |
| 5210 CHECK_EQ(v8::Handle<v8::Object>::Cast(proto2), o3); | 5221 CHECK_EQ(proto2.As<v8::Object>(), o3); |
| 5211 } | 5222 } |
| 5212 | 5223 |
| 5213 | 5224 |
| 5214 THREADED_TEST(SetPrototypeThrows) { | 5225 THREADED_TEST(SetPrototypeThrows) { |
| 5215 v8::HandleScope handle_scope; | 5226 v8::HandleScope handle_scope; |
| 5216 LocalContext context; | 5227 LocalContext context; |
| 5217 | 5228 |
| 5218 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(); | 5229 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(); |
| 5219 | 5230 |
| 5220 Local<v8::Object> o0 = t->GetFunction()->NewInstance(); | 5231 Local<v8::Object> o0 = t->GetFunction()->NewInstance(); |
| (...skipping 1691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6912 // ObjectProtoToString should not call replace toString function. | 6923 // ObjectProtoToString should not call replace toString function. |
| 6913 value = instance->ObjectProtoToString(); | 6924 value = instance->ObjectProtoToString(); |
| 6914 CHECK(value->IsString() && value->Equals(v8_str("[object MyClass]"))); | 6925 CHECK(value->IsString() && value->Equals(v8_str("[object MyClass]"))); |
| 6915 | 6926 |
| 6916 // Check global | 6927 // Check global |
| 6917 value = context->Global()->ObjectProtoToString(); | 6928 value = context->Global()->ObjectProtoToString(); |
| 6918 CHECK(value->IsString() && value->Equals(v8_str("[object global]"))); | 6929 CHECK(value->IsString() && value->Equals(v8_str("[object global]"))); |
| 6919 | 6930 |
| 6920 // Check ordinary object | 6931 // Check ordinary object |
| 6921 Local<Value> object = v8_compile("new Object()")->Run(); | 6932 Local<Value> object = v8_compile("new Object()")->Run(); |
| 6922 value = Local<v8::Object>::Cast(object)->ObjectProtoToString(); | 6933 value = object.As<v8::Object>()->ObjectProtoToString(); |
| 6923 CHECK(value->IsString() && value->Equals(v8_str("[object Object]"))); | 6934 CHECK(value->IsString() && value->Equals(v8_str("[object Object]"))); |
| 6924 } | 6935 } |
| 6925 | 6936 |
| 6926 | 6937 |
| 6927 bool ApiTestFuzzer::fuzzing_ = false; | 6938 bool ApiTestFuzzer::fuzzing_ = false; |
| 6928 v8::internal::Semaphore* ApiTestFuzzer::all_tests_done_= | 6939 v8::internal::Semaphore* ApiTestFuzzer::all_tests_done_= |
| 6929 v8::internal::OS::CreateSemaphore(0); | 6940 v8::internal::OS::CreateSemaphore(0); |
| 6930 int ApiTestFuzzer::active_tests_; | 6941 int ApiTestFuzzer::active_tests_; |
| 6931 int ApiTestFuzzer::tests_being_run_; | 6942 int ApiTestFuzzer::tests_being_run_; |
| 6932 int ApiTestFuzzer::current_; | 6943 int ApiTestFuzzer::current_; |
| (...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7532 v8::String::AsciiValue name(value); | 7543 v8::String::AsciiValue name(value); |
| 7533 CHECK_EQ("asdf", *name); | 7544 CHECK_EQ("asdf", *name); |
| 7534 } | 7545 } |
| 7535 | 7546 |
| 7536 | 7547 |
| 7537 THREADED_TEST(DateAccess) { | 7548 THREADED_TEST(DateAccess) { |
| 7538 v8::HandleScope scope; | 7549 v8::HandleScope scope; |
| 7539 LocalContext context; | 7550 LocalContext context; |
| 7540 v8::Handle<v8::Value> date = v8::Date::New(1224744689038.0); | 7551 v8::Handle<v8::Value> date = v8::Date::New(1224744689038.0); |
| 7541 CHECK(date->IsDate()); | 7552 CHECK(date->IsDate()); |
| 7542 CHECK_EQ(1224744689038.0, v8::Handle<v8::Date>::Cast(date)->NumberValue()); | 7553 CHECK_EQ(1224744689038.0, date.As<v8::Date>()->NumberValue()); |
| 7543 } | 7554 } |
| 7544 | 7555 |
| 7545 | 7556 |
| 7546 void CheckProperties(v8::Handle<v8::Value> val, int elmc, const char* elmv[]) { | 7557 void CheckProperties(v8::Handle<v8::Value> val, int elmc, const char* elmv[]) { |
| 7547 v8::Handle<v8::Object> obj = v8::Handle<v8::Object>::Cast(val); | 7558 v8::Handle<v8::Object> obj = val.As<v8::Object>(); |
| 7548 v8::Handle<v8::Array> props = obj->GetPropertyNames(); | 7559 v8::Handle<v8::Array> props = obj->GetPropertyNames(); |
| 7549 CHECK_EQ(elmc, props->Length()); | 7560 CHECK_EQ(elmc, props->Length()); |
| 7550 for (int i = 0; i < elmc; i++) { | 7561 for (int i = 0; i < elmc; i++) { |
| 7551 v8::String::Utf8Value elm(props->Get(v8::Integer::New(i))); | 7562 v8::String::Utf8Value elm(props->Get(v8::Integer::New(i))); |
| 7552 CHECK_EQ(elmv[i], *elm); | 7563 CHECK_EQ(elmv[i], *elm); |
| 7553 } | 7564 } |
| 7554 } | 7565 } |
| 7555 | 7566 |
| 7556 | 7567 |
| 7557 THREADED_TEST(PropertyEnumeration) { | 7568 THREADED_TEST(PropertyEnumeration) { |
| 7558 v8::HandleScope scope; | 7569 v8::HandleScope scope; |
| 7559 LocalContext context; | 7570 LocalContext context; |
| 7560 v8::Handle<v8::Value> obj = v8::Script::Compile(v8::String::New( | 7571 v8::Handle<v8::Value> obj = v8::Script::Compile(v8::String::New( |
| 7561 "var result = [];" | 7572 "var result = [];" |
| 7562 "result[0] = {};" | 7573 "result[0] = {};" |
| 7563 "result[1] = {a: 1, b: 2};" | 7574 "result[1] = {a: 1, b: 2};" |
| 7564 "result[2] = [1, 2, 3];" | 7575 "result[2] = [1, 2, 3];" |
| 7565 "var proto = {x: 1, y: 2, z: 3};" | 7576 "var proto = {x: 1, y: 2, z: 3};" |
| 7566 "var x = { __proto__: proto, w: 0, z: 1 };" | 7577 "var x = { __proto__: proto, w: 0, z: 1 };" |
| 7567 "result[3] = x;" | 7578 "result[3] = x;" |
| 7568 "result;"))->Run(); | 7579 "result;"))->Run(); |
| 7569 v8::Handle<v8::Array> elms = v8::Handle<v8::Array>::Cast(obj); | 7580 v8::Handle<v8::Array> elms = obj.As<v8::Array>(); |
| 7570 CHECK_EQ(4, elms->Length()); | 7581 CHECK_EQ(4, elms->Length()); |
| 7571 int elmc0 = 0; | 7582 int elmc0 = 0; |
| 7572 const char** elmv0 = NULL; | 7583 const char** elmv0 = NULL; |
| 7573 CheckProperties(elms->Get(v8::Integer::New(0)), elmc0, elmv0); | 7584 CheckProperties(elms->Get(v8::Integer::New(0)), elmc0, elmv0); |
| 7574 int elmc1 = 2; | 7585 int elmc1 = 2; |
| 7575 const char* elmv1[] = {"a", "b"}; | 7586 const char* elmv1[] = {"a", "b"}; |
| 7576 CheckProperties(elms->Get(v8::Integer::New(1)), elmc1, elmv1); | 7587 CheckProperties(elms->Get(v8::Integer::New(1)), elmc1, elmv1); |
| 7577 int elmc2 = 3; | 7588 int elmc2 = 3; |
| 7578 const char* elmv2[] = {"0", "1", "2"}; | 7589 const char* elmv2[] = {"0", "1", "2"}; |
| 7579 CheckProperties(elms->Get(v8::Integer::New(2)), elmc2, elmv2); | 7590 CheckProperties(elms->Get(v8::Integer::New(2)), elmc2, elmv2); |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8081 | 8092 |
| 8082 const char* sample = | 8093 const char* sample = |
| 8083 "var rv = {};" \ | 8094 "var rv = {};" \ |
| 8084 "rv.alpha = 'hello';" \ | 8095 "rv.alpha = 'hello';" \ |
| 8085 "rv.beta = 123;" \ | 8096 "rv.beta = 123;" \ |
| 8086 "rv;"; | 8097 "rv;"; |
| 8087 | 8098 |
| 8088 // Create an object, verify basics. | 8099 // Create an object, verify basics. |
| 8089 Local<Value> val = CompileRun(sample); | 8100 Local<Value> val = CompileRun(sample); |
| 8090 CHECK(val->IsObject()); | 8101 CHECK(val->IsObject()); |
| 8091 Local<v8::Object> obj = Local<v8::Object>::Cast(val); | 8102 Local<v8::Object> obj = val.As<v8::Object>(); |
| 8092 obj->Set(v8_str("gamma"), v8_str("cloneme")); | 8103 obj->Set(v8_str("gamma"), v8_str("cloneme")); |
| 8093 | 8104 |
| 8094 CHECK_EQ(v8_str("hello"), obj->Get(v8_str("alpha"))); | 8105 CHECK_EQ(v8_str("hello"), obj->Get(v8_str("alpha"))); |
| 8095 CHECK_EQ(v8::Integer::New(123), obj->Get(v8_str("beta"))); | 8106 CHECK_EQ(v8::Integer::New(123), obj->Get(v8_str("beta"))); |
| 8096 CHECK_EQ(v8_str("cloneme"), obj->Get(v8_str("gamma"))); | 8107 CHECK_EQ(v8_str("cloneme"), obj->Get(v8_str("gamma"))); |
| 8097 | 8108 |
| 8098 // Clone it. | 8109 // Clone it. |
| 8099 Local<v8::Object> clone = obj->Clone(); | 8110 Local<v8::Object> clone = obj->Clone(); |
| 8100 CHECK_EQ(v8_str("hello"), clone->Get(v8_str("alpha"))); | 8111 CHECK_EQ(v8_str("hello"), clone->Get(v8_str("alpha"))); |
| 8101 CHECK_EQ(v8::Integer::New(123), clone->Get(v8_str("beta"))); | 8112 CHECK_EQ(v8::Integer::New(123), clone->Get(v8_str("beta"))); |
| (...skipping 1702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9804 CHECK_EQ(42, c1->Get(v8_str("y"))->Int32Value()); | 9815 CHECK_EQ(42, c1->Get(v8_str("y"))->Int32Value()); |
| 9805 } | 9816 } |
| 9806 | 9817 |
| 9807 script = v8::Script::Compile(v8_str("new C2();")); | 9818 script = v8::Script::Compile(v8_str("new C2();")); |
| 9808 for (int i = 0; i < 10; i++) { | 9819 for (int i = 0; i < 10; i++) { |
| 9809 v8::Handle<v8::Object> c2 = v8::Handle<v8::Object>::Cast(script->Run()); | 9820 v8::Handle<v8::Object> c2 = v8::Handle<v8::Object>::Cast(script->Run()); |
| 9810 CHECK_EQ(23, c2->Get(v8_str("x"))->Int32Value()); | 9821 CHECK_EQ(23, c2->Get(v8_str("x"))->Int32Value()); |
| 9811 CHECK_EQ(42, c2->Get(v8_str("y"))->Int32Value()); | 9822 CHECK_EQ(42, c2->Get(v8_str("y"))->Int32Value()); |
| 9812 } | 9823 } |
| 9813 } | 9824 } |
| OLD | NEW |