9
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>タグに含まれます。

4

1 に答える 1