ss plug-in は、 MJ1.0 からは使われていません。 以下の説明は、MJ0.1 のためのものです。
MJ には SS (startup-singleton) という名前のクラスがあり、 Java 言語の static field/method の代わりになっています。 しかし、 class SS {...} の中に SS field/method を 書かなければならないのはめんどうです。
そこで、 SS field/method を従来の static field/method のように 気軽に書けるようにするシンタックスシュガーを 提供するのが、この ss plug-in です。 ss plug-in は、最初から標準 plug-in として mjc の処理系に取り込まれています。
ss plug-in は、 SS field/method がそのままではあまりに使いにくいために、 とりあえず実装してみたシンタックスシュガーです。 将来的には、もっといい構文を思い付けば、それに変えます。
フィールド宣言・メソッド宣言の先頭に "ss" と書くことで、 SS field/method を宣言できます。
module の body か、 任意のクラスの body に SS field/method を書くことができます。
module test {
  define class C {
    ss int fff;
    define void foo() { }
    define ss void foo() { }
  }
  ss void main(String[] args){
    original(args);
    System.out.println("hello.");
  }
}
このプログラムは、 ss plug-in によって次のプログラムにマクロ展開されます。
module test {
  define class C {
    define void foo() { }
  }
  class SS {
    int fff;
    define void foo() { }
    void main(String[] args){
      original(args);
      System.out.println("hello.");
    }
  }
}
"ss" は、 "define" と modifier の間に 書く必要があります。( "define" も "ss" も modifier ではありません。) "define" 前に書いたり、 modifier のうしろに書くと、 シンタックスエラーになります。
ss field/method は、あくまで単純なシンタックスシュガーであって、 static scope ルールには従いません。 クラス内部に書かれた ss method は、モジュール内の他のクラスからも 参照することができます。
SS という単純名のクラスが他にあると、動作がおかしくなります。 これは、現在の実装のバグです。
MJTypeDeclaration <original alternatives> SSMemberDeclaration
MJClassBodyDeclaration <original alternatives> SSMemberDeclaration
SSMemberDeclaration MJMarks ss Modifier* Type VariableDecorators MJMarks ss Modifier* Type MJName ( FormalParameterList ) ...
|   |  Last updated: 
 Dec 18 12:19:58 2001
 |