Chapter 14

型付け

takl
takl
2020.12.22に更新

型を付けられるなら付けたいですよね。というわけで意味解析のところで作った AST に型付けをします。

oreore.js
function compile(uri, src) {
    diagnostics.length = 0;
    const tokens = tokenize(uri, src);
    const pts = parse(tokens.filter(t => t.kind !== "comment"));
    const [asts, toplevelScope] = expand(pts);
    typing(asts); // <--- ここ
    buffers[uri] = { tokens, toplevelScope, asts };
}

typing の実装はここです。

今回の実装でやっているのは AST を辿りながら「この型とこの型は同じはずだ」という場所を unify しているだけです。たとえば (if cond con alt) なら "bool"cond の型を unify し、 con の型と alt の型を unify します。

ついでに unify に失敗したら診断メッセージを出力します。

* ここまでのソースコード *