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

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: IsImmutableProto 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
« no previous file with comments | « include/v8.h ('k') | src/api-natives.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1398 matching lines...) Expand 10 before | Expand all | Expand 10 after
1409 i::Handle<i::ObjectTemplateInfo> obj = 1409 i::Handle<i::ObjectTemplateInfo> obj =
1410 i::Handle<i::ObjectTemplateInfo>::cast(struct_obj); 1410 i::Handle<i::ObjectTemplateInfo>::cast(struct_obj);
1411 InitializeTemplate(obj, Consts::OBJECT_TEMPLATE); 1411 InitializeTemplate(obj, Consts::OBJECT_TEMPLATE);
1412 int next_serial_number = 0; 1412 int next_serial_number = 0;
1413 if (!do_not_cache) { 1413 if (!do_not_cache) {
1414 next_serial_number = isolate->heap()->GetNextTemplateSerialNumber(); 1414 next_serial_number = isolate->heap()->GetNextTemplateSerialNumber();
1415 } 1415 }
1416 obj->set_serial_number(i::Smi::FromInt(next_serial_number)); 1416 obj->set_serial_number(i::Smi::FromInt(next_serial_number));
1417 if (!constructor.IsEmpty()) 1417 if (!constructor.IsEmpty())
1418 obj->set_constructor(*Utils::OpenHandle(*constructor)); 1418 obj->set_constructor(*Utils::OpenHandle(*constructor));
1419 obj->set_internal_field_count(i::Smi::FromInt(0)); 1419 obj->set_data(i::Smi::FromInt(0));
1420 return Utils::ToLocal(obj); 1420 return Utils::ToLocal(obj);
1421 } 1421 }
1422 1422
1423 Local<ObjectTemplate> ObjectTemplate::New( 1423 Local<ObjectTemplate> ObjectTemplate::New(
1424 i::Isolate* isolate, v8::Local<FunctionTemplate> constructor) { 1424 i::Isolate* isolate, v8::Local<FunctionTemplate> constructor) {
1425 return ObjectTemplateNew(isolate, constructor, false); 1425 return ObjectTemplateNew(isolate, constructor, false);
1426 } 1426 }
1427 1427
1428 Local<ObjectTemplate> ObjectTemplate::FromSnapshot(Isolate* isolate, 1428 Local<ObjectTemplate> ObjectTemplate::FromSnapshot(Isolate* isolate,
1429 size_t index) { 1429 size_t index) {
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
1704 SET_FIELD_WRAPPED(obj, set_callback, callback); 1704 SET_FIELD_WRAPPED(obj, set_callback, callback);
1705 if (data.IsEmpty()) { 1705 if (data.IsEmpty()) {
1706 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); 1706 data = v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate));
1707 } 1707 }
1708 obj->set_data(*Utils::OpenHandle(*data)); 1708 obj->set_data(*Utils::OpenHandle(*data));
1709 cons->set_instance_call_handler(*obj); 1709 cons->set_instance_call_handler(*obj);
1710 } 1710 }
1711 1711
1712 1712
1713 int ObjectTemplate::InternalFieldCount() { 1713 int ObjectTemplate::InternalFieldCount() {
1714 return i::Smi::cast(Utils::OpenHandle(this)->internal_field_count())->value(); 1714 return Utils::OpenHandle(this)->internal_field_count();
1715 } 1715 }
1716 1716
1717 1717
1718 void ObjectTemplate::SetInternalFieldCount(int value) { 1718 void ObjectTemplate::SetInternalFieldCount(int value) {
1719 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 1719 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1720 if (!Utils::ApiCheck(i::Smi::IsValid(value), 1720 if (!Utils::ApiCheck(i::Smi::IsValid(value),
1721 "v8::ObjectTemplate::SetInternalFieldCount()", 1721 "v8::ObjectTemplate::SetInternalFieldCount()",
1722 "Invalid internal field count")) { 1722 "Invalid internal field count")) {
1723 return; 1723 return;
1724 } 1724 }
1725 ENTER_V8(isolate); 1725 ENTER_V8(isolate);
1726 if (value > 0) { 1726 if (value > 0) {
1727 // The internal field count is set by the constructor function's 1727 // The internal field count is set by the constructor function's
1728 // construct code, so we ensure that there is a constructor 1728 // construct code, so we ensure that there is a constructor
1729 // function to do the setting. 1729 // function to do the setting.
1730 EnsureConstructor(isolate, this); 1730 EnsureConstructor(isolate, this);
1731 } 1731 }
1732 Utils::OpenHandle(this)->set_internal_field_count(i::Smi::FromInt(value)); 1732 Utils::OpenHandle(this)->set_internal_field_count(value);
1733 } 1733 }
1734 1734
1735 bool ObjectTemplate::IsImmutableProto() {
1736 return Utils::OpenHandle(this)->immutable_proto();
1737 }
1738
1739 void ObjectTemplate::SetImmutableProto() {
1740 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
1741 ENTER_V8(isolate);
1742 Utils::OpenHandle(this)->set_immutable_proto(true);
1743 }
1735 1744
1736 // --- S c r i p t s --- 1745 // --- S c r i p t s ---
1737 1746
1738 1747
1739 // Internally, UnboundScript is a SharedFunctionInfo, and Script is a 1748 // Internally, UnboundScript is a SharedFunctionInfo, and Script is a
1740 // JSFunction. 1749 // JSFunction.
1741 1750
1742 ScriptCompiler::CachedData::CachedData(const uint8_t* data_, int length_, 1751 ScriptCompiler::CachedData::CachedData(const uint8_t* data_, int length_,
1743 BufferPolicy buffer_policy_) 1752 BufferPolicy buffer_policy_)
1744 : data(data_), 1753 : data(data_),
(...skipping 7154 matching lines...) Expand 10 before | Expand all | Expand 10 after
8899 Address callback_address = 8908 Address callback_address =
8900 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 8909 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8901 VMState<EXTERNAL> state(isolate); 8910 VMState<EXTERNAL> state(isolate);
8902 ExternalCallbackScope call_scope(isolate, callback_address); 8911 ExternalCallbackScope call_scope(isolate, callback_address);
8903 callback(info); 8912 callback(info);
8904 } 8913 }
8905 8914
8906 8915
8907 } // namespace internal 8916 } // namespace internal
8908 } // namespace v8 8917 } // namespace v8
OLDNEW
« no previous file with comments | « include/v8.h ('k') | src/api-natives.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698