OLD | NEW |
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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/contexts.h" | 9 #include "src/contexts.h" |
10 #include "src/deoptimizer.h" | 10 #include "src/deoptimizer.h" |
(...skipping 1384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1395 // | 1395 // |
1396 // Accessors::MakeModuleExport | 1396 // Accessors::MakeModuleExport |
1397 // | 1397 // |
1398 | 1398 |
1399 static void ModuleGetExport( | 1399 static void ModuleGetExport( |
1400 v8::Local<v8::String> property, | 1400 v8::Local<v8::String> property, |
1401 const v8::PropertyCallbackInfo<v8::Value>& info) { | 1401 const v8::PropertyCallbackInfo<v8::Value>& info) { |
1402 JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); | 1402 JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); |
1403 Context* context = Context::cast(instance->context()); | 1403 Context* context = Context::cast(instance->context()); |
1404 DCHECK(context->IsModuleContext()); | 1404 DCHECK(context->IsModuleContext()); |
1405 int slot = info.Data()->Int32Value(); | 1405 Isolate* isolate = instance->GetIsolate(); |
| 1406 int slot = info.Data() |
| 1407 ->Int32Value(info.GetIsolate()->GetCurrentContext()) |
| 1408 .FromMaybe(-1); |
| 1409 if (slot == -1) { |
| 1410 Handle<String> name = v8::Utils::OpenHandle(*property); |
| 1411 |
| 1412 Handle<Object> exception = isolate->factory()->NewReferenceError( |
| 1413 MessageTemplate::kNotDefined, name); |
| 1414 isolate->ScheduleThrow(*exception); |
| 1415 return; |
| 1416 } |
1406 Object* value = context->get(slot); | 1417 Object* value = context->get(slot); |
1407 Isolate* isolate = instance->GetIsolate(); | |
1408 if (value->IsTheHole()) { | 1418 if (value->IsTheHole()) { |
1409 Handle<String> name = v8::Utils::OpenHandle(*property); | 1419 Handle<String> name = v8::Utils::OpenHandle(*property); |
1410 | 1420 |
1411 Handle<Object> exception = isolate->factory()->NewReferenceError( | 1421 Handle<Object> exception = isolate->factory()->NewReferenceError( |
1412 MessageTemplate::kNotDefined, name); | 1422 MessageTemplate::kNotDefined, name); |
1413 isolate->ScheduleThrow(*exception); | 1423 isolate->ScheduleThrow(*exception); |
1414 return; | 1424 return; |
1415 } | 1425 } |
1416 info.GetReturnValue().Set(v8::Utils::ToLocal(Handle<Object>(value, isolate))); | 1426 info.GetReturnValue().Set(v8::Utils::ToLocal(Handle<Object>(value, isolate))); |
1417 } | 1427 } |
1418 | 1428 |
1419 | 1429 |
1420 static void ModuleSetExport( | 1430 static void ModuleSetExport( |
1421 v8::Local<v8::String> property, | 1431 v8::Local<v8::String> property, |
1422 v8::Local<v8::Value> value, | 1432 v8::Local<v8::Value> value, |
1423 const v8::PropertyCallbackInfo<v8::Value>& info) { | 1433 const v8::PropertyCallbackInfo<v8::Value>& info) { |
1424 JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); | 1434 JSModule* instance = JSModule::cast(*v8::Utils::OpenHandle(*info.Holder())); |
1425 Context* context = Context::cast(instance->context()); | 1435 Context* context = Context::cast(instance->context()); |
1426 DCHECK(context->IsModuleContext()); | 1436 DCHECK(context->IsModuleContext()); |
1427 int slot = info.Data()->Int32Value(); | 1437 Isolate* isolate = instance->GetIsolate(); |
| 1438 int slot = info.Data() |
| 1439 ->Int32Value(info.GetIsolate()->GetCurrentContext()) |
| 1440 .FromMaybe(-1); |
| 1441 if (slot == -1) { |
| 1442 Handle<String> name = v8::Utils::OpenHandle(*property); |
| 1443 Handle<Object> exception = isolate->factory()->NewReferenceError( |
| 1444 MessageTemplate::kNotDefined, name); |
| 1445 isolate->ScheduleThrow(*exception); |
| 1446 return; |
| 1447 } |
1428 Object* old_value = context->get(slot); | 1448 Object* old_value = context->get(slot); |
1429 Isolate* isolate = context->GetIsolate(); | |
1430 if (old_value->IsTheHole()) { | 1449 if (old_value->IsTheHole()) { |
1431 Handle<String> name = v8::Utils::OpenHandle(*property); | 1450 Handle<String> name = v8::Utils::OpenHandle(*property); |
1432 Handle<Object> exception = isolate->factory()->NewReferenceError( | 1451 Handle<Object> exception = isolate->factory()->NewReferenceError( |
1433 MessageTemplate::kNotDefined, name); | 1452 MessageTemplate::kNotDefined, name); |
1434 isolate->ScheduleThrow(*exception); | 1453 isolate->ScheduleThrow(*exception); |
1435 return; | 1454 return; |
1436 } | 1455 } |
1437 context->set(slot, *v8::Utils::OpenHandle(*value)); | 1456 context->set(slot, *v8::Utils::OpenHandle(*value)); |
1438 } | 1457 } |
1439 | 1458 |
(...skipping 13 matching lines...) Expand all Loading... |
1453 Handle<Object> getter = v8::FromCData(isolate, &ModuleGetExport); | 1472 Handle<Object> getter = v8::FromCData(isolate, &ModuleGetExport); |
1454 Handle<Object> setter = v8::FromCData(isolate, &ModuleSetExport); | 1473 Handle<Object> setter = v8::FromCData(isolate, &ModuleSetExport); |
1455 info->set_getter(*getter); | 1474 info->set_getter(*getter); |
1456 if (!(attributes & ReadOnly)) info->set_setter(*setter); | 1475 if (!(attributes & ReadOnly)) info->set_setter(*setter); |
1457 return info; | 1476 return info; |
1458 } | 1477 } |
1459 | 1478 |
1460 | 1479 |
1461 } // namespace internal | 1480 } // namespace internal |
1462 } // namespace v8 | 1481 } // namespace v8 |
OLD | NEW |