aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2023-08-20 11:29:07 +0530
committerAkshay Nair <phenax5@gmail.com>2023-08-20 11:29:07 +0530
commitf61677bbc3ae32cc460014cffe4d9ae9264291c5 (patch)
treeaf7f8935ba15364699f1b1abf6a5987b61011d33 /src
parent2b94b07fdc8f1a82f507b99000add9b7dca2c3d8 (diff)
downloadcss-everything-f61677bbc3ae32cc460014cffe4d9ae9264291c5.tar.gz
css-everything-f61677bbc3ae32cc460014cffe4d9ae9264291c5.zip
feat: function declaration
Diffstat (limited to 'src')
-rw-r--r--src/eval.ts4
-rw-r--r--src/parser.ts12
2 files changed, 15 insertions, 1 deletions
diff --git a/src/eval.ts b/src/eval.ts
index 26b3df0..e421d7a 100644
--- a/src/eval.ts
+++ b/src/eval.ts
@@ -245,7 +245,9 @@ const getFunctions = (
return EvalValue.Void()
},
- _: () => Promise.reject(new Error('not supposed to be here')),
+ func: async () => EvalValue.Lazy(args),
+
+ _: () => Promise.reject(new Error(`Not implemented: ${name}`)),
})
}
diff --git a/src/parser.ts b/src/parser.ts
index 732e32a..eeb9acf 100644
--- a/src/parser.ts
+++ b/src/parser.ts
@@ -108,6 +108,18 @@ const exprParser: P.Parser<Expr> = P.or([
identifierExprParser,
])
+export const parseExpr = (input: string): Expr => {
+ return match(exprParser(input), {
+ Ok: ({ value, input }) => {
+ if (input) throw new Error(`Aaaaaa. Input left: ${input}`)
+ return value
+ },
+ Err: e => {
+ throw e
+ },
+ })
+}
+
const declarationParser = P.or([callExprParser, selectorExprParser])
const multiDeclarationParser = P.sepBy(declarationParser, whitespace)