| OLD | NEW |
| 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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 | 216 |
| 217 Handle<String> source(String::cast(Handle<Script>::cast(script)->source())); | 217 Handle<String> source(String::cast(Handle<Script>::cast(script)->source())); |
| 218 return *isolate->factory()->NewSubString( | 218 return *isolate->factory()->NewSubString( |
| 219 source, Handle<Smi>::cast(start_position)->value(), | 219 source, Handle<Smi>::cast(start_position)->value(), |
| 220 Handle<Smi>::cast(end_position)->value()); | 220 Handle<Smi>::cast(end_position)->value()); |
| 221 } | 221 } |
| 222 | 222 |
| 223 | 223 |
| 224 static Object* LoadFromSuper(Isolate* isolate, Handle<Object> receiver, | 224 static Object* LoadFromSuper(Isolate* isolate, Handle<Object> receiver, |
| 225 Handle<JSObject> home_object, Handle<Name> name) { | 225 Handle<JSObject> home_object, Handle<Name> name) { |
| 226 if (home_object->IsAccessCheckNeeded() && | 226 if (home_object->IsAccessCheckNeeded() && !isolate->MayAccess(home_object)) { |
| 227 !isolate->MayNamedAccess(home_object, name, v8::ACCESS_GET)) { | 227 isolate->ReportFailedAccessCheck(home_object); |
| 228 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_GET); | |
| 229 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | 228 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |
| 230 } | 229 } |
| 231 | 230 |
| 232 PrototypeIterator iter(isolate, home_object); | 231 PrototypeIterator iter(isolate, home_object); |
| 233 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | 232 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); |
| 234 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); | 233 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); |
| 235 | 234 |
| 236 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); | 235 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); |
| 237 Handle<Object> result; | 236 Handle<Object> result; |
| 238 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Object::GetProperty(&it)); | 237 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result, Object::GetProperty(&it)); |
| 239 return *result; | 238 return *result; |
| 240 } | 239 } |
| 241 | 240 |
| 242 | 241 |
| 243 static Object* LoadElementFromSuper(Isolate* isolate, Handle<Object> receiver, | 242 static Object* LoadElementFromSuper(Isolate* isolate, Handle<Object> receiver, |
| 244 Handle<JSObject> home_object, | 243 Handle<JSObject> home_object, |
| 245 uint32_t index) { | 244 uint32_t index) { |
| 246 if (home_object->IsAccessCheckNeeded() && | 245 if (home_object->IsAccessCheckNeeded() && !isolate->MayAccess(home_object)) { |
| 247 !isolate->MayIndexedAccess(home_object, index, v8::ACCESS_GET)) { | 246 isolate->ReportFailedAccessCheck(home_object); |
| 248 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_GET); | |
| 249 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | 247 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |
| 250 } | 248 } |
| 251 | 249 |
| 252 PrototypeIterator iter(isolate, home_object); | 250 PrototypeIterator iter(isolate, home_object); |
| 253 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | 251 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); |
| 254 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); | 252 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); |
| 255 | 253 |
| 256 Handle<Object> result; | 254 Handle<Object> result; |
| 257 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 255 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 258 isolate, result, | 256 isolate, result, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 if (name->AsArrayIndex(&index)) { | 288 if (name->AsArrayIndex(&index)) { |
| 291 return LoadElementFromSuper(isolate, receiver, home_object, index); | 289 return LoadElementFromSuper(isolate, receiver, home_object, index); |
| 292 } | 290 } |
| 293 return LoadFromSuper(isolate, receiver, home_object, name); | 291 return LoadFromSuper(isolate, receiver, home_object, name); |
| 294 } | 292 } |
| 295 | 293 |
| 296 | 294 |
| 297 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, | 295 static Object* StoreToSuper(Isolate* isolate, Handle<JSObject> home_object, |
| 298 Handle<Object> receiver, Handle<Name> name, | 296 Handle<Object> receiver, Handle<Name> name, |
| 299 Handle<Object> value, LanguageMode language_mode) { | 297 Handle<Object> value, LanguageMode language_mode) { |
| 300 if (home_object->IsAccessCheckNeeded() && | 298 if (home_object->IsAccessCheckNeeded() && !isolate->MayAccess(home_object)) { |
| 301 !isolate->MayNamedAccess(home_object, name, v8::ACCESS_SET)) { | 299 isolate->ReportFailedAccessCheck(home_object); |
| 302 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET); | |
| 303 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | 300 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |
| 304 } | 301 } |
| 305 | 302 |
| 306 PrototypeIterator iter(isolate, home_object); | 303 PrototypeIterator iter(isolate, home_object); |
| 307 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | 304 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); |
| 308 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); | 305 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); |
| 309 | 306 |
| 310 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); | 307 LookupIterator it(receiver, name, Handle<JSReceiver>::cast(proto)); |
| 311 Handle<Object> result; | 308 Handle<Object> result; |
| 312 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 309 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 313 isolate, result, | 310 isolate, result, |
| 314 Object::SetSuperProperty(&it, value, language_mode, | 311 Object::SetSuperProperty(&it, value, language_mode, |
| 315 Object::CERTAINLY_NOT_STORE_FROM_KEYED)); | 312 Object::CERTAINLY_NOT_STORE_FROM_KEYED)); |
| 316 return *result; | 313 return *result; |
| 317 } | 314 } |
| 318 | 315 |
| 319 | 316 |
| 320 static Object* StoreElementToSuper(Isolate* isolate, | 317 static Object* StoreElementToSuper(Isolate* isolate, |
| 321 Handle<JSObject> home_object, | 318 Handle<JSObject> home_object, |
| 322 Handle<Object> receiver, uint32_t index, | 319 Handle<Object> receiver, uint32_t index, |
| 323 Handle<Object> value, | 320 Handle<Object> value, |
| 324 LanguageMode language_mode) { | 321 LanguageMode language_mode) { |
| 325 if (home_object->IsAccessCheckNeeded() && | 322 if (home_object->IsAccessCheckNeeded() && !isolate->MayAccess(home_object)) { |
| 326 !isolate->MayIndexedAccess(home_object, index, v8::ACCESS_SET)) { | 323 isolate->ReportFailedAccessCheck(home_object); |
| 327 isolate->ReportFailedAccessCheck(home_object, v8::ACCESS_SET); | |
| 328 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); | 324 RETURN_FAILURE_IF_SCHEDULED_EXCEPTION(isolate); |
| 329 } | 325 } |
| 330 | 326 |
| 331 PrototypeIterator iter(isolate, home_object); | 327 PrototypeIterator iter(isolate, home_object); |
| 332 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); | 328 Handle<Object> proto = PrototypeIterator::GetCurrent(iter); |
| 333 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); | 329 if (!proto->IsJSReceiver()) return isolate->heap()->undefined_value(); |
| 334 | 330 |
| 335 Handle<Object> result; | 331 Handle<Object> result; |
| 336 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 332 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 337 isolate, result, | 333 isolate, result, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 return *isolate->factory()->undefined_value(); | 419 return *isolate->factory()->undefined_value(); |
| 424 } | 420 } |
| 425 | 421 |
| 426 | 422 |
| 427 RUNTIME_FUNCTION(RuntimeReference_DefaultConstructorCallSuper) { | 423 RUNTIME_FUNCTION(RuntimeReference_DefaultConstructorCallSuper) { |
| 428 UNREACHABLE(); | 424 UNREACHABLE(); |
| 429 return nullptr; | 425 return nullptr; |
| 430 } | 426 } |
| 431 } | 427 } |
| 432 } // namespace v8::internal | 428 } // namespace v8::internal |
| OLD | NEW |