set deno workspace

This commit is contained in:
sfja 2025-02-04 17:01:32 +01:00
parent 84e845a4bf
commit f9e14e5056
32 changed files with 106 additions and 58 deletions

View File

@ -1,5 +1,4 @@
import { AstId, File as CtxFile, IdentId } from "../ids.ts"; import { AstId, File as CtxFile, IdentId, Span } from "@slige/common";
import { Span } from "../diagnostics.ts";
export type File = { export type File = {
stmts: Stmt[]; stmts: Stmt[];

View File

@ -1,5 +1,4 @@
import { Span } from "../diagnostics.ts"; import { AstId, Ids, Span } from "@slige/common";
import { AstId, Ids } from "../ids.ts";
import { import {
Expr, Expr,
ExprKind, ExprKind,

View File

@ -0,0 +1,4 @@
{
"name": "@slige/ast",
"exports": "./mod.ts",
}

View File

@ -1,5 +1,4 @@
import { Ctx } from "../ctx.ts"; import { Ctx, exhausted, todo } from "@slige/common";
import { exhausted, todo } from "../util.ts";
import { Block, Item } from "./ast.ts"; import { Block, Item } from "./ast.ts";
export function itemToString(ctx: Ctx, item: Item): string { export function itemToString(ctx: Ctx, item: Item): string {

View File

@ -1,4 +1,5 @@
import { exhausted } from "../util.ts"; import { exhausted } from "@slige/common";
import { import {
AnonStructTy, AnonStructTy,
ArrayExpr, ArrayExpr,

View File

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

View File

@ -0,0 +1,4 @@
{
"name": "@slige/check",
"exports": "./mod.ts",
}

View File

@ -0,0 +1 @@
export * from "./checker.ts";

View File

@ -1,4 +1,4 @@
import * as ast from "./ast/mod.ts"; import * as ast from "@slige/ast";
import { import {
Pos, Pos,
prettyPrintReport, prettyPrintReport,

View File

@ -0,0 +1,4 @@
{
"name": "@slige/common",
"exports": "./mod.ts",
}

View File

@ -31,7 +31,7 @@ export class Ids<IdType extends IdBase> {
export class IdMap<Id extends IdBase, V> implements Map<Id, V> { export class IdMap<Id extends IdBase, V> implements Map<Id, V> {
private map = new Map<IdRaw<Id>, V>(); private map = new Map<IdRaw<Id>, V>();
set(id: Id, val: V) { set(id: Id, val: V): this {
this.map.set(idRaw(id), val); this.map.set(idRaw(id), val);
return this; return this;
} }

View File

@ -0,0 +1,9 @@
export * from "./ids.ts";
export * from "./ctx.ts";
export * from "./util.ts";
export * from "./diagnostics.ts";
export * as ids from "./ids.ts";
export * as ctx from "./ctx.ts";
export * as util from "./util.ts";
export * as diagnostics from "./diagnostics.ts";

View File

@ -42,7 +42,7 @@ export const ControlFlow = {
Continue: <V>(val: V): Continue<V> => ({ break: false, val }), Continue: <V>(val: V): Continue<V> => ({ break: false, val }),
} as const; } as const;
export const range = (length: number) => (new Array(length).fill(0)); export const range = (length: number): number[] => (new Array(length).fill(0));
export const strictEq = <T>(a: T, b: T): boolean => a === b; export const strictEq = <T>(a: T, b: T): boolean => a === b;

View File

@ -1,5 +1,14 @@
{ {
"workspace": ["./ast", "./check", "./middle", "./parse", "./resolve", "./ty", "./common"],
"lint": {
"rules": {
"exclude": [
"verbatim-module-syntax",
"no-unused-vars"
],
}
},
"fmt": { "fmt": {
"indentWidth": 4 "indentWidth": 4
} },
} }

View File

@ -1,7 +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, File } from "./ctx.ts"; import { Ctx, File } from "@slige/common";
import { Resolver } from "./resolve/resolver.ts"; import { Resolver } from "./resolve/resolver.ts";
import { Checker } from "./check/checker.ts"; import { Checker } from "./check/checker.ts";
import { AstLowerer } from "./middle/ast_lower.ts"; import { AstLowerer } from "./middle/ast_lower.ts";

View File

@ -1,10 +1,8 @@
import * as ast from "../ast/mod.ts"; import * as ast from "@slige/ast";
import { Checker } from "../check/checker.ts"; import { Checker } from "@slige/check";
import { Ctx } from "../ctx.ts"; import { Ctx, exhausted, IdMap, Ids, Res, todo } from "@slige/common";
import { IdMap, Ids } from "../ids.ts"; import { LocalId as ReLocalId, Resols } from "@slige/resolve";
import { LocalId as ReLocalId, Resols } from "../resolve/resolver.ts"; import { Ty } from "@slige/ty";
import { Ty } from "../ty/ty.ts";
import { exhausted, Res, todo } from "../util.ts";
import { BinaryType, Operand, StmtKind, TerKind } from "./mir.ts"; import { BinaryType, Operand, StmtKind, TerKind } from "./mir.ts";
import { Block, BlockId, Fn, Local, LocalId, RVal, Stmt, Ter } from "./mir.ts"; import { Block, BlockId, Fn, Local, LocalId, RVal, Stmt, Ter } from "./mir.ts";

View File

@ -0,0 +1,4 @@
{
"name": "@slige/middle",
"exports": "./mod.ts",
}

View File

@ -1,6 +1,5 @@
import { Span } from "../diagnostics.ts"; import { IdBase, IdMap } from "@slige/common";
import { IdBase, IdMap } from "../ids.ts"; import { Ty } from "@slige/ty";
import { Ty } from "../ty/ty.ts";
export type Fn = { export type Fn = {
label: string; label: string;

View File

@ -0,0 +1,4 @@
{
"name": "@slige/parse",
"exports": "./mod.ts",
}

View File

@ -1,6 +1,4 @@
import { Ctx, File } from "../ctx.ts"; import { ControlFlow, Ctx, File, Pos, range, Span } from "@slige/common";
import { Pos, Span } from "../diagnostics.ts";
import { ControlFlow, range } from "../util.ts";
import { Token, TokenIter } from "./token.ts"; import { Token, TokenIter } from "./token.ts";
export class Lexer implements TokenIter { export class Lexer implements TokenIter {

View File

View File

@ -1,15 +1,11 @@
import { import {
AnonFieldDef, AnonFieldDef,
BinaryType,
ExprField,
PathSegment,
RefType,
UnaryType,
} from "../ast/ast.ts";
import {
AssignType, AssignType,
BinaryType,
Block, Block,
Cx,
Expr, Expr,
ExprField,
ExprKind, ExprKind,
File, File,
GenericParam, GenericParam,
@ -19,16 +15,16 @@ import {
Param, Param,
Pat, Pat,
Path, Path,
PathSegment,
PatKind, PatKind,
RefType,
Stmt, Stmt,
StmtKind, StmtKind,
Ty, Ty,
TyKind, TyKind,
} from "../ast/ast.ts"; UnaryType,
import { Cx } from "../ast/cx.ts"; } from "@slige/ast";
import { Ctx, File as CtxFile } from "../ctx.ts"; import { Ctx, File as CtxFile, Pos, Res, Span, todo } from "@slige/common";
import { Pos, Span } from "../diagnostics.ts";
import { Res, todo } from "../util.ts";
import { Lexer } from "./lexer.ts"; import { Lexer } from "./lexer.ts";
import { TokenIter } from "./token.ts"; import { TokenIter } from "./token.ts";
import { SigFilter } from "./token.ts"; import { SigFilter } from "./token.ts";

View File

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

View File

@ -1,6 +1,5 @@
import * as ast from "../ast/mod.ts"; import * as ast from "@slige/ast";
import { IdBase, IdentId, IdMap } from "../ids.ts"; import { IdBase, IdentId, IdMap, Res } from "@slige/common";
import { Res } from "../util.ts";
export interface Syms { export interface Syms {
getVal(ident: ast.Ident): Resolve; getVal(ident: ast.Ident): Resolve;

View File

@ -0,0 +1,4 @@
{
"name": "@slige/resolve",
"exports": "./mod.ts",
}

View File

@ -0,0 +1,2 @@
export * from "./resolver.ts";
export * from "./cx.ts";

View File

@ -1,7 +1,5 @@
import * as ast from "../ast/mod.ts"; import * as ast from "@slige/ast";
import { Ctx, File } from "../ctx.ts"; import { AstId, Ctx, exhausted, File, IdMap, Ids, todo } from "@slige/common";
import { AstId, IdMap, Ids } from "../ids.ts";
import { exhausted, todo } from "../util.ts";
import { import {
FnSyms, FnSyms,
LocalId, LocalId,
@ -156,7 +154,7 @@ export class Resolver implements ast.Visitor {
} }
visitPathPat(pat: ast.Pat, kind: ast.PathPat): ast.VisitRes { visitPathPat(pat: ast.Pat, kind: ast.PathPat): ast.VisitRes {
todo(); todo(pat, kind);
} }
visitBlock(block: ast.Block): ast.VisitRes { visitBlock(block: ast.Block): ast.VisitRes {
@ -166,6 +164,14 @@ export class Resolver implements ast.Visitor {
return "stop"; return "stop";
} }
visitPath(_path: ast.Path): ast.VisitRes {
throw new Error("should not be reached");
}
visitIdent(_ident: ast.Ident): ast.VisitRes {
throw new Error("should not be reached");
}
private resolveInnerPath(path: ast.Path): Resolve { private resolveInnerPath(path: ast.Path): Resolve {
const res = path.segments.slice(1, path.segments.length) const res = path.segments.slice(1, path.segments.length)
.reduce((innerRes, seg) => { .reduce((innerRes, seg) => {

View File

@ -0,0 +1,4 @@
{
"name": "@slige/ty",
"exports": "./mod.ts",
}

2
slige/compiler/ty/mod.ts Normal file
View File

@ -0,0 +1,2 @@
export * from "./ty.ts";
export * from "./to_string.ts";

View File

@ -1,5 +1,4 @@
import { Ctx } from "../ctx.ts"; import { Ctx, exhausted } from "@slige/common";
import { exhausted } from "../util.ts";
import { Ty } from "./ty.ts"; import { Ty } from "./ty.ts";
export function tyToString(ctx: Ctx, ty: Ty): string { export function tyToString(ctx: Ctx, ty: Ty): string {

View File

@ -1,4 +1,4 @@
import * as ast from "../ast/mod.ts"; import * as ast from "@slige/ast";
export type Ty = { export type Ty = {
kind: TyKind; kind: TyKind;