| 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 #include "platform.h" | 48 #include "platform.h" |
| 49 #include "snapshot.h" | 49 #include "snapshot.h" |
| 50 #include "unicode-inl.h" | 50 #include "unicode-inl.h" |
| 51 #include "utils.h" | 51 #include "utils.h" |
| 52 #include "vm-state.h" | 52 #include "vm-state.h" |
| 53 | 53 |
| 54 static const bool kLogThreading = false; | 54 static const bool kLogThreading = false; |
| 55 | 55 |
| 56 using ::v8::AccessorInfo; | 56 using ::v8::AccessorInfo; |
| 57 using ::v8::Arguments; | 57 using ::v8::Arguments; |
| 58 using ::v8::Boolean; | |
| 59 using ::v8::BooleanObject; | |
| 60 using ::v8::Context; | 58 using ::v8::Context; |
| 61 using ::v8::Extension; | 59 using ::v8::Extension; |
| 62 using ::v8::Function; | 60 using ::v8::Function; |
| 63 using ::v8::FunctionTemplate; | 61 using ::v8::FunctionTemplate; |
| 64 using ::v8::Handle; | 62 using ::v8::Handle; |
| 65 using ::v8::HandleScope; | 63 using ::v8::HandleScope; |
| 66 using ::v8::Local; | 64 using ::v8::Local; |
| 67 using ::v8::Message; | 65 using ::v8::Message; |
| 68 using ::v8::MessageCallback; | 66 using ::v8::MessageCallback; |
| 69 using ::v8::Object; | 67 using ::v8::Object; |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 char* buf = i::NewArray<char>(buf_size); | 614 char* buf = i::NewArray<char>(buf_size); |
| 617 memset(buf, 'a', buf_size); | 615 memset(buf, 'a', buf_size); |
| 618 buf[buf_size - 1] = '\0'; | 616 buf[buf_size - 1] = '\0'; |
| 619 Local<String> large_string = String::New(buf); | 617 Local<String> large_string = String::New(buf); |
| 620 i::DeleteArray(buf); | 618 i::DeleteArray(buf); |
| 621 // Large strings should be immediately accepted. | 619 // Large strings should be immediately accepted. |
| 622 CHECK(large_string->CanMakeExternal()); | 620 CHECK(large_string->CanMakeExternal()); |
| 623 } | 621 } |
| 624 | 622 |
| 625 | 623 |
| 626 TEST(MakingExternalUnalignedAsciiString) { | |
| 627 LocalContext env; | |
| 628 v8::HandleScope scope(env->GetIsolate()); | |
| 629 | |
| 630 CompileRun("function cons(a, b) { return a + b; }" | |
| 631 "function slice(a) { return a.substring(1); }"); | |
| 632 // Create a cons string that will land in old pointer space. | |
| 633 Local<String> cons = Local<String>::Cast(CompileRun( | |
| 634 "cons('abcdefghijklm', 'nopqrstuvwxyz');")); | |
| 635 // Create a sliced string that will land in old pointer space. | |
| 636 Local<String> slice = Local<String>::Cast(CompileRun( | |
| 637 "slice('abcdefghijklmnopqrstuvwxyz');")); | |
| 638 | |
| 639 // Trigger GCs so that the newly allocated string moves to old gen. | |
| 640 SimulateFullSpace(HEAP->old_pointer_space()); | |
| 641 HEAP->CollectGarbage(i::NEW_SPACE); // in survivor space now | |
| 642 HEAP->CollectGarbage(i::NEW_SPACE); // in old gen now | |
| 643 | |
| 644 // Turn into external string with unaligned resource data. | |
| 645 int dispose_count = 0; | |
| 646 const char* c_cons = "_abcdefghijklmnopqrstuvwxyz"; | |
| 647 bool success = cons->MakeExternal( | |
| 648 new TestAsciiResource(i::StrDup(c_cons) + 1, &dispose_count)); | |
| 649 CHECK(success); | |
| 650 const char* c_slice = "_bcdefghijklmnopqrstuvwxyz"; | |
| 651 success = slice->MakeExternal( | |
| 652 new TestAsciiResource(i::StrDup(c_slice) + 1, &dispose_count)); | |
| 653 CHECK(success); | |
| 654 | |
| 655 // Trigger GCs and force evacuation. | |
| 656 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); | |
| 657 HEAP->CollectAllGarbage(i::Heap::kReduceMemoryFootprintMask); | |
| 658 } | |
| 659 | |
| 660 | |
| 661 THREADED_TEST(UsingExternalString) { | 624 THREADED_TEST(UsingExternalString) { |
| 662 i::Factory* factory = i::Isolate::Current()->factory(); | 625 i::Factory* factory = i::Isolate::Current()->factory(); |
| 663 { | 626 { |
| 664 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 627 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 665 uint16_t* two_byte_string = AsciiToTwoByteString("test string"); | 628 uint16_t* two_byte_string = AsciiToTwoByteString("test string"); |
| 666 Local<String> string = | 629 Local<String> string = |
| 667 String::NewExternal(new TestResource(two_byte_string)); | 630 String::NewExternal(new TestResource(two_byte_string)); |
| 668 i::Handle<i::String> istring = v8::Utils::OpenHandle(*string); | 631 i::Handle<i::String> istring = v8::Utils::OpenHandle(*string); |
| 669 // Trigger GCs so that the newly allocated string moves to old gen. | 632 // Trigger GCs so that the newly allocated string moves to old gen. |
| 670 HEAP->CollectGarbage(i::NEW_SPACE); // in survivor space now | 633 HEAP->CollectGarbage(i::NEW_SPACE); // in survivor space now |
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1481 v8::Handle<Value> boxed_string = CompileRun("new String(\"test\")"); | 1444 v8::Handle<Value> boxed_string = CompileRun("new String(\"test\")"); |
| 1482 CHECK(boxed_string->IsStringObject()); | 1445 CHECK(boxed_string->IsStringObject()); |
| 1483 v8::Handle<Value> unboxed_string = CompileRun("\"test\""); | 1446 v8::Handle<Value> unboxed_string = CompileRun("\"test\""); |
| 1484 CHECK(!unboxed_string->IsStringObject()); | 1447 CHECK(!unboxed_string->IsStringObject()); |
| 1485 v8::Handle<Value> boxed_not_string = CompileRun("new Number(42)"); | 1448 v8::Handle<Value> boxed_not_string = CompileRun("new Number(42)"); |
| 1486 CHECK(!boxed_not_string->IsStringObject()); | 1449 CHECK(!boxed_not_string->IsStringObject()); |
| 1487 v8::Handle<Value> not_object = CompileRun("0"); | 1450 v8::Handle<Value> not_object = CompileRun("0"); |
| 1488 CHECK(!not_object->IsStringObject()); | 1451 CHECK(!not_object->IsStringObject()); |
| 1489 v8::Handle<v8::StringObject> as_boxed = boxed_string.As<v8::StringObject>(); | 1452 v8::Handle<v8::StringObject> as_boxed = boxed_string.As<v8::StringObject>(); |
| 1490 CHECK(!as_boxed.IsEmpty()); | 1453 CHECK(!as_boxed.IsEmpty()); |
| 1491 Local<v8::String> the_string = as_boxed->ValueOf(); | 1454 Local<v8::String> the_string = as_boxed->StringValue(); |
| 1492 CHECK(!the_string.IsEmpty()); | 1455 CHECK(!the_string.IsEmpty()); |
| 1493 ExpectObject("\"test\"", the_string); | 1456 ExpectObject("\"test\"", the_string); |
| 1494 v8::Handle<v8::Value> new_boxed_string = v8::StringObject::New(the_string); | 1457 v8::Handle<v8::Value> new_boxed_string = v8::StringObject::New(the_string); |
| 1495 CHECK(new_boxed_string->IsStringObject()); | 1458 CHECK(new_boxed_string->IsStringObject()); |
| 1496 as_boxed = new_boxed_string.As<v8::StringObject>(); | 1459 as_boxed = new_boxed_string.As<v8::StringObject>(); |
| 1497 the_string = as_boxed->ValueOf(); | 1460 the_string = as_boxed->StringValue(); |
| 1498 CHECK(!the_string.IsEmpty()); | 1461 CHECK(!the_string.IsEmpty()); |
| 1499 ExpectObject("\"test\"", the_string); | 1462 ExpectObject("\"test\"", the_string); |
| 1500 } | 1463 } |
| 1501 | 1464 |
| 1502 | 1465 |
| 1503 THREADED_TEST(NumberObject) { | 1466 THREADED_TEST(NumberObject) { |
| 1504 LocalContext env; | 1467 LocalContext env; |
| 1505 v8::HandleScope scope(env->GetIsolate()); | 1468 v8::HandleScope scope(env->GetIsolate()); |
| 1506 v8::Handle<Value> boxed_number = CompileRun("new Number(42)"); | 1469 v8::Handle<Value> boxed_number = CompileRun("new Number(42)"); |
| 1507 CHECK(boxed_number->IsNumberObject()); | 1470 CHECK(boxed_number->IsNumberObject()); |
| 1508 v8::Handle<Value> unboxed_number = CompileRun("42"); | 1471 v8::Handle<Value> unboxed_number = CompileRun("42"); |
| 1509 CHECK(!unboxed_number->IsNumberObject()); | 1472 CHECK(!unboxed_number->IsNumberObject()); |
| 1510 v8::Handle<Value> boxed_not_number = CompileRun("new Boolean(false)"); | 1473 v8::Handle<Value> boxed_not_number = CompileRun("new Boolean(false)"); |
| 1511 CHECK(!boxed_not_number->IsNumberObject()); | 1474 CHECK(!boxed_not_number->IsNumberObject()); |
| 1512 v8::Handle<v8::NumberObject> as_boxed = boxed_number.As<v8::NumberObject>(); | 1475 v8::Handle<v8::NumberObject> as_boxed = boxed_number.As<v8::NumberObject>(); |
| 1513 CHECK(!as_boxed.IsEmpty()); | 1476 CHECK(!as_boxed.IsEmpty()); |
| 1514 double the_number = as_boxed->ValueOf(); | 1477 double the_number = as_boxed->NumberValue(); |
| 1515 CHECK_EQ(42.0, the_number); | 1478 CHECK_EQ(42.0, the_number); |
| 1516 v8::Handle<v8::Value> new_boxed_number = v8::NumberObject::New(43); | 1479 v8::Handle<v8::Value> new_boxed_number = v8::NumberObject::New(43); |
| 1517 CHECK(new_boxed_number->IsNumberObject()); | 1480 CHECK(new_boxed_number->IsNumberObject()); |
| 1518 as_boxed = new_boxed_number.As<v8::NumberObject>(); | 1481 as_boxed = new_boxed_number.As<v8::NumberObject>(); |
| 1519 the_number = as_boxed->ValueOf(); | 1482 the_number = as_boxed->NumberValue(); |
| 1520 CHECK_EQ(43.0, the_number); | 1483 CHECK_EQ(43.0, the_number); |
| 1521 } | 1484 } |
| 1522 | 1485 |
| 1523 | 1486 |
| 1524 THREADED_TEST(BooleanObject) { | 1487 THREADED_TEST(BooleanObject) { |
| 1525 LocalContext env; | 1488 LocalContext env; |
| 1526 v8::HandleScope scope(env->GetIsolate()); | 1489 v8::HandleScope scope(env->GetIsolate()); |
| 1527 v8::Handle<Value> boxed_boolean = CompileRun("new Boolean(true)"); | 1490 v8::Handle<Value> boxed_boolean = CompileRun("new Boolean(true)"); |
| 1528 CHECK(boxed_boolean->IsBooleanObject()); | 1491 CHECK(boxed_boolean->IsBooleanObject()); |
| 1529 v8::Handle<Value> unboxed_boolean = CompileRun("true"); | 1492 v8::Handle<Value> unboxed_boolean = CompileRun("true"); |
| 1530 CHECK(!unboxed_boolean->IsBooleanObject()); | 1493 CHECK(!unboxed_boolean->IsBooleanObject()); |
| 1531 v8::Handle<Value> boxed_not_boolean = CompileRun("new Number(42)"); | 1494 v8::Handle<Value> boxed_not_boolean = CompileRun("new Number(42)"); |
| 1532 CHECK(!boxed_not_boolean->IsBooleanObject()); | 1495 CHECK(!boxed_not_boolean->IsBooleanObject()); |
| 1533 v8::Handle<v8::BooleanObject> as_boxed = | 1496 v8::Handle<v8::BooleanObject> as_boxed = |
| 1534 boxed_boolean.As<v8::BooleanObject>(); | 1497 boxed_boolean.As<v8::BooleanObject>(); |
| 1535 CHECK(!as_boxed.IsEmpty()); | 1498 CHECK(!as_boxed.IsEmpty()); |
| 1536 bool the_boolean = as_boxed->ValueOf(); | 1499 bool the_boolean = as_boxed->BooleanValue(); |
| 1537 CHECK_EQ(true, the_boolean); | 1500 CHECK_EQ(true, the_boolean); |
| 1538 v8::Handle<v8::Value> boxed_true = v8::BooleanObject::New(true); | 1501 v8::Handle<v8::Value> boxed_true = v8::BooleanObject::New(true); |
| 1539 v8::Handle<v8::Value> boxed_false = v8::BooleanObject::New(false); | 1502 v8::Handle<v8::Value> boxed_false = v8::BooleanObject::New(false); |
| 1540 CHECK(boxed_true->IsBooleanObject()); | 1503 CHECK(boxed_true->IsBooleanObject()); |
| 1541 CHECK(boxed_false->IsBooleanObject()); | 1504 CHECK(boxed_false->IsBooleanObject()); |
| 1542 as_boxed = boxed_true.As<v8::BooleanObject>(); | 1505 as_boxed = boxed_true.As<v8::BooleanObject>(); |
| 1543 CHECK_EQ(true, as_boxed->ValueOf()); | 1506 CHECK_EQ(true, as_boxed->BooleanValue()); |
| 1544 as_boxed = boxed_false.As<v8::BooleanObject>(); | 1507 as_boxed = boxed_false.As<v8::BooleanObject>(); |
| 1545 CHECK_EQ(false, as_boxed->ValueOf()); | 1508 CHECK_EQ(false, as_boxed->BooleanValue()); |
| 1546 } | 1509 } |
| 1547 | 1510 |
| 1548 | 1511 |
| 1549 THREADED_TEST(PrimitiveAndWrappedBooleans) { | |
| 1550 LocalContext env; | |
| 1551 v8::HandleScope scope(env->GetIsolate()); | |
| 1552 | |
| 1553 Local<Value> primitive_false = Boolean::New(false); | |
| 1554 CHECK(primitive_false->IsBoolean()); | |
| 1555 CHECK(!primitive_false->IsBooleanObject()); | |
| 1556 CHECK(!primitive_false->BooleanValue()); | |
| 1557 CHECK(!primitive_false->IsTrue()); | |
| 1558 CHECK(primitive_false->IsFalse()); | |
| 1559 | |
| 1560 Local<Value> false_value = BooleanObject::New(false); | |
| 1561 CHECK(!false_value->IsBoolean()); | |
| 1562 CHECK(false_value->IsBooleanObject()); | |
| 1563 CHECK(false_value->BooleanValue()); | |
| 1564 CHECK(!false_value->IsTrue()); | |
| 1565 CHECK(!false_value->IsFalse()); | |
| 1566 | |
| 1567 Local<BooleanObject> false_boolean_object = false_value.As<BooleanObject>(); | |
| 1568 CHECK(!false_boolean_object->IsBoolean()); | |
| 1569 CHECK(false_boolean_object->IsBooleanObject()); | |
| 1570 // TODO(svenpanne) Uncomment when BooleanObject::BooleanValue() is deleted. | |
| 1571 // CHECK(false_boolean_object->BooleanValue()); | |
| 1572 CHECK(!false_boolean_object->ValueOf()); | |
| 1573 CHECK(!false_boolean_object->IsTrue()); | |
| 1574 CHECK(!false_boolean_object->IsFalse()); | |
| 1575 | |
| 1576 Local<Value> primitive_true = Boolean::New(true); | |
| 1577 CHECK(primitive_true->IsBoolean()); | |
| 1578 CHECK(!primitive_true->IsBooleanObject()); | |
| 1579 CHECK(primitive_true->BooleanValue()); | |
| 1580 CHECK(primitive_true->IsTrue()); | |
| 1581 CHECK(!primitive_true->IsFalse()); | |
| 1582 | |
| 1583 Local<Value> true_value = BooleanObject::New(true); | |
| 1584 CHECK(!true_value->IsBoolean()); | |
| 1585 CHECK(true_value->IsBooleanObject()); | |
| 1586 CHECK(true_value->BooleanValue()); | |
| 1587 CHECK(!true_value->IsTrue()); | |
| 1588 CHECK(!true_value->IsFalse()); | |
| 1589 | |
| 1590 Local<BooleanObject> true_boolean_object = true_value.As<BooleanObject>(); | |
| 1591 CHECK(!true_boolean_object->IsBoolean()); | |
| 1592 CHECK(true_boolean_object->IsBooleanObject()); | |
| 1593 // TODO(svenpanne) Uncomment when BooleanObject::BooleanValue() is deleted. | |
| 1594 // CHECK(true_boolean_object->BooleanValue()); | |
| 1595 CHECK(true_boolean_object->ValueOf()); | |
| 1596 CHECK(!true_boolean_object->IsTrue()); | |
| 1597 CHECK(!true_boolean_object->IsFalse()); | |
| 1598 } | |
| 1599 | |
| 1600 | |
| 1601 THREADED_TEST(Number) { | 1512 THREADED_TEST(Number) { |
| 1602 LocalContext env; | 1513 LocalContext env; |
| 1603 v8::HandleScope scope(env->GetIsolate()); | 1514 v8::HandleScope scope(env->GetIsolate()); |
| 1604 double PI = 3.1415926; | 1515 double PI = 3.1415926; |
| 1605 Local<v8::Number> pi_obj = v8::Number::New(PI); | 1516 Local<v8::Number> pi_obj = v8::Number::New(PI); |
| 1606 CHECK_EQ(PI, pi_obj->NumberValue()); | 1517 CHECK_EQ(PI, pi_obj->NumberValue()); |
| 1607 } | 1518 } |
| 1608 | 1519 |
| 1609 | 1520 |
| 1610 THREADED_TEST(ToNumber) { | 1521 THREADED_TEST(ToNumber) { |
| (...skipping 1002 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2613 CHECK(sym_val->StrictEquals(sym2)); | 2524 CHECK(sym_val->StrictEquals(sym2)); |
| 2614 CHECK(v8::Symbol::Cast(*sym_val)->Equals(sym2)); | 2525 CHECK(v8::Symbol::Cast(*sym_val)->Equals(sym2)); |
| 2615 | 2526 |
| 2616 v8::Local<v8::Value> sym_obj = v8::SymbolObject::New(isolate, sym2); | 2527 v8::Local<v8::Value> sym_obj = v8::SymbolObject::New(isolate, sym2); |
| 2617 CHECK(sym_obj->IsSymbolObject()); | 2528 CHECK(sym_obj->IsSymbolObject()); |
| 2618 CHECK(!sym2->IsSymbolObject()); | 2529 CHECK(!sym2->IsSymbolObject()); |
| 2619 CHECK(!obj->IsSymbolObject()); | 2530 CHECK(!obj->IsSymbolObject()); |
| 2620 CHECK(sym_obj->Equals(sym2)); | 2531 CHECK(sym_obj->Equals(sym2)); |
| 2621 CHECK(!sym_obj->StrictEquals(sym2)); | 2532 CHECK(!sym_obj->StrictEquals(sym2)); |
| 2622 CHECK(v8::SymbolObject::Cast(*sym_obj)->Equals(sym_obj)); | 2533 CHECK(v8::SymbolObject::Cast(*sym_obj)->Equals(sym_obj)); |
| 2623 CHECK(v8::SymbolObject::Cast(*sym_obj)->ValueOf()->Equals(sym2)); | 2534 CHECK(v8::SymbolObject::Cast(*sym_obj)->SymbolValue()->Equals(sym2)); |
| 2624 | 2535 |
| 2625 // Make sure delete of a non-existent symbol property works. | 2536 // Make sure delete of a non-existent symbol property works. |
| 2626 CHECK(obj->Delete(sym1)); | 2537 CHECK(obj->Delete(sym1)); |
| 2627 CHECK(!obj->Has(sym1)); | 2538 CHECK(!obj->Has(sym1)); |
| 2628 | 2539 |
| 2629 CHECK(obj->Set(sym1, v8::Integer::New(1503))); | 2540 CHECK(obj->Set(sym1, v8::Integer::New(1503))); |
| 2630 CHECK(obj->Has(sym1)); | 2541 CHECK(obj->Has(sym1)); |
| 2631 CHECK_EQ(1503, obj->Get(sym1)->Int32Value()); | 2542 CHECK_EQ(1503, obj->Get(sym1)->Int32Value()); |
| 2632 CHECK(obj->Set(sym1, v8::Integer::New(2002))); | 2543 CHECK(obj->Set(sym1, v8::Integer::New(2002))); |
| 2633 CHECK(obj->Has(sym1)); | 2544 CHECK(obj->Has(sym1)); |
| (...skipping 10587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13221 v8::String::Utf8Value name(value); | 13132 v8::String::Utf8Value name(value); |
| 13222 CHECK_EQ("asdf", *name); | 13133 CHECK_EQ("asdf", *name); |
| 13223 } | 13134 } |
| 13224 | 13135 |
| 13225 | 13136 |
| 13226 THREADED_TEST(DateAccess) { | 13137 THREADED_TEST(DateAccess) { |
| 13227 LocalContext context; | 13138 LocalContext context; |
| 13228 v8::HandleScope scope(context->GetIsolate()); | 13139 v8::HandleScope scope(context->GetIsolate()); |
| 13229 v8::Handle<v8::Value> date = v8::Date::New(1224744689038.0); | 13140 v8::Handle<v8::Value> date = v8::Date::New(1224744689038.0); |
| 13230 CHECK(date->IsDate()); | 13141 CHECK(date->IsDate()); |
| 13231 CHECK_EQ(1224744689038.0, date.As<v8::Date>()->ValueOf()); | 13142 CHECK_EQ(1224744689038.0, date.As<v8::Date>()->NumberValue()); |
| 13232 } | 13143 } |
| 13233 | 13144 |
| 13234 | 13145 |
| 13235 void CheckProperties(v8::Handle<v8::Value> val, int elmc, const char* elmv[]) { | 13146 void CheckProperties(v8::Handle<v8::Value> val, int elmc, const char* elmv[]) { |
| 13236 v8::Handle<v8::Object> obj = val.As<v8::Object>(); | 13147 v8::Handle<v8::Object> obj = val.As<v8::Object>(); |
| 13237 v8::Handle<v8::Array> props = obj->GetPropertyNames(); | 13148 v8::Handle<v8::Array> props = obj->GetPropertyNames(); |
| 13238 CHECK_EQ(elmc, props->Length()); | 13149 CHECK_EQ(elmc, props->Length()); |
| 13239 for (int i = 0; i < elmc; i++) { | 13150 for (int i = 0; i < elmc; i++) { |
| 13240 v8::String::Utf8Value elm(props->Get(v8::Integer::New(i))); | 13151 v8::String::Utf8Value elm(props->Get(v8::Integer::New(i))); |
| 13241 CHECK_EQ(elmv[i], *elm); | 13152 CHECK_EQ(elmv[i], *elm); |
| (...skipping 6744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19986 CheckCorrectThrow("%HasProperty(other, 'x')"); | 19897 CheckCorrectThrow("%HasProperty(other, 'x')"); |
| 19987 CheckCorrectThrow("%HasElement(other, 1)"); | 19898 CheckCorrectThrow("%HasElement(other, 1)"); |
| 19988 CheckCorrectThrow("%IsPropertyEnumerable(other, 'x')"); | 19899 CheckCorrectThrow("%IsPropertyEnumerable(other, 'x')"); |
| 19989 CheckCorrectThrow("%GetPropertyNames(other)"); | 19900 CheckCorrectThrow("%GetPropertyNames(other)"); |
| 19990 CheckCorrectThrow("%GetLocalPropertyNames(other, true)"); | 19901 CheckCorrectThrow("%GetLocalPropertyNames(other, true)"); |
| 19991 CheckCorrectThrow("%DefineOrRedefineAccessorProperty(" | 19902 CheckCorrectThrow("%DefineOrRedefineAccessorProperty(" |
| 19992 "other, 'x', null, null, 1)"); | 19903 "other, 'x', null, null, 1)"); |
| 19993 } | 19904 } |
| 19994 | 19905 |
| 19995 #endif // WIN32 | 19906 #endif // WIN32 |
| OLD | NEW |