properly merge ids commit

This commit is contained in:
sfja 2025-02-03 15:55:29 +01:00
parent 7389692993
commit 81d8e32a04
7 changed files with 20 additions and 22 deletions

View File

@ -1,15 +1,16 @@
import * as ast from "../ast/mod.ts"; import * as ast from "../ast/mod.ts";
import { Ctx, File } from "../ctx.ts"; import { Ctx, File } from "../ctx.ts";
import { Span } from "../diagnostics.ts"; import { Span } from "../diagnostics.ts";
import { AstId, IdMap } from "../ids.ts";
import { Resols } from "../resolve/resolver.ts"; import { Resols } from "../resolve/resolver.ts";
import { tyToString } from "../ty/to_string.ts"; import { tyToString } from "../ty/to_string.ts";
import { Ty } from "../ty/ty.ts"; import { Ty } from "../ty/ty.ts";
import { exhausted, Res, todo } from "../util.ts"; import { exhausted, Res, todo } from "../util.ts";
export class Checker { export class Checker {
private itemTys = new Map<number, Ty>(); private itemTys = new IdMap<AstId, Ty>();
private exprTys = new Map<number, Ty>(); private exprTys = new IdMap<AstId, Ty>();
private tyTys = new Map<number, Ty>(); private tyTys = new IdMap<AstId, Ty>();
private currentFile: File; private currentFile: File;

View File

@ -6,7 +6,8 @@ import {
Report, Report,
Span, Span,
} from "./diagnostics.ts"; } from "./diagnostics.ts";
import { File, IdentId, IdMap, Ids } from "./ids.ts"; import { DefId, File, IdentId, IdMap, Ids } from "./ids.ts";
export { type File } from "./ids.ts";
export class Ctx { export class Ctx {
private fileIds = new Ids<File>(); private fileIds = new Ids<File>();
@ -105,10 +106,6 @@ export class Ctx {
// //
private defIds = new Ids<DefId>();
//
public report(rep: Report) { public report(rep: Report) {
this.reports.push(rep); this.reports.push(rep);
this.reportImmediately(rep); this.reportImmediately(rep);

View File

@ -1,8 +1,7 @@
import * as path from "jsr:@std/path"; import * as path from "jsr:@std/path";
import { Parser } from "./parse/parser.ts"; import { Parser } from "./parse/parser.ts";
import * as ast from "./ast/mod.ts"; import * as ast from "./ast/mod.ts";
import { Ctx } from "./ctx.ts"; import { Ctx, File } from "./ctx.ts";
import { File } from "./ctx.ts";
import { Resolver } from "./resolve/resolver.ts"; import { Resolver } from "./resolve/resolver.ts";
import { Checker } from "./check/checker.ts"; import { Checker } from "./check/checker.ts";

View File

@ -1,5 +1,6 @@
import { Ctx, File } from "../ctx.ts"; import { Ctx } from "../ctx.ts";
import { Pos, Span } from "../diagnostics.ts"; import { Pos, Span } from "../diagnostics.ts";
import { File } from "../ids.ts";
import { ControlFlow, range } from "../util.ts"; import { ControlFlow, range } from "../util.ts";
import { Token, TokenIter } from "./token.ts"; import { Token, TokenIter } from "./token.ts";

View File

@ -1,5 +1,5 @@
import { IdentId } from "../ctx.ts";
import { Span } from "../diagnostics.ts"; import { Span } from "../diagnostics.ts";
import { IdentId } from "../ids.ts";
export type Token = { export type Token = {
type: string; type: string;

View File

@ -1,5 +1,5 @@
import * as ast from "../ast/mod.ts"; import * as ast from "../ast/mod.ts";
import { IdentId, idKey, Key } from "../ctx.ts"; import { IdentId, IdMap } from "../ids.ts";
import { Res } from "../util.ts"; import { Res } from "../util.ts";
export interface Syms { export interface Syms {
@ -30,17 +30,17 @@ export type Redef = {
}; };
export class SymsOneNsTab { export class SymsOneNsTab {
private defs = new Map<Key<IdentId>, Resolve>(); private defs = new IdMap<IdentId, Resolve>();
public get(ident: ast.Ident): Resolve | undefined { public get(ident: ast.Ident): Resolve | undefined {
return this.defs.get(idKey(ident.id))!; return this.defs.get(ident.id)!;
} }
public def(ident: ast.Ident, kind: ResolveKind): Res<void, Redef> { public def(ident: ast.Ident, kind: ResolveKind): Res<void, Redef> {
if (this.defs.has(idKey(ident.id))) { if (this.defs.has(ident.id)) {
return Res.Err({ ident: this.defs.get(idKey(ident.id))!.ident }); return Res.Err({ ident: this.defs.get(ident.id)!.ident });
} }
this.defs.set(idKey(ident.id), { ident, kind }); this.defs.set(ident.id, { ident, kind });
return Res.Ok(undefined); return Res.Ok(undefined);
} }
} }
@ -127,4 +127,3 @@ export class LocalSyms implements Syms {
return this.syms.defTy(ident, kind); return this.syms.defTy(ident, kind);
} }
} }

View File

@ -1,5 +1,6 @@
import * as ast from "../ast/mod.ts"; import * as ast from "../ast/mod.ts";
import { Ctx, File } from "../ctx.ts"; import { Ctx, File } from "../ctx.ts";
import { AstId, IdMap } from "../ids.ts";
import { exhausted, todo } from "../util.ts"; import { exhausted, todo } from "../util.ts";
import { import {
FnSyms, FnSyms,
@ -12,10 +13,10 @@ import {
export class Resols { export class Resols {
public constructor( public constructor(
private exprResols: Map<number, Resolve>, private exprResols: IdMap<AstId, Resolve>,
) {} ) {}
public exprRes(id: number): Resolve { public exprRes(id: AstId): Resolve {
if (!this.exprResols.has(id)) { if (!this.exprResols.has(id)) {
throw new Error(); throw new Error();
} }
@ -28,7 +29,7 @@ export class Resolver implements ast.Visitor {
private rootSyms = new RootSyms(); private rootSyms = new RootSyms();
private syms: Syms = this.rootSyms; private syms: Syms = this.rootSyms;
private exprResols = new Map<number, Resolve>(); private exprResols = new IdMap<AstId, Resolve>();
public constructor( public constructor(
private ctx: Ctx, private ctx: Ctx,