eval_on_target_d
ターゲット関連の文法を実装しました。
代入文は代入先の変数テーブルを換えるだけですが、残り2つはターゲットの指定が再帰的に適用されるため、module文のときと同じようにディレクティブを作りました。
on_stmt
= keyword_p("on")
>> arg [on_stmt.targets = arg1]
>> if_p(hp::empty(on_stmt.targets))
[
# ターゲット名のリストが空の場合は評価しない
rule_nocalc
]
.else_p
[
# 一番目のターゲット名のみ使う
eval_on_target_d(self.context, hp::front(on_stmt.targets))
[
rule [on_stmt.values = arg1]
]
]
;
ターゲット名のリストが空かどうかで場合わけが必要なのが面倒なだけで、基本的にはeval_on_target_dディレクティブをかぶせるだけです。