diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/binding.cc | 30 | ||||
-rw-r--r-- | src/deno_dir.rs | 3 |
2 files changed, 26 insertions, 7 deletions
diff --git a/src/binding.cc b/src/binding.cc index 19448ca2a..7015660e3 100644 --- a/src/binding.cc +++ b/src/binding.cc @@ -103,6 +103,7 @@ void HandleException(v8::Local<v8::Context> context, d->last_exception = exception_str; } else { printf("Pre-Deno Exception %s\n", exception_str.c_str()); + exit(1); } } @@ -278,7 +279,7 @@ void InitializeContext(v8::Isolate* isolate, v8::Local<v8::Context> context, auto global = context->Global(); auto deno_val = v8::Object::New(isolate); - CHECK(global->Set(context, deno::v8_str("deno"), deno_val).FromJust()); + CHECK(global->Set(context, deno::v8_str("libdeno"), deno_val).FromJust()); auto print_tmpl = v8::FunctionTemplate::New(isolate, Print); auto print_val = print_tmpl->GetFunction(context).ToLocalChecked(); @@ -295,17 +296,34 @@ void InitializeContext(v8::Isolate* isolate, v8::Local<v8::Context> context, skip_onerror = true; { auto source = deno::v8_str(js_source.c_str()); - CHECK(global->Set(context, deno::v8_str("mainSource"), source).FromJust()); + CHECK( + deno_val->Set(context, deno::v8_str("mainSource"), source).FromJust()); bool r = deno::ExecuteV8StringSource(context, js_filename, source); CHECK(r); if (source_map != nullptr) { CHECK_GT(source_map->length(), 1u); - std::string set_source_map = "setMainSourceMap( " + *source_map + " )"; - CHECK_GT(set_source_map.length(), source_map->length()); - r = deno::Execute(context, "set_source_map.js", set_source_map.c_str()); - CHECK(r); + v8::TryCatch try_catch(isolate); + v8::ScriptOrigin origin(v8_str("set_source_map.js")); + std::string source_map_parens = "(" + *source_map + ")"; + auto source_map_v8_str = deno::v8_str(source_map_parens.c_str()); + auto script = v8::Script::Compile(context, source_map_v8_str, &origin); + if (script.IsEmpty()) { + DCHECK(try_catch.HasCaught()); + HandleException(context, try_catch.Exception()); + return; + } + auto source_map_obj = script.ToLocalChecked()->Run(context); + if (source_map_obj.IsEmpty()) { + DCHECK(try_catch.HasCaught()); + HandleException(context, try_catch.Exception()); + return; + } + CHECK(deno_val + ->Set(context, deno::v8_str("mainSourceMap"), + source_map_obj.ToLocalChecked()) + .FromJust()); } } skip_onerror = false; diff --git a/src/deno_dir.rs b/src/deno_dir.rs index cabd9ed92..09f37933b 100644 --- a/src/deno_dir.rs +++ b/src/deno_dir.rs @@ -189,7 +189,8 @@ impl DenoDir { base.join(module_specifier)? }; - let mut p = j.to_file_path() + let mut p = j + .to_file_path() .unwrap() .into_os_string() .into_string() |