Cabalize ext-core tools I cabalized the ext-core tools, so now they can be built as a library. The driver program has to be built separately. Also updated genprimopcode to reflect the new module hierarchy for the Core tools.
External Core tools: track new syntax for newtypes Update External Core tools to reflect new syntax for newtypes. (Notice that the typechecker is 90 lines shorter!) Also: improve dependency-finding, miscellaneous refactoring.
Fix External Core interpreter The External Core interpreter works (in a limited sense). For details, see the README. This means we now have a marginally functioning set of External Core tools. The other exciting change is that the test driver (Driver.hs) now computes module dependencies automatically instead of having a wired-in list of library modules.
Improve External Core syntax for newtypes I was confused by the newtype eta-contraction trick before. Newtype declarations are much less redundant now.
External Core typechecker - improve handling of coercions Reorganized coercion-related code in the typechecker (this was brought about by typechecking the Core versions of the optimized GHC libraries.) A few miscellaneous changes (fixed a bug in Prep involving eta-expanding partial applications that had additional type arguments.)
Improve External Core syntax Got rid of the silly '^' characters before qualified names (plus: reverts to the original syntax; minus: makes the parser a little hairier.) Also, added warning in the typechecker for coercion kind mismatches rather than considering that a type error. (see the added comment in Check.hs for details.)
Revive External Core typechecker The typechecker works again! Yay! Details upon request.
Revive External Core parser Huzzah, the External Core parser will now parse External Core generated by the HEAD. Most notably, I rewrote the parser in Parsec, but the old Happy version remains in the repository. I checked all the nofib benchmarks and most of the ghc-prim, base and integer libraries to make sure they parsed; one known bug: - Strings like "\x0aE", in which a hex escape code is followed by a letter that could be a hex digit, aren't handled properly. I'm investigating whether this is a bug in Parsec or expected behavior. The checker and interpreter still don't work, but should compile. Please mess around with the parser, report bugs, improve my code, etc., if you're so inclined.
Handle hierarchical module names in External Core tools I updated the parser to handle hierarchical module names (with package names) the way GHC is currently printing them out in External Core. Beware kludgy use of z-encoding and gratutious copy-pasta from GHC. You can now use the stand-alone Core parser to parse a very simple GHC-generated .hcr file (progress!) but not to typecheck or interpret it (the typechecker/interpreter don't snarf in the right libraries yet, among other things.) And, the parser is still incomplete in that it doesn't handle programs with newtypes/GADTs/etc. whose syntax has changed since 2003. In other words: probably don't try to use this yet.
First cut at reviving the External Core tools I updated the External Core AST to be somewhat closer to reality (where reality is defined by the HEAD), and got all the code to compile under GHC 6.8.1. (That means it works, right?) Major changes: - Added a Makefile. - Core AST: - Represented package names and qualified module names. - Added type annotation on Case exps. - Changed Coerce to Cast. - Cleaned up representation of qualified/unqualified names. - Fixed up wired-in module names (no more "PrelGHC", etc.) - Updated parser/interpreter/typechecker/prep for the new AST. - Typechecker: - Used a Reader monad to pass around the global environment and top module name. - Added an entry point to check a single expression. - Prep: - Got rid of typeofExp; it's now defined in terms of the typechecker.
Reorganisation of the source tree Most of the other users of the fptools build system have migrated to Cabal, and with the move to darcs we can now flatten the source tree without losing history, so here goes. The main change is that the ghc/ subdir is gone, and most of what it contained is now at the top level. The build system now makes no pretense at being multi-project, it is just the GHC build system. No doubt this will break many things, and there will be a period of instability while we fix the dependencies. A straightforward build should work, but I haven't yet fixed binary/source distributions. Changes to the Building Guide will follow, too.