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

Side by Side Diff: src/runtime/runtime-classes.cc

Issue 638623002: Keyed stores to super where key is a name. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: All platforms + CR feedback Created 6 years, 2 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 | Annotate | Revision Log
OLDNEW
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 <stdlib.h> 5 #include <stdlib.h>
6 #include <limits> 6 #include <limits>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/isolate-inl.h" 10 #include "src/isolate-inl.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 DCHECK(args.length() == 3); 92 DCHECK(args.length() == 3);
93 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); 93 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
94 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); 94 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
95 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2); 95 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2);
96 96
97 Handle<Name> name; 97 Handle<Name> name;
98 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, 98 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name,
99 Runtime::ToName(isolate, key)); 99 Runtime::ToName(isolate, key));
100 uint32_t index; 100 uint32_t index;
101 if (name->AsArrayIndex(&index)) { 101 if (name->AsArrayIndex(&index)) {
102 // TODO(dslomov): Implement.
102 return ThrowUnsupportedSuper(isolate); 103 return ThrowUnsupportedSuper(isolate);
103 } 104 }
104 return LoadFromSuper(isolate, receiver, home_object, name); 105 return LoadFromSuper(isolate, receiver, home_object, name);
105 } 106 }
106 107
107 108
108 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, 109 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object,
109 Handle<Object> receiver, Handle<Name> name, 110 Handle<Object> receiver, Handle<Name> name,
110 Handle<Object> value, StrictMode strict_mode) { 111 Handle<Object> value, StrictMode strict_mode) {
111 if (home_object->IsAccessCheckNeeded() && 112 if (home_object->IsAccessCheckNeeded() &&
(...skipping 15 matching lines...) Expand all
127 Object::SUPER_PROPERTY)); 128 Object::SUPER_PROPERTY));
128 return *result; 129 return *result;
129 } 130 }
130 131
131 132
132 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) { 133 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) {
133 HandleScope scope(isolate); 134 HandleScope scope(isolate);
134 DCHECK(args.length() == 4); 135 DCHECK(args.length() == 4);
135 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); 136 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
136 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); 137 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
137 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); 138 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2);
138 CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); 139 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3);
139 140
140 return StoreToSuper(isolate, home_object, receiver, name, value, STRICT); 141 return StoreToSuper(isolate, home_object, receiver, name, value, STRICT);
141 } 142 }
142 143
143 144
144 RUNTIME_FUNCTION(Runtime_StoreToSuper_Sloppy) { 145 RUNTIME_FUNCTION(Runtime_StoreToSuper_Sloppy) {
145 HandleScope scope(isolate); 146 HandleScope scope(isolate);
146 DCHECK(args.length() == 4); 147 DCHECK(args.length() == 4);
147 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); 148 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
148 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); 149 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
149 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); 150 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2);
150 CONVERT_ARG_HANDLE_CHECKED(Name, name, 3); 151 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3);
151 152
152 return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY); 153 return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY);
153 } 154 }
155
156
157 static Object* StoreKeyedToSuper(Isolate* isolate, Handle<JSObject> home_object,
158 Handle<Object> receiver, Handle<Object> key,
159 Handle<Object> value, StrictMode strict_mode) {
160 Handle<Name> name;
161 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name,
162 Runtime::ToName(isolate, key));
163 uint32_t index;
164 if (name->AsArrayIndex(&index)) {
165 // TODO(dslomov): Implement.
166 return ThrowUnsupportedSuper(isolate);
167 }
168 return StoreToSuper(isolate, home_object, receiver, name, value, strict_mode);
169 }
170
171
172 RUNTIME_FUNCTION(Runtime_StoreKeyedToSuper_Strict) {
173 HandleScope scope(isolate);
174 DCHECK(args.length() == 4);
175 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
176 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
177 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2);
178 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3);
179
180 return StoreKeyedToSuper(isolate, home_object, receiver, key, value, STRICT);
181 }
182
183
184 RUNTIME_FUNCTION(Runtime_StoreKeyedToSuper_Sloppy) {
185 HandleScope scope(isolate);
186 DCHECK(args.length() == 4);
187 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
188 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
189 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2);
190 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3);
191
192 return StoreKeyedToSuper(isolate, home_object, receiver, key, value, SLOPPY);
193 }
154 } 194 }
155 } // namespace v8::internal 195 } // namespace v8::internal
OLDNEW
« src/full-codegen.h ('K') | « src/runtime/runtime.h ('k') | src/x64/full-codegen-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698