tcr / corollary

Cross-compiler from Haskell to Rust, plus parser-haskell.
73 stars 5 forks source link

Add the ability to export a module wholesale. #60

Closed tcr closed 7 years ago

tcr commented 7 years ago

This is very very early code rebased on #58

This exposes a command line option to compile a Haskell module into a folder tree of Rust modules. e.g. corrode/Language/C/Ast/ASTModule.hs -> our/corrode/src/language/c/ast/ASTModule.rs

A few goals:

  1. Allow single-file transformations still for testing and debugging
  2. Output up a module structure that allows for publishing translated modules (after some modification likely)
  3. Allow cargo check on individual files (for syntactic, not type-level, correctness)
  4. Allow easier isolation of bugs by reducing the amount of code to search through in a given file
tcr commented 7 years ago

This is great, I whipped this up to check which files have valid syntax (not valid compilation):

cargo run -- "./language-c/src/" -o ./out/language_c
cargo script scanall.rs

Results in:

BAD!! ./out/language_c/language-c/src/Language/C/Analysis/AstAnalysis.rs
good: ./out/language_c/language-c/src/Language/C/Analysis/Builtins.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/ConstEval.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/Debug.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/DeclAnalysis.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/DefTable.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/Export.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/NameSpaceMap.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/SemError.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/SemRep.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/TravMonad.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/TypeCheck.rs
BAD!! ./out/language_c/language-c/src/Language/C/Analysis/TypeConversions.rs
good: ./out/language_c/language-c/src/Language/C/Analysis/TypeUtils.rs
good: ./out/language_c/language-c/src/Language/C/Analysis.rs
BAD!! ./out/language_c/language-c/src/Language/C/Data/Error.rs
BAD!! ./out/language_c/language-c/src/Language/C/Data/Ident.rs
BAD!! ./out/language_c/language-c/src/Language/C/Data/InputStream.rs
good: ./out/language_c/language-c/src/Language/C/Data/Name.rs
BAD!! ./out/language_c/language-c/src/Language/C/Data/Node.rs
BAD!! ./out/language_c/language-c/src/Language/C/Data/Position.rs
BAD!! ./out/language_c/language-c/src/Language/C/Data/RList.rs
good: ./out/language_c/language-c/src/Language/C/Data.rs
good: ./out/language_c/language-c/src/Language/C/Parser/Builtin.rs
BAD!! ./out/language_c/language-c/src/Language/C/Parser/ParserMonad.rs
BAD!! ./out/language_c/language-c/src/Language/C/Parser/Tokens.rs
good: ./out/language_c/language-c/src/Language/C/Parser.rs
BAD!! ./out/language_c/language-c/src/Language/C/Pretty.rs
BAD!! ./out/language_c/language-c/src/Language/C/Syntax/AST.rs
BAD!! ./out/language_c/language-c/src/Language/C/Syntax/Constants.rs
good: ./out/language_c/language-c/src/Language/C/Syntax/Ops.rs
BAD!! ./out/language_c/language-c/src/Language/C/Syntax/Utils.rs
good: ./out/language_c/language-c/src/Language/C/Syntax.rs
BAD!! ./out/language_c/language-c/src/Language/C/System/GCC.rs
BAD!! ./out/language_c/language-c/src/Language/C/System/Preprocess.rs
BAD!! ./out/language_c/language-c/src/Language/C.rs
tcr commented 7 years ago

Rebased over #59