This commit is contained in:
nora 2023-12-15 18:32:53 +01:00
parent bf9fbcc069
commit 7ca78530a1
4 changed files with 58 additions and 36 deletions

View file

@ -10,7 +10,7 @@ A Riverdelta program consists of many items, like functions. Every item ends wit
semicolon.
```js
item = item_function | item_type | item_import | item_extern | item_mod
item = item_function | item_type | item_import | item_extern | item_mod;
```
### Functions
@ -25,6 +25,7 @@ item_function := "function" function_sig "=" expr ";"
```js
function helloWorld() = ;
```
```js
function block() = (
1;
@ -136,7 +137,6 @@ the module statement.
`.nil` files cannot declare file submodules but only inline modules.
If the current file is `a/a.mod.nil`, then `mod foo;` will look for `a/b.nil` or `a/b/b.mod.nil`.
### Globals
Globals are mutable values.

View file

@ -228,7 +228,7 @@ function resolveModule(
};
}
case "type": {
tyParamScopes = item.generics.map(({name}) => name);
tyParamScopes = item.generics.map(({ name }) => name);
const type = { ...superFoldItem(item, this) };

View file

@ -29,7 +29,15 @@ import {
import { CompilerError, ErrorEmitted, Span, unreachable } from "../error";
import { printTy } from "../printer";
import { InferContext } from "./infer";
import { TypeckCtx, emitError, lowerAstTy, mkTyFn, tyError, tyErrorFrom, typeOfItem } from "./item";
import {
TypeckCtx,
emitError,
lowerAstTy,
mkTyFn,
tyError,
tyErrorFrom,
typeOfItem,
} from "./item";
export function exprError(err: ErrorEmitted, span: Span): Expr<Typecked> {
return {
@ -46,11 +54,11 @@ type FuncCtx = {
localTys: Ty[];
loopState: LoopState[];
checkExpr: (expr: Expr<Resolved>) => Expr<Typecked>;
};
};
type LoopState = { hasBreak: boolean; loopId: LoopId };
type LoopState = { hasBreak: boolean; loopId: LoopId };
function typeOfValue(fcx: FuncCtx, res: Resolution, span: Span): Ty {
function typeOfValue(fcx: FuncCtx, res: Resolution, span: Span): Ty {
switch (res.kind) {
case "local": {
const idx = fcx.localTys.length - 1 - res.index;
@ -69,8 +77,7 @@ type FuncCtx = {
case "error":
return tyErrorFrom(res);
}
}
}
export function typeOfBuiltinValue(
fcx: FuncCtx,

View file

@ -1,4 +1,19 @@
import { Crate, Expr, Folder, Item, ItemId, Resolved, TY_I32, TY_INT, Ty, TyFn, Typecked, foldAst, mkDefaultFolder, tyIsUnit } from "../ast";
import {
Crate,
Expr,
Folder,
Item,
ItemId,
Resolved,
TY_I32,
TY_INT,
Ty,
TyFn,
Typecked,
foldAst,
mkDefaultFolder,
tyIsUnit,
} from "../ast";
import { GlobalContext } from "../context";
import { CompilerError, ErrorEmitted, Span } from "../error";
import { ComplexMap } from "../utils";