mirror of
https://github.com/Noratrieb/riverdelta.git
synced 2026-01-14 16:35:03 +01:00
implement %
This commit is contained in:
parent
b64c02cf4a
commit
d9868e3111
4 changed files with 20 additions and 3 deletions
|
|
@ -191,6 +191,7 @@ export type BinaryKind =
|
|||
| "-"
|
||||
| "*"
|
||||
| "/"
|
||||
| "%"
|
||||
| "&"
|
||||
| "|"
|
||||
| "<"
|
||||
|
|
@ -211,13 +212,14 @@ export const COMPARISON_KINDS: BinaryKind[] = [
|
|||
export const EQUALITY_KINDS: BinaryKind[] = ["==", "!="];
|
||||
export const LOGICAL_KINDS: BinaryKind[] = ["&", "|"];
|
||||
export const ARITH_TERM_KINDS: BinaryKind[] = ["+", "-"];
|
||||
export const ARITH_FACTOR_KINDS: BinaryKind[] = ["*", "/"];
|
||||
export const ARITH_FACTOR_KINDS: BinaryKind[] = ["*", "/", "%"];
|
||||
|
||||
const BINARY_KIND_PREC_CLASS = new Map<BinaryKind, number>([
|
||||
["+", 0],
|
||||
["-", 0],
|
||||
["*", 0],
|
||||
["/", 0],
|
||||
["%", 0],
|
||||
["&", 1],
|
||||
["|", 2],
|
||||
["<", 3],
|
||||
|
|
|
|||
10
src/index.ts
10
src/index.ts
|
|
@ -11,7 +11,15 @@ import { exec } from "child_process";
|
|||
|
||||
const input = `
|
||||
function main() = (
|
||||
let a = (0,);
|
||||
prInt(0);
|
||||
prInt(1);
|
||||
prInt(9);
|
||||
prInt(10);
|
||||
prInt(100);
|
||||
);
|
||||
|
||||
function prInt(a: Int) = (
|
||||
|
||||
);
|
||||
|
||||
function uwu(): (Int, Int) = (0, 0);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ export type DatalessToken =
|
|||
| "-"
|
||||
| "*"
|
||||
| "/"
|
||||
| "%"
|
||||
| "&"
|
||||
| "|"
|
||||
| "!"
|
||||
|
|
@ -76,6 +77,7 @@ const SINGLE_PUNCT: string[] = [
|
|||
"/",
|
||||
"&",
|
||||
"|",
|
||||
"%",
|
||||
];
|
||||
|
||||
export function tokenize(input: string): Token[] {
|
||||
|
|
|
|||
|
|
@ -407,6 +407,9 @@ function lowerExpr(fcx: FuncContext, instrs: wasm.Instr[], expr: Expr) {
|
|||
case "/":
|
||||
kind = `${valty}.div_u`;
|
||||
break;
|
||||
case "%":
|
||||
kind = `${valty}.rem_u`;
|
||||
break;
|
||||
case "&":
|
||||
kind = `${valty}.and`;
|
||||
break;
|
||||
|
|
@ -433,7 +436,8 @@ function lowerExpr(fcx: FuncContext, instrs: wasm.Instr[], expr: Expr) {
|
|||
kind = `${valty}.ne`;
|
||||
break;
|
||||
}
|
||||
instrs.push({ kind });
|
||||
const instr: wasm.NumericInstr = { kind } as any; // Typescript is buggy.
|
||||
instrs.push(instr);
|
||||
} else if (lhsTy.kind === "bool" && rhsTy.kind === "bool") {
|
||||
let kind: wasm.Instr["kind"];
|
||||
|
||||
|
|
@ -458,6 +462,7 @@ function lowerExpr(fcx: FuncContext, instrs: wasm.Instr[], expr: Expr) {
|
|||
case "-":
|
||||
case "*":
|
||||
case "/":
|
||||
case "%":
|
||||
throw new Error(`Invalid bool binary expr: ${expr.binaryKind}`);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue