about summary refs log tree commit diff
path: root/src/driver
diff options
context:
space:
mode:
authorMalte Voos <git@mal.tc>2024-07-08 22:01:42 +0200
committerMalte Voos <git@mal.tc>2024-07-08 22:01:42 +0200
commit97f84ccace4e634b4e02178a702818e69292dc9f (patch)
tree9cef95c62e3fa078db256c7fe657732fecef40a8 /src/driver
parent57de10d8728f51942f676b68f1f3ea29d9b78e6e (diff)
downloadtoytt-97f84ccace4e634b4e02178a702818e69292dc9f.tar.gz
toytt-97f84ccace4e634b4e02178a702818e69292dc9f.zip
implement top-level definitions
Diffstat (limited to 'src/driver')
-rw-r--r--src/driver/Driver.ml12
-rw-r--r--src/driver/dune12
-rw-r--r--src/driver/test.toytt1
3 files changed, 25 insertions, 0 deletions
diff --git a/src/driver/Driver.ml b/src/driver/Driver.ml
new file mode 100644
index 0000000..a2c4364
--- /dev/null
+++ b/src/driver/Driver.ml
@@ -0,0 +1,12 @@
+let process_item (toplvl : TopLevel.t) (item : Ast.item) : TopLevel.t =
+  let (name, item) = match item with
+    | Ast.Def { name; tp; tm } ->
+      let tp = Elaborator.check_tp_toplevel ~toplvl tp in
+      let tm = Elaborator.check_toplevel ~toplvl ~tm ~tp in
+      (name, TopLevel.Def { tp; tm = lazy (NbE.eval_toplevel tm) })
+  in
+  Yuujinchou.Trie.update_singleton name.value (fun _ -> Some (item, ())) toplvl
+
+let process_file (path : string) : TopLevel.t =
+  let file = Parser.parse_file path in
+  List.fold_left process_item Yuujinchou.Trie.empty file
diff --git a/src/driver/dune b/src/driver/dune
new file mode 100644
index 0000000..db5f824
--- /dev/null
+++ b/src/driver/dune
@@ -0,0 +1,12 @@
+(library
+ (name Driver)
+ (public_name toytt.driver)
+ (libraries
+  algaeff
+  bwd
+  toytt.ast
+  toytt.elaborator
+  toytt.error
+  toytt.nbe
+  toytt.parser
+  toytt.toplevel))
diff --git a/src/driver/test.toytt b/src/driver/test.toytt
new file mode 100644
index 0000000..273b42b
--- /dev/null
+++ b/src/driver/test.toytt
@@ -0,0 +1 @@
+def t : bool := true