Skip to content
This repository has been archived by the owner on Apr 21, 2024. It is now read-only.

オーバーロードのサポート #17

Open
KisaragiEffective opened this issue Aug 6, 2022 · 0 comments
Open

オーバーロードのサポート #17

KisaragiEffective opened this issue Aug 6, 2022 · 0 comments

Comments

@KisaragiEffective
Copy link
Owner

一部のノードはオーバーロードをサポートしているので、言語仕様の策定が必要

デザインノート

定義

  1. ノードが複数の引数リストの候補を持つとき、「そのノードはオーバーロードされている」という。

オーバーロードの選択方法

前提

  • 各ステップの終了時:
    • オーバーロードの候補が一つになったならそこで探索を終了する
    • オーバーロードの候補がゼロになったならコンパイルエラー
  1. call-siteの個数に合う引数リストに絞り込む
  2. 引数リストの候補を調べ、call-siteの式の型に合致することができる引数リストに絞り込む
  3. 引数の型とその引数に与えられている型を調べる。
    1. 正確にマッチする (例: u8の文脈で1が与えられている) 場合、クラスAに1を加算する。
    2. 暗黙の型変換を経由してマッチする (例: u16の文脈に_: u8が与えられている) 場合、クラスBに1を加算する。
    3. ジェネリクスでマッチした場合、クラスCに1を加算する。
  4. クラスAの値が最も高い引数リストに絞り込む
  5. クラスBの値が最も高い引数リストに絞り込む
  6. クラスCの値が最も高い引数リストに絞り込む
  7. オーバーロードが解決できないとしてコンパイルエラー
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant