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

Side by Side Diff: src/objects.cc

Issue 2449783006: Add a native data property that replaces itself with a real data property (Closed)
Patch Set: Created 4 years, 1 month 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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <memory> 9 #include <memory>
10 #include <sstream> 10 #include <sstream>
(...skipping 1334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 ASSIGN_RETURN_ON_EXCEPTION(isolate, receiver, 1345 ASSIGN_RETURN_ON_EXCEPTION(isolate, receiver,
1346 Object::ConvertReceiver(isolate, receiver), 1346 Object::ConvertReceiver(isolate, receiver),
1347 Object); 1347 Object);
1348 } 1348 }
1349 1349
1350 PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder, 1350 PropertyCallbackArguments args(isolate, info->data(), *receiver, *holder,
1351 Object::DONT_THROW); 1351 Object::DONT_THROW);
1352 Handle<Object> result = args.Call(call_fun, name); 1352 Handle<Object> result = args.Call(call_fun, name);
1353 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object); 1353 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
1354 if (result.is_null()) return isolate->factory()->undefined_value(); 1354 if (result.is_null()) return isolate->factory()->undefined_value();
1355 // Rebox handle before return. 1355 Handle<Object> reboxed_result = handle(*result, isolate);
1356 return handle(*result, isolate); 1356 if (info->replace_on_access() && receiver->IsJSReceiver()) {
1357 args.Call(reinterpret_cast<GenericNamedPropertySetterCallback>(
1358 &Accessors::ReconfigureToDataProperty),
1359 name, result);
1360 RETURN_EXCEPTION_IF_SCHEDULED_EXCEPTION(isolate, Object);
1361 }
1362 return reboxed_result;
1357 } 1363 }
1358 1364
1359 // Regular accessor. 1365 // Regular accessor.
1360 Handle<Object> getter(AccessorPair::cast(*structure)->getter(), isolate); 1366 Handle<Object> getter(AccessorPair::cast(*structure)->getter(), isolate);
1361 if (getter->IsFunctionTemplateInfo()) { 1367 if (getter->IsFunctionTemplateInfo()) {
1362 return Builtins::InvokeApiFunction( 1368 return Builtins::InvokeApiFunction(
1363 isolate, false, Handle<FunctionTemplateInfo>::cast(getter), receiver, 0, 1369 isolate, false, Handle<FunctionTemplateInfo>::cast(getter), receiver, 0,
1364 nullptr, isolate->factory()->undefined_value()); 1370 nullptr, isolate->factory()->undefined_value());
1365 } else if (getter->IsCallable()) { 1371 } else if (getter->IsCallable()) {
1366 // TODO(rossberg): nicer would be to cast to some JSCallable here... 1372 // TODO(rossberg): nicer would be to cast to some JSCallable here...
(...skipping 18884 matching lines...) Expand 10 before | Expand all | Expand 10 after
20251 ns, Accessors::ModuleNamespaceEntryInfo(isolate, name, attr)) 20257 ns, Accessors::ModuleNamespaceEntryInfo(isolate, name, attr))
20252 .Check(); 20258 .Check();
20253 } 20259 }
20254 JSObject::PreventExtensions(ns, THROW_ON_ERROR).ToChecked(); 20260 JSObject::PreventExtensions(ns, THROW_ON_ERROR).ToChecked();
20255 20261
20256 return ns; 20262 return ns;
20257 } 20263 }
20258 20264
20259 } // namespace internal 20265 } // namespace internal
20260 } // namespace v8 20266 } // namespace v8
OLDNEW
« src/accessors.cc ('K') | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698