LoginSignup
1
1

More than 5 years have passed since last update.

Scala.jsの変換メモ

Posted at

Scala.jsで変換結果をASTにして弄ってる最中に分かったことのメモです。

@JSExport

@JSExportで出力するときにクラスの種類によってJSに変換されるコードの変数名が変わる。

import scala.annotation.tailrec
import scala.scalajs.js
import js.annotation.JSExport
import scala.annotation.meta.field

@JSExport
class Hoge1 {
  println("Hoge1");
}

// @JSExport
abstract class Hoge2 {
  println("Hoge2");
}

@JSExport
final class Hoge3 {
  println("Hoge3");
}

@JSExport
sealed class Hoge4 {
  println("Hoge4");
}

@JSExport
case class Hoge5() {
  println("Hoge5");
}
case class Hoge6(
    @(JSExport @field) fuga: Double,
    @(JSExport @field) piyo: Double)

// @JSExport
trait Hoge7 {
  println("Hoge7");
}

@JSExport
class Hoge8 extends Hoge7 {
  println("Hoge8");
}

@JSExport
object Hoge9 {
  println("Hoge9");
}

JSExport対応表

JSExport variable export
class Hoge1 \$c_LHoge1, \$h_LHoge1, \$d_LHoge1 \$c_LHoge1
abstract class Hoge2 \$c_LHoge2, \$h_LHoge2 none
final class Hoge3 \$c_LHoge3, \$h_LHoge3, \$d_LHoge3 \$c_LHoge1
sealed class Hoge4 \$c_LHoge4, \$h_LHoge4, \$d_LHoge4 \$c_LHoge1
case class Hoge5() \$c_LHoge5, \$h_LHoge5, \$d_LHoge5 \$c_LHoge1
case class Hoge6(@(JSExport @field) fuga: Double) \$c_LHoge6, $h_LHoge6. $d_LHoge6 none
trait Hoge7 \$s_LHoge7 none
class Hoge8 extends Hoge7 \$c_LHoge8, \$h_LHoge8, \$d_LHoge8 \$c_LHoge1
object Hoge9 \$c_LHoge9, \$h_LHoge9, \$d_LHoge9, \$n_LHoge9, \$m_LHoge9 \$m_LHoge9

$c_Lxxx$

var $c_LHoge1 = (function() {
  $c_O.call(this)
});
$c_LHoge1.prototype.init___ = (function() {
  $c_O.prototype.init___.call(this);
  $m_s_Predef$().println__O__V("Hoge1");
  return this
});

$d_Lxxx$

var $d_LHoge1 = new $TypeData().initClass({
  LHoge1: 0
}, false, "Hoge1", {
  LHoge1: 1,
  O: 1
});

$h_Lxxx$

var $h_LHoge1 = (function() {
  /*<skip>*/
});

$n_Lxxx$

var $n_LHoge9$ = (void 0);

$m_Lxxx$

var $m_LHoge9$ = (function() {
  if ((!$n_LHoge9$)) {
    $n_LHoge9$ = new $c_LHoge9$().init___()
  };
  return $n_LHoge9$
});

$s_Lxxx$

var $s_LHoge7$class__$$init$__LHoge7__V = (function($$this) {
  $m_s_Predef$().println__O__V("Hoge7")
});

Classをグローバルに設定

$e["Hoge1"] = (function() {
  var $thiz = new $c_LHoge1();
  $c_LHoge1.prototype.init___.call($thiz);
  return $thiz
});
$e["Hoge1"].prototype = $c_LHoge1.prototype;

Objectをグローバルに設定

$e["Hoge9"] = $m_LHoge9$;
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1