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 2739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2750 | 2750 |
2751 THREADED_TEST(SymbolProperties) { | 2751 THREADED_TEST(SymbolProperties) { |
2752 i::FLAG_harmony_symbols = true; | 2752 i::FLAG_harmony_symbols = true; |
2753 | 2753 |
2754 LocalContext env; | 2754 LocalContext env; |
2755 v8::Isolate* isolate = env->GetIsolate(); | 2755 v8::Isolate* isolate = env->GetIsolate(); |
2756 v8::HandleScope scope(isolate); | 2756 v8::HandleScope scope(isolate); |
2757 | 2757 |
2758 v8::Local<v8::Object> obj = v8::Object::New(isolate); | 2758 v8::Local<v8::Object> obj = v8::Object::New(isolate); |
2759 v8::Local<v8::Symbol> sym1 = v8::Symbol::New(isolate); | 2759 v8::Local<v8::Symbol> sym1 = v8::Symbol::New(isolate); |
2760 v8::Local<v8::Symbol> sym2 = v8::Symbol::New(isolate, "my-symbol"); | 2760 v8::Local<v8::Symbol> sym2 = |
| 2761 v8::Symbol::New(isolate, v8_str("my-symbol")); |
2761 | 2762 |
2762 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | 2763 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
2763 | 2764 |
2764 // Check basic symbol functionality. | 2765 // Check basic symbol functionality. |
2765 CHECK(sym1->IsSymbol()); | 2766 CHECK(sym1->IsSymbol()); |
2766 CHECK(sym2->IsSymbol()); | 2767 CHECK(sym2->IsSymbol()); |
2767 CHECK(!obj->IsSymbol()); | 2768 CHECK(!obj->IsSymbol()); |
2768 | 2769 |
2769 CHECK(sym1->Equals(sym1)); | 2770 CHECK(sym1->Equals(sym1)); |
2770 CHECK(sym2->Equals(sym2)); | 2771 CHECK(sym2->Equals(sym2)); |
2771 CHECK(!sym1->Equals(sym2)); | 2772 CHECK(!sym1->Equals(sym2)); |
2772 CHECK(!sym2->Equals(sym1)); | 2773 CHECK(!sym2->Equals(sym1)); |
2773 CHECK(sym1->StrictEquals(sym1)); | 2774 CHECK(sym1->StrictEquals(sym1)); |
2774 CHECK(sym2->StrictEquals(sym2)); | 2775 CHECK(sym2->StrictEquals(sym2)); |
2775 CHECK(!sym1->StrictEquals(sym2)); | 2776 CHECK(!sym1->StrictEquals(sym2)); |
2776 CHECK(!sym2->StrictEquals(sym1)); | 2777 CHECK(!sym2->StrictEquals(sym1)); |
2777 | 2778 |
2778 CHECK(sym2->Name()->Equals(v8::String::NewFromUtf8(isolate, "my-symbol"))); | 2779 CHECK(sym2->Name()->Equals(v8_str("my-symbol"))); |
2779 | 2780 |
2780 v8::Local<v8::Value> sym_val = sym2; | 2781 v8::Local<v8::Value> sym_val = sym2; |
2781 CHECK(sym_val->IsSymbol()); | 2782 CHECK(sym_val->IsSymbol()); |
2782 CHECK(sym_val->Equals(sym2)); | 2783 CHECK(sym_val->Equals(sym2)); |
2783 CHECK(sym_val->StrictEquals(sym2)); | 2784 CHECK(sym_val->StrictEquals(sym2)); |
2784 CHECK(v8::Symbol::Cast(*sym_val)->Equals(sym2)); | 2785 CHECK(v8::Symbol::Cast(*sym_val)->Equals(sym2)); |
2785 | 2786 |
2786 v8::Local<v8::Value> sym_obj = v8::SymbolObject::New(isolate, sym2); | 2787 v8::Local<v8::Value> sym_obj = v8::SymbolObject::New(isolate, sym2); |
2787 CHECK(sym_obj->IsSymbolObject()); | 2788 CHECK(sym_obj->IsSymbolObject()); |
2788 CHECK(!sym2->IsSymbolObject()); | 2789 CHECK(!sym2->IsSymbolObject()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2838 } | 2839 } |
2839 | 2840 |
2840 | 2841 |
2841 THREADED_TEST(PrivateProperties) { | 2842 THREADED_TEST(PrivateProperties) { |
2842 LocalContext env; | 2843 LocalContext env; |
2843 v8::Isolate* isolate = env->GetIsolate(); | 2844 v8::Isolate* isolate = env->GetIsolate(); |
2844 v8::HandleScope scope(isolate); | 2845 v8::HandleScope scope(isolate); |
2845 | 2846 |
2846 v8::Local<v8::Object> obj = v8::Object::New(isolate); | 2847 v8::Local<v8::Object> obj = v8::Object::New(isolate); |
2847 v8::Local<v8::Private> priv1 = v8::Private::New(isolate); | 2848 v8::Local<v8::Private> priv1 = v8::Private::New(isolate); |
2848 v8::Local<v8::Private> priv2 = v8::Private::New(isolate, | 2849 v8::Local<v8::Private> priv2 = |
2849 v8_str("my-private")); | 2850 v8::Private::New(isolate, v8_str("my-private")); |
2850 | 2851 |
2851 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); | 2852 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
2852 | 2853 |
2853 CHECK(priv2->Name()->Equals(v8::String::NewFromUtf8(isolate, "my-private"))); | 2854 CHECK(priv2->Name()->Equals(v8::String::NewFromUtf8(isolate, "my-private"))); |
2854 | 2855 |
2855 // Make sure delete of a non-existent private symbol property works. | 2856 // Make sure delete of a non-existent private symbol property works. |
2856 CHECK(obj->DeletePrivate(priv1)); | 2857 CHECK(obj->DeletePrivate(priv1)); |
2857 CHECK(!obj->HasPrivate(priv1)); | 2858 CHECK(!obj->HasPrivate(priv1)); |
2858 | 2859 |
2859 CHECK(obj->SetPrivate(priv1, v8::Integer::New(isolate, 1503))); | 2860 CHECK(obj->SetPrivate(priv1, v8::Integer::New(isolate, 1503))); |
(...skipping 30 matching lines...) Expand all Loading... |
2890 | 2891 |
2891 // Private properties are inherited (for the time being). | 2892 // Private properties are inherited (for the time being). |
2892 v8::Local<v8::Object> child = v8::Object::New(isolate); | 2893 v8::Local<v8::Object> child = v8::Object::New(isolate); |
2893 child->SetPrototype(obj); | 2894 child->SetPrototype(obj); |
2894 CHECK(child->HasPrivate(priv1)); | 2895 CHECK(child->HasPrivate(priv1)); |
2895 CHECK_EQ(2002, child->GetPrivate(priv1)->Int32Value()); | 2896 CHECK_EQ(2002, child->GetPrivate(priv1)->Int32Value()); |
2896 CHECK_EQ(0, child->GetOwnPropertyNames()->Length()); | 2897 CHECK_EQ(0, child->GetOwnPropertyNames()->Length()); |
2897 } | 2898 } |
2898 | 2899 |
2899 | 2900 |
| 2901 THREADED_TEST(GlobalPrivates) { |
| 2902 LocalContext env; |
| 2903 v8::Isolate* isolate = env->GetIsolate(); |
| 2904 v8::HandleScope scope(isolate); |
| 2905 |
| 2906 v8::Local<String> name = v8_str("my-private"); |
| 2907 v8::Local<v8::Private> glob = v8::Private::Global(isolate, name); |
| 2908 v8::Local<v8::Object> obj = v8::Object::New(isolate); |
| 2909 CHECK(obj->SetPrivate(glob, v8::Integer::New(isolate, 3))); |
| 2910 |
| 2911 v8::Local<v8::Private> glob2 = v8::Private::Global(isolate, name); |
| 2912 CHECK(obj->HasPrivate(glob2)); |
| 2913 |
| 2914 v8::Local<v8::Private> priv = v8::Private::New(isolate, name); |
| 2915 CHECK(!obj->HasPrivate(priv)); |
| 2916 |
| 2917 CompileRun("var intern = %CreateGlobalPrivateSymbol('my-private')"); |
| 2918 v8::Local<Value> intern = env->Global()->Get(v8_str("intern")); |
| 2919 CHECK(!obj->Has(intern)); |
| 2920 } |
| 2921 |
| 2922 |
2900 class ScopedArrayBufferContents { | 2923 class ScopedArrayBufferContents { |
2901 public: | 2924 public: |
2902 explicit ScopedArrayBufferContents( | 2925 explicit ScopedArrayBufferContents( |
2903 const v8::ArrayBuffer::Contents& contents) | 2926 const v8::ArrayBuffer::Contents& contents) |
2904 : contents_(contents) {} | 2927 : contents_(contents) {} |
2905 ~ScopedArrayBufferContents() { free(contents_.Data()); } | 2928 ~ScopedArrayBufferContents() { free(contents_.Data()); } |
2906 void* Data() const { return contents_.Data(); } | 2929 void* Data() const { return contents_.Data(); } |
2907 size_t ByteLength() const { return contents_.ByteLength(); } | 2930 size_t ByteLength() const { return contents_.ByteLength(); } |
2908 private: | 2931 private: |
2909 const v8::ArrayBuffer::Contents contents_; | 2932 const v8::ArrayBuffer::Contents contents_; |
(...skipping 7272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10182 v8::FunctionTemplate::New(context->GetIsolate()); | 10205 v8::FunctionTemplate::New(context->GetIsolate()); |
10183 t2->SetHiddenPrototype(true); | 10206 t2->SetHiddenPrototype(true); |
10184 | 10207 |
10185 // Inherit from t1 and mark prototype as hidden. | 10208 // Inherit from t1 and mark prototype as hidden. |
10186 t2->Inherit(t1); | 10209 t2->Inherit(t1); |
10187 t2->InstanceTemplate()->Set(v8_str("mine"), v8_num(4)); | 10210 t2->InstanceTemplate()->Set(v8_str("mine"), v8_num(4)); |
10188 | 10211 |
10189 Local<v8::Object> o2 = t2->GetFunction()->NewInstance(); | 10212 Local<v8::Object> o2 = t2->GetFunction()->NewInstance(); |
10190 CHECK(o2->SetPrototype(o1)); | 10213 CHECK(o2->SetPrototype(o1)); |
10191 | 10214 |
10192 v8::Local<v8::Symbol> sym = v8::Symbol::New(context->GetIsolate(), "s1"); | 10215 v8::Local<v8::Symbol> sym = |
| 10216 v8::Symbol::New(context->GetIsolate(), v8_str("s1")); |
10193 o1->Set(sym, v8_num(3)); | 10217 o1->Set(sym, v8_num(3)); |
10194 o1->SetHiddenValue(v8_str("h1"), | 10218 o1->SetHiddenValue( |
10195 v8::Integer::New(context->GetIsolate(), 2013)); | 10219 v8_str("h1"), v8::Integer::New(context->GetIsolate(), 2013)); |
10196 | 10220 |
10197 // Call the runtime version of GetLocalPropertyNames() on | 10221 // Call the runtime version of GetLocalPropertyNames() on |
10198 // the natively created object through JavaScript. | 10222 // the natively created object through JavaScript. |
10199 context->Global()->Set(v8_str("obj"), o2); | 10223 context->Global()->Set(v8_str("obj"), o2); |
10200 context->Global()->Set(v8_str("sym"), sym); | 10224 context->Global()->Set(v8_str("sym"), sym); |
10201 // PROPERTY_ATTRIBUTES_NONE = 0 | 10225 // PROPERTY_ATTRIBUTES_NONE = 0 |
10202 CompileRun("var names = %GetLocalPropertyNames(obj, 0);"); | 10226 CompileRun("var names = %GetLocalPropertyNames(obj, 0);"); |
10203 | 10227 |
10204 ExpectInt32("names.length", 7); | 10228 ExpectInt32("names.length", 7); |
10205 ExpectTrue("names.indexOf(\"foo\") >= 0"); | 10229 ExpectTrue("names.indexOf(\"foo\") >= 0"); |
(...skipping 12130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22336 "f.call(friend);"); | 22360 "f.call(friend);"); |
22337 CHECK_EQ(2, named_access_count); | 22361 CHECK_EQ(2, named_access_count); |
22338 | 22362 |
22339 // Test access using Object.setPrototypeOf reflective method. | 22363 // Test access using Object.setPrototypeOf reflective method. |
22340 named_access_count = 0; | 22364 named_access_count = 0; |
22341 CompileRun("Object.setPrototypeOf(friend, {});"); | 22365 CompileRun("Object.setPrototypeOf(friend, {});"); |
22342 CHECK_EQ(1, named_access_count); | 22366 CHECK_EQ(1, named_access_count); |
22343 CompileRun("Object.getPrototypeOf(friend);"); | 22367 CompileRun("Object.getPrototypeOf(friend);"); |
22344 CHECK_EQ(2, named_access_count); | 22368 CHECK_EQ(2, named_access_count); |
22345 } | 22369 } |
OLD | NEW |