Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(854)

Side by Side Diff: src/api.cc

Issue 2108203002: Implement immutable prototype chains (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: reverse bitfield arguments Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 1399 matching lines...) Expand 10 before | Expand all | Expand 10 after
1410 i::Handle<i::ObjectTemplateInfo> obj = 1410 i::Handle<i::ObjectTemplateInfo> obj =
1411 i::Handle<i::ObjectTemplateInfo>::cast(struct_obj); 1411 i::Handle<i::ObjectTemplateInfo>::cast(struct_obj);
1412 InitializeTemplate(obj, Consts::OBJECT_TEMPLATE); 1412 InitializeTemplate(obj, Consts::OBJECT_TEMPLATE);
1413 int next_serial_number = 0; 1413 int next_serial_number = 0;
1414 if (!do_not_cache) { 1414 if (!do_not_cache) {
1415 next_serial_number = isolate->heap()->GetNextTemplateSerialNumber(); 1415 next_serial_number = isolate->heap()->GetNextTemplateSerialNumber();
1416 } 1416 }
1417 obj->set_serial_number(i::Smi::FromInt(next_serial_number)); 1417 obj->set_serial_number(i::Smi::FromInt(next_serial_number));
1418 if (!constructor.IsEmpty()) 1418 if (!constructor.IsEmpty())
1419 obj->set_constructor(*Utils::OpenHandle(*constructor)); 1419 obj->set_constructor(*Utils::OpenHandle(*constructor));
1420 obj->set_internal_field_count(i::Smi::FromInt(0)); 1420 obj->set_data(i::Smi::FromInt(0));
1421 return Utils::ToLocal(obj); 1421 return Utils::ToLocal(obj);
1422 } 1422 }
1423 1423
1424 Local<ObjectTemplate> ObjectTemplate::New( 1424 Local<ObjectTemplate> ObjectTemplate::New(
1425 i::Isolate* isolate, v8::Local<FunctionTemplate> constructor) { 1425 i::Isolate* isolate, v8::Local<FunctionTemplate> constructor) {
1426 return ObjectTemplateNew(isolate, constructor, false); 1426 return ObjectTemplateNew(isolate, constructor, false);
1427 } 1427 }
1428 1428
1429 MaybeLocal<ObjectTemplate> ObjectTemplate::FromSnapshot(Isolate* isolate, 1429 MaybeLocal<ObjectTemplate> ObjectTemplate::FromSnapshot(Isolate* isolate,
1430 size_t index) { 1430 size_t index) {
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
1705 SET_FIELD_WRAPPED(obj, set_callback, callback); 1705 SET_FIELD_WRAPPED(obj, set_callback, callback);
1706 if (data.IsEmpty()) { 1706 if (data.IsEmpty()) {
1707 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); 1707 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1708 } 1708 }
1709 obj->set_data(*Utils::OpenHandle(*data)); 1709 obj->set_data(*Utils::OpenHandle(*data));
1710 cons->set_instance_call_handler(*obj); 1710 cons->set_instance_call_handler(*obj);
1711 } 1711 }
1712 1712
1713 1713
1714 int ObjectTemplate::InternalFieldCount() { 1714 int ObjectTemplate::InternalFieldCount() {
1715 return i::Smi::cast(Utils::OpenHandle(this)->internal_field_count())->value(); 1715 return Utils::OpenHandle(this)->internal_field_count();
1716 } 1716 }
1717 1717
1718 1718
1719 void ObjectTemplate::SetInternalFieldCount(int value) { 1719 void ObjectTemplate::SetInternalFieldCount(int value) {
1720 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1720 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1721 if (!Utils::ApiCheck(i::Smi::IsValid(value), 1721 if (!Utils::ApiCheck(i::Smi::IsValid(value),
1722 "v8::ObjectTemplate::SetInternalFieldCount()", 1722 "v8::ObjectTemplate::SetInternalFieldCount()",
1723 "Invalid internal field count")) { 1723 "Invalid internal field count")) {
1724 return; 1724 return;
1725 } 1725 }
1726 ENTER_V8(isolate); 1726 ENTER_V8(isolate);
1727 if (value > 0) { 1727 if (value > 0) {
1728 // The internal field count is set by the constructor function's 1728 // The internal field count is set by the constructor function's
1729 // construct code, so we ensure that there is a constructor 1729 // construct code, so we ensure that there is a constructor
1730 // function to do the setting. 1730 // function to do the setting.
1731 EnsureConstructor(isolate, this); 1731 EnsureConstructor(isolate, this);
1732 } 1732 }
1733 Utils::OpenHandle(this)->set_internal_field_count(i::Smi::FromInt(value)); 1733 Utils::OpenHandle(this)->set_internal_field_count(value);
1734 } 1734 }
1735 1735
1736 bool ObjectTemplate::ImmutableProto() {
1737 return Utils::OpenHandle(this)->immutable_proto();
1738 }
1739
1740 void ObjectTemplate::SetImmutableProto() {
1741 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1742 ENTER_V8(isolate);
1743 Utils::OpenHandle(this)->set_immutable_proto(true);
1744 }
1736 1745
1737 // --- S c r i p t s --- 1746 // --- S c r i p t s ---
1738 1747
1739 1748
1740 // Internally, UnboundScript is a SharedFunctionInfo, and Script is a 1749 // Internally, UnboundScript is a SharedFunctionInfo, and Script is a
1741 // JSFunction. 1750 // JSFunction.
1742 1751
1743 ScriptCompiler::CachedData::CachedData(const uint8_t* data_, int length_, 1752 ScriptCompiler::CachedData::CachedData(const uint8_t* data_, int length_,
1744 BufferPolicy buffer_policy_) 1753 BufferPolicy buffer_policy_)
1745 : data(data_), 1754 : data(data_),
(...skipping 7184 matching lines...) Expand 10 before | Expand all | Expand 10 after
8930 Address callback_address = 8939 Address callback_address =
8931 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 8940 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8932 VMState<EXTERNAL> state(isolate); 8941 VMState<EXTERNAL> state(isolate);
8933 ExternalCallbackScope call_scope(isolate, callback_address); 8942 ExternalCallbackScope call_scope(isolate, callback_address);
8934 callback(info); 8943 callback(info);
8935 } 8944 }
8936 8945
8937 8946
8938 } // namespace internal 8947 } // namespace internal
8939 } // namespace v8 8948 } // namespace v8
OLDNEW
« include/v8.h ('K') | « include/v8.h ('k') | src/api-natives.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698