| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/runtime/runtime-utils.h" | 5 #include "src/runtime/runtime-utils.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "src/accessors.h" | 9 #include "src/accessors.h" |
| 10 #include "src/arguments.h" | 10 #include "src/arguments.h" |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 DCHECK_EQ(3, args.length()); | 202 DCHECK_EQ(3, args.length()); |
| 203 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); | 203 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); |
| 204 CONVERT_LANGUAGE_MODE_ARG_CHECKED(language_mode, 1); | 204 CONVERT_LANGUAGE_MODE_ARG_CHECKED(language_mode, 1); |
| 205 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); | 205 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); |
| 206 | 206 |
| 207 Handle<JSGlobalObject> global(isolate->global_object()); | 207 Handle<JSGlobalObject> global(isolate->global_object()); |
| 208 RETURN_RESULT_OR_FAILURE( | 208 RETURN_RESULT_OR_FAILURE( |
| 209 isolate, Object::SetProperty(global, name, value, language_mode)); | 209 isolate, Object::SetProperty(global, name, value, language_mode)); |
| 210 } | 210 } |
| 211 | 211 |
| 212 | |
| 213 RUNTIME_FUNCTION(Runtime_InitializeConstGlobal) { | |
| 214 HandleScope handle_scope(isolate); | |
| 215 DCHECK_EQ(2, args.length()); | |
| 216 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); | |
| 217 CONVERT_ARG_HANDLE_CHECKED(Object, value, 1); | |
| 218 | |
| 219 Handle<JSGlobalObject> global(isolate->global_object()); | |
| 220 | |
| 221 // Lookup the property as own on the global object. | |
| 222 LookupIterator it(global, name, global, LookupIterator::OWN_SKIP_INTERCEPTOR); | |
| 223 Maybe<PropertyAttributes> maybe = JSReceiver::GetPropertyAttributes(&it); | |
| 224 DCHECK(maybe.IsJust()); | |
| 225 PropertyAttributes old_attributes = maybe.FromJust(); | |
| 226 | |
| 227 PropertyAttributes attr = | |
| 228 static_cast<PropertyAttributes>(DONT_DELETE | READ_ONLY); | |
| 229 // Set the value if the property is either missing, or the property attributes | |
| 230 // allow setting the value without invoking an accessor. | |
| 231 if (it.IsFound()) { | |
| 232 // Ignore if we can't reconfigure the value. | |
| 233 if ((old_attributes & DONT_DELETE) != 0) { | |
| 234 if ((old_attributes & READ_ONLY) != 0 || | |
| 235 it.state() == LookupIterator::ACCESSOR) { | |
| 236 return *value; | |
| 237 } | |
| 238 attr = static_cast<PropertyAttributes>(old_attributes | READ_ONLY); | |
| 239 } | |
| 240 } | |
| 241 | |
| 242 RETURN_FAILURE_ON_EXCEPTION( | |
| 243 isolate, JSObject::DefineOwnPropertyIgnoreAttributes(&it, value, attr)); | |
| 244 | |
| 245 return *value; | |
| 246 } | |
| 247 | |
| 248 namespace { | 212 namespace { |
| 249 | 213 |
| 250 Object* DeclareEvalHelper(Isolate* isolate, Handle<String> name, | 214 Object* DeclareEvalHelper(Isolate* isolate, Handle<String> name, |
| 251 Handle<Object> value) { | 215 Handle<Object> value) { |
| 252 // Declarations are always made in a function, native, or script context, or | 216 // Declarations are always made in a function, native, or script context, or |
| 253 // a declaration block scope. Since this is called from eval, the context | 217 // a declaration block scope. Since this is called from eval, the context |
| 254 // passed is the context of the caller, which may be some nested context and | 218 // passed is the context of the caller, which may be some nested context and |
| 255 // not the declaration context. | 219 // not the declaration context. |
| 256 Handle<Context> context_arg(isolate->context(), isolate); | 220 Handle<Context> context_arg(isolate->context(), isolate); |
| 257 Handle<Context> context(context_arg->declaration_context(), isolate); | 221 Handle<Context> context(context_arg->declaration_context(), isolate); |
| (...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 969 RUNTIME_FUNCTION(Runtime_StoreLookupSlot_Strict) { | 933 RUNTIME_FUNCTION(Runtime_StoreLookupSlot_Strict) { |
| 970 HandleScope scope(isolate); | 934 HandleScope scope(isolate); |
| 971 DCHECK_EQ(2, args.length()); | 935 DCHECK_EQ(2, args.length()); |
| 972 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); | 936 CONVERT_ARG_HANDLE_CHECKED(String, name, 0); |
| 973 CONVERT_ARG_HANDLE_CHECKED(Object, value, 1); | 937 CONVERT_ARG_HANDLE_CHECKED(Object, value, 1); |
| 974 RETURN_RESULT_OR_FAILURE(isolate, StoreLookupSlot(name, value, STRICT)); | 938 RETURN_RESULT_OR_FAILURE(isolate, StoreLookupSlot(name, value, STRICT)); |
| 975 } | 939 } |
| 976 | 940 |
| 977 } // namespace internal | 941 } // namespace internal |
| 978 } // namespace v8 | 942 } // namespace v8 |
| OLD | NEW |