summaryrefslogtreecommitdiff
path: root/src/lang/ts-lang/builtin
diff options
context:
space:
mode:
Diffstat (limited to 'src/lang/ts-lang/builtin')
-rw-r--r--src/lang/ts-lang/builtin/builtin.ts19
-rw-r--r--src/lang/ts-lang/builtin/sbuiltin.ts2
2 files changed, 20 insertions, 1 deletions
diff --git a/src/lang/ts-lang/builtin/builtin.ts b/src/lang/ts-lang/builtin/builtin.ts
index ed6b0a3..8532072 100644
--- a/src/lang/ts-lang/builtin/builtin.ts
+++ b/src/lang/ts-lang/builtin/builtin.ts
@@ -2,7 +2,9 @@ import { FnError } from ".";
import {
AddNumbers,
AddStrings,
+ ArrayEqual,
Multiply,
+ SubNumbers,
ToString,
UnarrayIfOnlyHead,
} from "../util";
@@ -22,6 +24,16 @@ export type BUILTIN_Add<Args extends readonly any[]> =
? AddNumbers<Args>
: FnError<`Cannot add operands ${ToString<Args>}`>;
+export type BUILTIN_Sub<Args extends readonly any[]> = Args extends [
+ infer A,
+ infer B,
+ infer C
+]
+ ? FnError<`Can only sub [number, number], but got ${ToString<Args>}`>
+ : Args extends [infer M extends number, infer N extends number]
+ ? SubNumbers<M, N>
+ : FnError<`Can only sub [number, number], but got ${ToString<Args>}`>;
+
export type BUILTIN_Mul<Args extends readonly any[]> = Args extends [
infer A,
infer B,
@@ -32,6 +44,13 @@ export type BUILTIN_Mul<Args extends readonly any[]> = Args extends [
? Multiply<M, N>
: FnError<`Can only multiply [number, number], but got ${ToString<Args>}`>;
+export type BUILTIN_Eq<Args extends readonly any[]> = Args extends
+ | readonly number[]
+ | readonly string[]
+ | readonly boolean[]
+ ? ArrayEqual<Args>
+ : FnError<`Can only check equality of numbers or string or boolean, but got ${ToString<Args>}`>;
+
export type BUILTIN_IfElse<Args extends readonly any[]> = Args extends [
infer A,
infer B,
diff --git a/src/lang/ts-lang/builtin/sbuiltin.ts b/src/lang/ts-lang/builtin/sbuiltin.ts
index 01f197e..f873666 100644
--- a/src/lang/ts-lang/builtin/sbuiltin.ts
+++ b/src/lang/ts-lang/builtin/sbuiltin.ts
@@ -6,7 +6,7 @@ export type SBUILTIN_Call<
Node extends ASTNode,
Frame extends StackFrame
> = GetEvaluatedChildren<Node, Frame> extends [
- infer Fn extends FnPrim,
+ infer Fn,
...infer Values extends readonly any[]
]
? CallFn<Fn, Values, Frame>