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

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

Issue 894683003: Introduce LanguageMode, drop StrictMode. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: . Created 5 years, 10 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
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 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 Runtime::ToName(isolate, key)); 274 Runtime::ToName(isolate, key));
275 if (name->AsArrayIndex(&index)) { 275 if (name->AsArrayIndex(&index)) {
276 return LoadElementFromSuper(isolate, receiver, home_object, index); 276 return LoadElementFromSuper(isolate, receiver, home_object, index);
277 } 277 }
278 return LoadFromSuper(isolate, receiver, home_object, name); 278 return LoadFromSuper(isolate, receiver, home_object, name);
279 } 279 }
280 280
281 281
282 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, 282 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object,
283 Handle<Object> receiver, Handle<Name> name, 283 Handle<Object> receiver, Handle<Name> name,
284 Handle<Object> value, StrictMode strict_mode) { 284 Handle<Object> value, LanguageMode language_mode) {
285 if (home_object->IsAccessCheckNeeded() && 285 if (home_object->IsAccessCheckNeeded() &&
286 !isolate->MayNamedAccess(home_object, name, v8::ACCESS_SET)) { 286 !isolate->MayNamedAccess(home_object, name, v8::ACCESS_SET)) {
287 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET); 287 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET);
288 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); 288 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate);
289 } 289 }
290 290
291 PrototypeIterator iter(isolate, home_object); 291 PrototypeIterator iter(isolate, home_object);
292 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); 292 Handle<Object> proto = PrototypeIterator::GetCurrent(iter);
293 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); 293 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value();
294 294
295 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); 295 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto));
296 Handle<Object> result; 296 Handle<Object> result;
297 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 297 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
298 isolate, result, 298 isolate, result,
299 Object::SetProperty(&it, value, strict_mode, 299 Object::SetProperty(&it, value, language_mode,
300 Object::CERTAINLY_NOT_STORE_FROM_KEYED, 300 Object::CERTAINLY_NOT_STORE_FROM_KEYED,
301 Object::SUPER_PROPERTY)); 301 Object::SUPER_PROPERTY));
302 return *result; 302 return *result;
303 } 303 }
304 304
305 305
306 static Object* StoreElementToSuper(Isolate* isolate, 306 static Object* StoreElementToSuper(Isolate* isolate,
307 Handle<JSObject> home_object, 307 Handle<JSObject> home_object,
308 Handle<Object> receiver, uint32_t index, 308 Handle<Object> receiver, uint32_t index,
309 Handle<Object> value, 309 Handle<Object> value,
310 StrictMode strict_mode) { 310 LanguageMode language_mode) {
311 if (home_object->IsAccessCheckNeeded() && 311 if (home_object->IsAccessCheckNeeded() &&
312 !isolate->MayIndexedAccess(home_object, index, v8::ACCESS_SET)) { 312 !isolate->MayIndexedAccess(home_object, index, v8::ACCESS_SET)) {
313 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET); 313 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET);
314 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); 314 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate);
315 } 315 }
316 316
317 PrototypeIterator iter(isolate, home_object); 317 PrototypeIterator iter(isolate, home_object);
318 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); 318 Handle<Object> proto = PrototypeIterator::GetCurrent(iter);
319 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); 319 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value();
320 320
321 Handle<Object> result; 321 Handle<Object> result;
322 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 322 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
323 isolate, result, 323 isolate, result,
324 Object::SetElementWithReceiver(isolate, proto, receiver, index, value, 324 Object::SetElementWithReceiver(isolate, proto, receiver, index, value,
325 strict_mode)); 325 language_mode));
326 return *result; 326 return *result;
327 } 327 }
328 328
329 329
330 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) { 330 RUNTIME_FUNCTION(Runtime_StoreToSuper_Strict) {
331 HandleScope scope(isolate); 331 HandleScope scope(isolate);
332 DCHECK(args.length() == 4); 332 DCHECK(args.length() == 4);
333 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); 333 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
334 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); 334 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
335 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2); 335 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2);
(...skipping 10 matching lines...) Expand all
346 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); 346 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
347 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2); 347 CONVERT_ARG_HANDLE_CHECKED(Name, name, 2);
348 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3); 348 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3);
349 349
350 return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY); 350 return StoreToSuper(isolate, home_object, receiver, name, value, SLOPPY);
351 } 351 }
352 352
353 353
354 static Object* StoreKeyedToSuper(Isolate* isolate, Handle<JSObject> home_object, 354 static Object* StoreKeyedToSuper(Isolate* isolate, Handle<JSObject> home_object,
355 Handle<Object> receiver, Handle<Object> key, 355 Handle<Object> receiver, Handle<Object> key,
356 Handle<Object> value, StrictMode strict_mode) { 356 Handle<Object> value,
357 LanguageMode language_mode) {
357 uint32_t index; 358 uint32_t index;
358 359
359 if (key->ToArrayIndex(&index)) { 360 if (key->ToArrayIndex(&index)) {
360 return StoreElementToSuper(isolate, home_object, receiver, index, value, 361 return StoreElementToSuper(isolate, home_object, receiver, index, value,
361 strict_mode); 362 language_mode);
362 } 363 }
363 Handle<Name> name; 364 Handle<Name> name;
364 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name, 365 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, name,
365 Runtime::ToName(isolate, key)); 366 Runtime::ToName(isolate, key));
366 if (name->AsArrayIndex(&index)) { 367 if (name->AsArrayIndex(&index)) {
367 return StoreElementToSuper(isolate, home_object, receiver, index, value, 368 return StoreElementToSuper(isolate, home_object, receiver, index, value,
368 strict_mode); 369 language_mode);
369 } 370 }
370 return StoreToSuper(isolate, home_object, receiver, name, value, strict_mode); 371 return StoreToSuper(isolate, home_object, receiver, name, value,
372 language_mode);
371 } 373 }
372 374
373 375
374 RUNTIME_FUNCTION(Runtime_StoreKeyedToSuper_Strict) { 376 RUNTIME_FUNCTION(Runtime_StoreKeyedToSuper_Strict) {
375 HandleScope scope(isolate); 377 HandleScope scope(isolate);
376 DCHECK(args.length() == 4); 378 DCHECK(args.length() == 4);
377 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0); 379 CONVERT_ARG_HANDLE_CHECKED(Object, receiver, 0);
378 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1); 380 CONVERT_ARG_HANDLE_CHECKED(JSObject, home_object, 1);
379 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2); 381 CONVERT_ARG_HANDLE_CHECKED(Object, key, 2);
380 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3); 382 CONVERT_ARG_HANDLE_CHECKED(Object, value, 3);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 } 437 }
436 438
437 Handle<Object> result; 439 Handle<Object> result;
438 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 440 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
439 isolate, result, 441 isolate, result,
440 Execution::Call(isolate, proto_function, receiver, argc, argv, false)); 442 Execution::Call(isolate, proto_function, receiver, argc, argv, false));
441 return *result; 443 return *result;
442 } 444 }
443 } 445 }
444 } // namespace v8::internal 446 } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698