プロシージャ(Procedure)

プロシージャ (Procedure) はある値を受け取り,何かしらの処理を実行するような一連の処理を表現するために使用します.

構文

proc <NAME>() {
    <ANNOTATION>
    ...
}

proc <NAME>(<NAME>: <TYPE>) {
    <ANNOTATION>
    ...
}

proc <NAME>(<NAME>: <TYPE>, <NAME>: <TYPE>, ...) {
    <Annotattion>
    ...
}

プロシージャ (Procedure) は必ず モジュール(Module) 内に定義される必要があります.

NAME

NAME は . を含まない文字列です.
ただし,既に同じ NAME をもつ データ(Data)モジュール(Module) などが定義されている場合,エラーになります.

TYPE

TYPE は . を含まない文字列です.
ただし,プリミティブ型として指定できる文字列や定義済みデータの名前を指定しない場合,エラーになります.

ANNOTATION

ANNOTATION はプロシージャ (Procedure) の処理を表現するために使用します.
使用できる アノテーション(Annotation) は以下の通りです.

  • spawn
  • modify
  • affect

詳細は アノテーション(Annotation) を参照してください.

サンプル

unit test;

module ModuleA {
    proc test(a: i32) {
        @affect test2(b)

        @spawn b: i32 {
            use a;
        }
    }

    proc test2(a: i32) {}
}