This commit is contained in:
parent
5af5bfed7f
commit
f05812c18c
@ -2,17 +2,17 @@ import * as ast from "../ast.ts";
|
||||
import { FileReporter, Loc } from "../diagnostics.ts";
|
||||
import { Ty } from "../ty.ts";
|
||||
import { builtins } from "./builtins.ts";
|
||||
import { ResolveMap } from "./resolve.ts";
|
||||
import { Syms } from "./resolve.ts";
|
||||
|
||||
export class Tys {
|
||||
private nodeTys = new Map<number, Ty>();
|
||||
private checker: Checker;
|
||||
|
||||
constructor(
|
||||
private resols: ResolveMap,
|
||||
private syms: Syms,
|
||||
private reporter: FileReporter,
|
||||
) {
|
||||
this.checker = new Checker(this, this.resols, this.reporter);
|
||||
this.checker = new Checker(this, this.syms, this.reporter);
|
||||
}
|
||||
|
||||
expr(node: ast.Node): Ty {
|
||||
@ -28,7 +28,7 @@ export class Tys {
|
||||
class Checker {
|
||||
constructor(
|
||||
private tys: Tys,
|
||||
private resols: ResolveMap,
|
||||
private syms: Syms,
|
||||
private reporter: FileReporter,
|
||||
) {}
|
||||
|
||||
@ -40,7 +40,7 @@ class Checker {
|
||||
}
|
||||
|
||||
if (node.is("Param")) {
|
||||
const sym = this.resols.get(node);
|
||||
const sym = this.syms.get(node);
|
||||
|
||||
if (sym.tag === "Let") {
|
||||
const exprTy = this.tys.expr(sym.stmt.kind.expr);
|
||||
@ -66,7 +66,7 @@ class Checker {
|
||||
}
|
||||
|
||||
if (node.is("IdentExpr")) {
|
||||
const sym = this.resols.get(node);
|
||||
const sym = this.syms.get(node);
|
||||
if (sym.tag === "Fn") {
|
||||
return this.tys.expr(sym.stmt);
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@ import * as ast from "../ast.ts";
|
||||
import { FileReporter } from "../diagnostics.ts";
|
||||
import { builtins } from "./builtins.ts";
|
||||
|
||||
export class ResolveMap {
|
||||
export class Syms {
|
||||
constructor(
|
||||
private resols: Map<number, Sym>,
|
||||
) {}
|
||||
@ -35,7 +35,7 @@ export type Sym =
|
||||
export function resolve(
|
||||
file: ast.Node,
|
||||
reporter: FileReporter,
|
||||
): ResolveMap {
|
||||
): Syms {
|
||||
let syms = ResolverSyms.root();
|
||||
const resols = new Map<number, Sym>();
|
||||
|
||||
@ -88,7 +88,7 @@ export function resolve(
|
||||
},
|
||||
});
|
||||
|
||||
return new ResolveMap(resols);
|
||||
return new Syms(resols);
|
||||
}
|
||||
|
||||
class ResolverSyms {
|
||||
|
||||
@ -12,8 +12,8 @@ const text = await Deno.readTextFile(filename);
|
||||
const fileRep = reporter.ofFile({ filename, text });
|
||||
|
||||
const fileAst = front.parse(text, fileRep);
|
||||
const resols = front.resolve(fileAst, fileRep);
|
||||
const tys = new front.Tys(resols, fileRep);
|
||||
const syms = front.resolve(fileAst, fileRep);
|
||||
const tys = new front.Tys(syms, fileRep);
|
||||
|
||||
let mainFn: ast.NodeWithKind<"FnStmt"> | null = null;
|
||||
|
||||
@ -36,7 +36,7 @@ if (!mainFn) {
|
||||
Deno.exit(1);
|
||||
}
|
||||
|
||||
const m = new middle.MiddleLowerer(resols, tys);
|
||||
const m = new middle.MiddleLowerer(syms, tys);
|
||||
const mainMiddleFn = m.lowerFn(mainFn);
|
||||
|
||||
if (!Deno.args.includes("--test")) {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import * as ast from "./ast.ts";
|
||||
import { ResolveMap, Tys } from "./front/mod.ts";
|
||||
import { Syms, Tys } from "./front/mod.ts";
|
||||
import { Ty } from "./ty.ts";
|
||||
import { BasicBlock, BinaryOp, Fn, Inst, InstKind } from "./mir.ts";
|
||||
|
||||
@ -7,7 +7,7 @@ export class MiddleLowerer {
|
||||
private fns = new Map<number, Fn>();
|
||||
|
||||
constructor(
|
||||
private resols: ResolveMap,
|
||||
private resols: Syms,
|
||||
private tys: Tys,
|
||||
) {}
|
||||
|
||||
@ -28,7 +28,7 @@ class FnLowerer {
|
||||
|
||||
constructor(
|
||||
private lowerer: MiddleLowerer,
|
||||
private resols: ResolveMap,
|
||||
private resols: Syms,
|
||||
private tys: Tys,
|
||||
private stmt: ast.FnStmt,
|
||||
) {}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user