eval_on_target_d

ターゲット関連の文法を実装しました。

  • ターゲット指定付き代入文を実装
  • on文を実装
  • funcルールのターゲット指定に対応


代入文は代入先の変数テーブルを換えるだけですが、残り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ディレクティブをかぶせるだけです。