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

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

Issue 718473002: ES6: Add support for super in object literals (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix remaining code review issues Created 6 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 | Annotate | Revision Log
« no previous file with comments | « src/preparser.h ('k') | src/scopes.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 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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 : isolate->factory()->empty_string(); 106 : isolate->factory()->empty_string();
107 constructor->shared()->set_name(*name_string); 107 constructor->shared()->set_name(*name_string);
108 108
109 JSFunction::SetPrototype(constructor, prototype); 109 JSFunction::SetPrototype(constructor, prototype);
110 PropertyAttributes attribs = 110 PropertyAttributes attribs =
111 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); 111 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY);
112 RETURN_FAILURE_ON_EXCEPTION( 112 RETURN_FAILURE_ON_EXCEPTION(
113 isolate, JSObject::SetOwnPropertyIgnoreAttributes( 113 isolate, JSObject::SetOwnPropertyIgnoreAttributes(
114 constructor, isolate->factory()->prototype_string(), 114 constructor, isolate->factory()->prototype_string(),
115 prototype, attribs)); 115 prototype, attribs));
116
117 // TODO(arv): Only do this conditionally.
116 Handle<Symbol> home_object_symbol(isolate->heap()->home_object_symbol()); 118 Handle<Symbol> home_object_symbol(isolate->heap()->home_object_symbol());
117 RETURN_FAILURE_ON_EXCEPTION( 119 RETURN_FAILURE_ON_EXCEPTION(
118 isolate, JSObject::SetOwnPropertyIgnoreAttributes( 120 isolate, JSObject::SetOwnPropertyIgnoreAttributes(
119 constructor, home_object_symbol, prototype, DONT_ENUM)); 121 constructor, home_object_symbol, prototype, DONT_ENUM));
120 122
121 if (!constructor_parent.is_null()) { 123 if (!constructor_parent.is_null()) {
122 RETURN_FAILURE_ON_EXCEPTION( 124 RETURN_FAILURE_ON_EXCEPTION(
123 isolate, 125 isolate,
124 JSObject::SetPrototype(constructor, constructor_parent, false)); 126 JSObject::SetPrototype(constructor, constructor_parent, false));
125 } 127 }
(...skipping 20 matching lines...) Expand all
146 } 148 }
147 149
148 150
149 RUNTIME_FUNCTION(Runtime_DefineClassMethod) { 151 RUNTIME_FUNCTION(Runtime_DefineClassMethod) {
150 HandleScope scope(isolate); 152 HandleScope scope(isolate);
151 DCHECK(args.length() == 3); 153 DCHECK(args.length() == 3);
152 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); 154 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
153 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); 155 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
154 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 2); 156 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 2);
155 157
156 RETURN_FAILURE_ON_EXCEPTION(
157 isolate, JSObject::SetOwnPropertyIgnoreAttributes(
158 function, isolate->factory()->home_object_symbol(), object,
159 DONT_ENUM));
160
161 uint32_t index; 158 uint32_t index;
162 if (key->ToArrayIndex(&index)) { 159 if (key->ToArrayIndex(&index)) {
163 RETURN_FAILURE_ON_EXCEPTION( 160 RETURN_FAILURE_ON_EXCEPTION(
164 isolate, JSObject::SetOwnElement(object, index, function, STRICT)); 161 isolate, JSObject::SetOwnElement(object, index, function, STRICT));
165 } 162 }
166 163
167 Handle<Name> name; 164 Handle<Name> name;
168 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, 165 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name,
169 Runtime::ToName(isolate, key)); 166 Runtime::ToName(isolate, key));
170 if (name->AsArrayIndex(&index)) { 167 if (name->AsArrayIndex(&index)) {
(...skipping 13 matching lines...) Expand all
184 DCHECK(args.length() == 3); 181 DCHECK(args.length() == 3);
185 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); 182 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
186 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); 183 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
187 CONVERT_ARG_HANDLE_CHECKED(JSFunction, getter, 2); 184 CONVERT_ARG_HANDLE_CHECKED(JSFunction, getter, 2);
188 185
189 Handle<Name> name; 186 Handle<Name> name;
190 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, 187 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name,
191 Runtime::ToName(isolate, key)); 188 Runtime::ToName(isolate, key));
192 RETURN_FAILURE_ON_EXCEPTION( 189 RETURN_FAILURE_ON_EXCEPTION(
193 isolate, 190 isolate,
194 JSObject::SetOwnPropertyIgnoreAttributes(
195 getter, isolate->factory()->home_object_symbol(), object, DONT_ENUM));
196
197 RETURN_FAILURE_ON_EXCEPTION(
198 isolate,
199 JSObject::DefineAccessor(object, name, getter, 191 JSObject::DefineAccessor(object, name, getter,
200 isolate->factory()->null_value(), NONE)); 192 isolate->factory()->null_value(), NONE));
201 return isolate->heap()->undefined_value(); 193 return isolate->heap()->undefined_value();
202 } 194 }
203 195
204 196
205 RUNTIME_FUNCTION(Runtime_DefineClassSetter) { 197 RUNTIME_FUNCTION(Runtime_DefineClassSetter) {
206 HandleScope scope(isolate); 198 HandleScope scope(isolate);
207 DCHECK(args.length() == 3); 199 DCHECK(args.length() == 3);
208 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); 200 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
209 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1); 201 CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
210 CONVERT_ARG_HANDLE_CHECKED(JSFunction, setter, 2); 202 CONVERT_ARG_HANDLE_CHECKED(JSFunction, setter, 2);
211 203
212 Handle<Name> name; 204 Handle<Name> name;
213 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, 205 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name,
214 Runtime::ToName(isolate, key)); 206 Runtime::ToName(isolate, key));
215 RETURN_FAILURE_ON_EXCEPTION( 207 RETURN_FAILURE_ON_EXCEPTION(
216 isolate, 208 isolate,
217 JSObject::SetOwnPropertyIgnoreAttributes(
218 setter, isolate->factory()->home_object_symbol(), object, DONT_ENUM));
219 RETURN_FAILURE_ON_EXCEPTION(
220 isolate,
221 JSObject::DefineAccessor(object, name, isolate->factory()->null_value(), 209 JSObject::DefineAccessor(object, name, isolate->factory()->null_value(),
222 setter, NONE)); 210 setter, NONE));
223 return isolate->heap()->undefined_value(); 211 return isolate->heap()->undefined_value();
224 } 212 }
225 213
226 214
227 RUNTIME_FUNCTION(Runtime_ClassGetSourceCode) { 215 RUNTIME_FUNCTION(Runtime_ClassGetSourceCode) {
228 HandleScope shs(isolate); 216 HandleScope shs(isolate);
229 DCHECK(args.length() == 1); 217 DCHECK(args.length() == 1);
230 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0); 218 CONVERT_ARG_HANDLE_CHECKED(JSFunction, fun, 0);
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 DCHECK(args.length() == 4); 431 DCHECK(args.length() == 4);
444 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); 432 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
445 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); 433 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
446 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2); 434 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2);
447 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3); 435 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3);
448 436
449 return StoreKeyedToSuper(isolate, home_object, receiver, key, value, SLOPPY); 437 return StoreKeyedToSuper(isolate, home_object, receiver, key, value, SLOPPY);
450 } 438 }
451 } 439 }
452 } // namespace v8::internal 440 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/preparser.h ('k') | src/scopes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698