summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/compiler.ts6
-rw-r--r--js/main.ts5
-rw-r--r--js/v8_source_maps.ts9
-rw-r--r--libdeno/binding.cc14
4 files changed, 21 insertions, 13 deletions
diff --git a/js/compiler.ts b/js/compiler.ts
index 941691f5c..a6b6e6970 100644
--- a/js/compiler.ts
+++ b/js/compiler.ts
@@ -388,6 +388,7 @@ export class DenoCompiler
let lastModule: ModuleMetaData | undefined;
sourceMaps.install({
installPrepareStackTrace: true,
+
getGeneratedContents: (fileName: string): string | RawSourceMap => {
this._log("compiler.getGeneratedContents", fileName);
if (fileName === "gen/bundle/main.js") {
@@ -419,6 +420,11 @@ export class DenoCompiler
}
}
});
+ // Pre-compute source maps for main.js.map. This will happen at compile-time
+ // as long as Compiler is instanciated before the snapshot is created..
+ const consumer = sourceMaps.loadConsumer("gen/bundle/main.js");
+ assert(consumer != null);
+ consumer!.computeColumnSpans();
}
private constructor() {
diff --git a/js/main.ts b/js/main.ts
index 0ed45aaec..02e5dcb4d 100644
--- a/js/main.ts
+++ b/js/main.ts
@@ -11,6 +11,10 @@ import { promiseErrorExaminer, promiseRejectHandler } from "./promise_util";
import { replLoop } from "./repl";
import { version } from "typescript";
+// Instantiate compiler at the top-level so it decodes source maps for the main
+// bundle during snapshot.
+const compiler = DenoCompiler.instance();
+
function sendStart(): msg.StartRes {
const builder = flatbuffers.createBuilder();
msg.Start.startStart(builder);
@@ -44,7 +48,6 @@ export default function denoMain() {
libdeno.setGlobalErrorHandler(onGlobalError);
libdeno.setPromiseRejectHandler(promiseRejectHandler);
libdeno.setPromiseErrorExaminer(promiseErrorExaminer);
- const compiler = DenoCompiler.instance();
// First we send an empty "Start" message to let the privileged side know we
// are ready. The response should be a "StartRes" message containing the CLI
diff --git a/js/v8_source_maps.ts b/js/v8_source_maps.ts
index f73cc2d38..cd61955d2 100644
--- a/js/v8_source_maps.ts
+++ b/js/v8_source_maps.ts
@@ -186,7 +186,7 @@ function CallSiteToString(frame: CallSite): string {
// Regex for detecting source maps
const reSourceMap = /^data:application\/json[^,]+base64,/;
-function loadConsumer(source: string): SourceMapConsumer | null {
+export function loadConsumer(source: string): SourceMapConsumer | null {
let consumer = consumers.get(source);
if (consumer == null) {
const code = getGeneratedContents(source);
@@ -210,8 +210,8 @@ function loadConsumer(source: string): SourceMapConsumer | null {
sourceMapData = arrayToStr(ui8);
sourceMappingURL = source;
} else {
- // Support source map URLs relative to the source URL
- //sourceMappingURL = supportRelativeURL(source, sourceMappingURL);
+ // TODO Support source map URLs relative to the source URL
+ // sourceMappingURL = supportRelativeURL(source, sourceMappingURL);
sourceMapData = getGeneratedContents(sourceMappingURL);
}
@@ -219,7 +219,6 @@ function loadConsumer(source: string): SourceMapConsumer | null {
typeof sourceMapData === "string"
? JSON.parse(sourceMapData)
: sourceMapData;
- //console.log("sourceMapData", sourceMapData);
consumer = new SourceMapConsumer(rawSourceMap);
consumers.set(source, consumer);
}
@@ -242,7 +241,7 @@ function retrieveSourceMapURL(fileData: string): string | null {
return lastMatch[1];
}
-function mapSourcePosition(position: Position): MappedPosition {
+export function mapSourcePosition(position: Position): MappedPosition {
const consumer = loadConsumer(position.source);
if (consumer == null) {
return position;
diff --git a/libdeno/binding.cc b/libdeno/binding.cc
index 6cf0a7a21..999ccac47 100644
--- a/libdeno/binding.cc
+++ b/libdeno/binding.cc
@@ -521,13 +521,6 @@ void InitializeContext(v8::Isolate* isolate, v8::Local<v8::Context> context,
.FromJust());
{
- auto source = deno::v8_str(js_source);
- 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) {
v8::TryCatch try_catch(isolate);
v8::ScriptOrigin origin(v8_str("set_source_map.js"));
@@ -551,6 +544,13 @@ void InitializeContext(v8::Isolate* isolate, v8::Local<v8::Context> context,
source_map_obj.ToLocalChecked())
.FromJust());
}
+
+ auto source = deno::v8_str(js_source);
+ CHECK(
+ deno_val->Set(context, deno::v8_str("mainSource"), source).FromJust());
+
+ bool r = deno::ExecuteV8StringSource(context, js_filename, source);
+ CHECK(r);
}
}