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

Side by Side Diff: src/js/v8natives.js

Issue 1489423002: [proxies] Make Object.{freeze,seal} behave correctly for proxies. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add some tests. Created 5 years 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 | « no previous file | src/objects.h » ('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 (function(global, utils) { 5 (function(global, utils) {
6 6
7 %CheckIsBootstrapping(); 7 %CheckIsBootstrapping();
8 8
9 // ---------------------------------------------------------------------------- 9 // ----------------------------------------------------------------------------
10 // Imports 10 // Imports
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after
1044 } 1044 }
1045 return obj; 1045 return obj;
1046 } 1046 }
1047 return %ObjectDefineProperties(obj, properties); 1047 return %ObjectDefineProperties(obj, properties);
1048 } 1048 }
1049 1049
1050 1050
1051 // ES5 section 15.2.3.8. 1051 // ES5 section 15.2.3.8.
1052 function ObjectSealJS(obj) { 1052 function ObjectSealJS(obj) {
1053 if (!IS_SPEC_OBJECT(obj)) return obj; 1053 if (!IS_SPEC_OBJECT(obj)) return obj;
1054 var isProxy = %_IsJSProxy(obj); 1054 return %ObjectSeal(obj);
1055 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj)) {
1056 // TODO(neis): For proxies, must call preventExtensions trap first.
1057 var names = OwnPropertyKeys(obj);
1058 for (var i = 0; i < names.length; i++) {
1059 var name = names[i];
1060 var desc = GetOwnPropertyJS(obj, name);
1061 if (desc.isConfigurable()) {
1062 desc.setConfigurable(false);
1063 DefineOwnProperty(obj, name, desc, true);
1064 }
1065 }
1066 %PreventExtensions(obj);
1067 } else {
1068 // TODO(adamk): Is it worth going to this fast path if the
1069 // object's properties are already in dictionary mode?
1070 %ObjectSeal(obj);
1071 }
1072 return obj;
1073 } 1055 }
1074 1056
1075 1057
1076 // ES5 section 15.2.3.9. 1058 // ES5 section 15.2.3.9.
1077 function ObjectFreezeJS(obj) { 1059 function ObjectFreezeJS(obj) {
1078 if (!IS_SPEC_OBJECT(obj)) return obj; 1060 if (!IS_SPEC_OBJECT(obj)) return obj;
1079 var isProxy = %_IsJSProxy(obj); 1061 return %ObjectFreeze(obj);
1080 // TODO(conradw): Investigate modifying the fast path to accommodate strong
1081 // objects.
1082 if (isProxy || %HasSloppyArgumentsElements(obj) || %IsObserved(obj) ||
1083 IS_STRONG(obj)) {
1084 // TODO(neis): For proxies, must call preventExtensions trap first.
1085 var names = OwnPropertyKeys(obj);
1086 for (var i = 0; i < names.length; i++) {
1087 var name = names[i];
1088 var desc = GetOwnPropertyJS(obj, name);
1089 if (desc.isWritable() || desc.isConfigurable()) {
1090 if (IsDataDescriptor(desc)) desc.setWritable(false);
1091 desc.setConfigurable(false);
1092 DefineOwnProperty(obj, name, desc, true);
1093 }
1094 }
1095 %PreventExtensions(obj);
1096 } else {
1097 // TODO(adamk): Is it worth going to this fast path if the
1098 // object's properties are already in dictionary mode?
1099 %ObjectFreeze(obj);
1100 }
1101 return obj;
1102 } 1062 }
1103 1063
1104 1064
1105 // ES5 section 15.2.3.10 1065 // ES5 section 15.2.3.10
1106 function ObjectPreventExtension(obj) { 1066 function ObjectPreventExtension(obj) {
1107 if (!IS_SPEC_OBJECT(obj)) return obj; 1067 if (!IS_SPEC_OBJECT(obj)) return obj;
1108 return %PreventExtensions(obj); 1068 return %PreventExtensions(obj);
1109 } 1069 }
1110 1070
1111 1071
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 1696
1737 %InstallToContext([ 1697 %InstallToContext([
1738 "global_eval_fun", GlobalEval, 1698 "global_eval_fun", GlobalEval,
1739 "object_value_of", ObjectValueOf, 1699 "object_value_of", ObjectValueOf,
1740 "object_to_string", ObjectToString, 1700 "object_to_string", ObjectToString,
1741 "object_get_own_property_descriptor", ObjectGetOwnPropertyDescriptor, 1701 "object_get_own_property_descriptor", ObjectGetOwnPropertyDescriptor,
1742 "to_complete_property_descriptor", ToCompletePropertyDescriptor, 1702 "to_complete_property_descriptor", ToCompletePropertyDescriptor,
1743 ]); 1703 ]);
1744 1704
1745 }) 1705 })
OLDNEW
« no previous file with comments | « no previous file | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698