10

私が次のような言語を持っているとしましょう

print "Hello World"

にトランスパイルする

var $__Helpers = {
    print: function(s) {
        if (typeof s != 'string')
            throw new TypeError('String expected');
        console.log(s);
    }
};

$__Helpers.print("Hello World");

この言語のユーザーが

print 5

$__Helpers.print「文字列が必要です」と言うとTypeError がスローされます。print 5開発者ツールに、このエラーの元の呼び出しとして行を表示してもらいたいです。ソースマップを取得して、次のようなコールスタックを表示する方法を知っています

transpiled_script.js:2
original_script.os:1

ここで、 は関数transpiled_script.js:2呼び出しのスクリプトと行番号、 は呼び出しのスクリプトと行番号です。私は、開発ツールに最上位の呼び出し(トランスパイラーの実装の詳細にすぎません) を無視させ、元のスクリプトからの呼び出しのみを表示させたいと考えています (これは、独自のスクリプトでデバッグする必要がある部分です)。$__Helpers.printoriginal_script.os:1print 5transpiled_script.js

insideへの呼び出しが複数ある可能性があるため、単純にマップtranspiled_script.js:2することはできません。したがって、1 対 1 の関係ではありません。original_script.os:1printoriginal_script.os

これを行う方法はありますか?

(私はソースとソース マップを生成するために escodegen を使用しています (escodegen は Node mozilla/source-map モジュールを使用します)。そのため、escodegen または mozilla/source-map にこれを実行するように指示する方法があれば理想的ですが、オーバーライドすることもできます。それが不可能な場合は、escodegen の出力。)

4

1 に答える 1