class Test
def initialize
end
def crash
print x
end
end
Test.new.crash
明らかに、このスニペットは 8 行目でクラッシュします。これを Opal で解析すると、次のコンパイル済みコードが得られます。
/* Generated by Opal 0.8.0.beta1 */
(function(Opal) {
Opal.dynamic_require_severity = "error";
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass;
Opal.add_stubs(['$print', '$x', '$crash', '$new']);
(function($base, $super) {
function $Test(){};
var self = $Test = $klass($base, $super, 'Test', $Test);
var def = self.$$proto, $scope = self.$$scope;
def.$initialize = function() {
var self = this;
return nil;
};
return (def.$crash = function() {
var self = this;
return self.$print(self.$x());
}, nil) && 'crash';
})(self, null);
return $scope.get('Test').$new().$crash();
})(Opal);
もちろん、同じエラーがスローされます。
しかし、このエラーが発生したRuby行を特定する方法はありますか?
私はこの質問を見ることができます: Is there a way to show the Ruby line numbers in javascript generated by Opal , しかし、私は答えを理解していません: https://github.com/opal/opal/tree/0につながります-6-stable/examples/rackで、何を見たり、何をしたりしているのかわかりません。
JavaScript を実行すると、index.html
読み込まれるファイルがopal.min.js
ありopal-parser.min.js
、最後にコンパイル済みの Ruby-Javascript コードが<script>
タグに含まれます。