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
|