From 0d01692c97ea8ca6fc4b229e5b9678cb252bceda Mon Sep 17 00:00:00 2001 From: Greg Brown Date: Sat, 9 Jan 2021 14:31:02 +0000 Subject: Introduce chomp as a procedural macro. Add a bunch of tests. Fix chomp and chewed so autochomp compiles. --- autochomp/build.rs | 78 ------------------------------------------------------ 1 file changed, 78 deletions(-) delete mode 100644 autochomp/build.rs (limited to 'autochomp/build.rs') diff --git a/autochomp/build.rs b/autochomp/build.rs deleted file mode 100644 index 58c12a1..0000000 --- a/autochomp/build.rs +++ /dev/null @@ -1,78 +0,0 @@ -use std::{ - env, - error::Error, - fmt::Display, - fs, - io::{Read, Write}, - path::Path, - process::Command, -}; - -use chomp::{ - chomp::{ - check::{InlineCall, TypeCheck}, - context::Context, - visit::Visitable, - }, - lower::{rust::RustBackend, Backend, GenerateCode}, - nibble::cst::File, -}; - -const PATH: &str = "src/nibble.nb"; - -#[derive(Debug)] -struct UndecVar; - -impl Display for UndecVar { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "Undeclared variable somewhere.") - } -} -impl Error for UndecVar {} - -fn main() { - println!("cargo:rerun-if-changed={}", PATH); - - let out_dir = env::var("OUT_DIR").unwrap(); - - let mut input = String::new(); - - fs::File::open(PATH) - .map_err(|e| Box::new(e) as Box) - .and_then(|mut file| { - file.read_to_string(&mut input) - .map_err(|e| Box::new(e) as Box) - }) - .and_then(|_| syn::parse_str(&input).map_err(|e| Box::new(e) as Box)) - .and_then(|nibble: File| nibble.convert().ok_or(Box::new(UndecVar) as Box)) - .and_then(|(funs, goal)| { - funs.into_iter() - .try_rfold(goal, |goal, function| { - goal.fold(&mut InlineCall::new(function)) - }) - .map_err(|e| Box::new(e) as Box) - }) - .and_then(|term| { - let mut context = Context::default(); - term.fold(&mut TypeCheck { - 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(id) - }) - .and_then(|code| { - fs::File::create(Path::new(&out_dir).join("nibble.rs")) - .and_then(|mut f| write!(f, "{}", code)) - .map_err(|e| Box::new(e) as Box) - }) - .unwrap(); - - Command::new("rustfmt") - .arg(&format!("{}/nibble.rs", out_dir)) - .status() - .unwrap(); -} -- cgit v1.2.3