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 { Span } from "../diagnostics.ts";
import { AstId, File as CtxFile, IdentId, Span } from "@slige/common";
export type File = {
stmts: Stmt[];

View File

@ -1,5 +1,4 @@
import { Span } from "../diagnostics.ts";
import { AstId, Ids } from "../ids.ts";
import { AstId, Ids, Span } from "@slige/common";
import {
Expr,
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 { exhausted, todo } from "../util.ts";
import { Ctx, exhausted, todo } from "@slige/common";
import { Block, Item } from "./ast.ts";
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 {
AnonStructTy,
ArrayExpr,

View File

@ -1,11 +1,16 @@
import * as ast from "../ast/mod.ts";
import { Ctx, File } from "../ctx.ts";
import { Span } from "../diagnostics.ts";
import { AstId, IdMap } from "../ids.ts";
import { Resols } from "../resolve/resolver.ts";
import { tyToString } from "../ty/to_string.ts";
import { Ty } from "../ty/ty.ts";
import { exhausted, Res, todo } from "../util.ts";
import * as ast from "@slige/ast";
import {
AstId,
Ctx,
exhausted,
File,
IdMap,
Res,
Span,
todo,
} from "@slige/common";
import { Resols } from "@slige/resolve";
import { Ty, tyToString } from "@slige/ty";
export class Checker {
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 {
Pos,
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> {
private map = new Map<IdRaw<Id>, V>();
set(id: Id, val: V) {
set(id: Id, val: V): this {
this.map.set(idRaw(id), val);
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 }),
} 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;

View File

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

View File

@ -1,7 +1,7 @@
import * as path from "jsr:@std/path";
import { Parser } from "./parse/parser.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 { Checker } from "./check/checker.ts";
import { AstLowerer } from "./middle/ast_lower.ts";

View File

@ -1,10 +1,8 @@
import * as ast from "../ast/mod.ts";
import { Checker } from "../check/checker.ts";
import { Ctx } from "../ctx.ts";
import { IdMap, Ids } from "../ids.ts";
import { LocalId as ReLocalId, Resols } from "../resolve/resolver.ts";
import { Ty } from "../ty/ty.ts";
import { exhausted, Res, todo } from "../util.ts";
import * as ast from "@slige/ast";
import { Checker } from "@slige/check";
import { Ctx, exhausted, IdMap, Ids, Res, todo } from "@slige/common";
import { LocalId as ReLocalId, Resols } from "@slige/resolve";
import { Ty } from "@slige/ty";
import { BinaryType, Operand, StmtKind, TerKind } 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 "../ids.ts";
import { Ty } from "../ty/ty.ts";
import { IdBase, IdMap } from "@slige/common";
import { Ty } from "@slige/ty";
export type Fn = {
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 { Pos, Span } from "../diagnostics.ts";
import { ControlFlow, range } from "../util.ts";
import { ControlFlow, Ctx, File, Pos, range, Span } from "@slige/common";
import { Token, TokenIter } from "./token.ts";
export class Lexer implements TokenIter {

View File

View File

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

View File

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

View File

@ -1,6 +1,5 @@
import * as ast from "../ast/mod.ts";
import { IdBase, IdentId, IdMap } from "../ids.ts";
import { Res } from "../util.ts";
import * as ast from "@slige/ast";
import { IdBase, IdentId, IdMap, Res } from "@slige/common";
export interface Syms {
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 { Ctx, File } from "../ctx.ts";
import { AstId, IdMap, Ids } from "../ids.ts";
import { exhausted, todo } from "../util.ts";
import * as ast from "@slige/ast";
import { AstId, Ctx, exhausted, File, IdMap, Ids, todo } from "@slige/common";
import {
FnSyms,
LocalId,
@ -156,7 +154,7 @@ export class Resolver implements ast.Visitor {
}
visitPathPat(pat: ast.Pat, kind: ast.PathPat): ast.VisitRes {
todo();
todo(pat, kind);
}
visitBlock(block: ast.Block): ast.VisitRes {
@ -166,6 +164,14 @@ export class Resolver implements ast.Visitor {
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 {
const res = path.segments.slice(1, path.segments.length)
.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 { exhausted } from "../util.ts";
import { Ctx, exhausted } from "@slige/common";
import { Ty } from "./ty.ts";
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 = {
kind: TyKind;