From dfc08ff2c6580bbeb3951b223e0332546ba3b0d9 Mon Sep 17 00:00:00 2001 From: Greg Brown Date: Thu, 6 May 2021 19:40:59 +0100 Subject: Introduce lambda expressions. --- tests/full/main.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tests/full/main.rs (limited to 'tests/full/main.rs') diff --git a/tests/full/main.rs b/tests/full/main.rs new file mode 100644 index 0000000..95a1f60 --- /dev/null +++ b/tests/full/main.rs @@ -0,0 +1,61 @@ +use std::error::Error; + +use chomp::{ + chomp::{ + ast::substitute::Reduce, + typed::{ + context::Context, + lower::{Backend, GenerateCode}, + TypeInfer, + }, + visit::Visitable, + }, + lower::RustBackend, + nibble::{ + convert::{self, Convert}, + Statement, + }, +}; +use proc_macro2::{Span, TokenStream}; + +fn chomp(input: &str) -> Result> { + syn::parse_str::(&input) + .map_err(|e| Box::new(e) as Box) + .and_then(|nibble: Statement| { + nibble + .convert(&mut convert::Context::default()) + .map_err(|e| Box::new(e) as Box) + }) + .and_then(|expr| { + expr.fold(&mut Reduce) + .map_err(|e| Box::new(e) as Box) + }) + .and_then(|term| { + let mut context = Context::default(); + term.fold(&mut TypeInfer { + context: &mut context, + }) + .map_err(|e| Box::new(e) as Box) + }) + .map(|typed| { + let mut backend = RustBackend::default(); + let id = typed.gen(&mut backend); + backend.emit_code(None, Span::call_site(), id) + }) +} + +macro_rules! compile { + ($name:ident, $file:literal) => { + #[test] + fn $name() { + let input = include_str!($file); + chomp(input).unwrap(); + } + }; +} + +compile!(compile_sheep, "nibble/sheep.nb"); +compile!(compile_ratata, "nibble/ratata.nb"); +compile!(compile_regex, "nibble/regex.nb"); +compile!(compile_regex_fix, "nibble/regex_fix.nb"); +compile!(compile_nibble, "nibble/nibble_exp.nb"); -- cgit v1.2.3