diff options
author | Greg Brown <gmb60@cam.ac.uk> | 2021-01-14 11:42:55 +0000 |
---|---|---|
committer | Greg Brown <gmb60@cam.ac.uk> | 2021-01-14 11:42:55 +0000 |
commit | aac3549a72663c523a456b2f5d7c3b77f509cdd6 (patch) | |
tree | 562824f3cfa5feca791715c733f7749197bb7e7a /chomp-macro | |
parent | 0d01692c97ea8ca6fc4b229e5b9678cb252bceda (diff) |
Add labelled expressions.
Restructure project (again).
Convert `Cat` and `Alt` from binary to n+2-ary.
Diffstat (limited to 'chomp-macro')
-rw-r--r-- | chomp-macro/src/lib.rs | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/chomp-macro/src/lib.rs b/chomp-macro/src/lib.rs index d58bbdc..91e1527 100644 --- a/chomp-macro/src/lib.rs +++ b/chomp-macro/src/lib.rs @@ -1,33 +1,33 @@ use chomp::{ chomp::{ - check::{InlineCalls, TypeCheck}, - context::Context, + ast::substitute::InlineCalls, + typed::{ + context::Context, + lower::{Backend, GenerateCode}, + TypeInfer, + }, visit::Visitable, }, - lower::{rust::RustBackend, Backend, GenerateCode}, + lower::RustBackend, nibble::cst::File, }; -use proc_macro::{Span, TokenStream}; +use proc_macro::TokenStream; use syn::Error; #[proc_macro] pub fn nibble(item: TokenStream) -> TokenStream { syn::parse(item) - .and_then(|nibble: File| { - nibble - .convert() - .ok_or_else(|| todo!()) - }) + .and_then(|nibble: File| nibble.convert().map_err(Error::from)) .and_then(|(funs, goal)| { funs.into_iter() .try_rfold(goal, |goal, function| { - goal.fold(&mut InlineCalls::new(function)) + goal.fold(&mut InlineCalls { function }) }) .map_err(Error::from) }) .and_then(|expr| { let mut context = Context::default(); - expr.fold(&mut TypeCheck { + expr.fold(&mut TypeInfer { context: &mut context, }) .map_err(Error::from) @@ -35,7 +35,7 @@ pub fn nibble(item: TokenStream) -> TokenStream { .map(|typed| { let mut backend = RustBackend::default(); let id = typed.gen(&mut backend); - backend.emit_code(id) + backend.emit_code(None, None, id) }) .unwrap_or_else(Error::into_compile_error) .into() |