2008-09-25 18:51:12 - 4865e596edc0ea8a68be26943c1463b9a9b3b6ab * initial import of Dipa Sarkar's code alltests.ss, compiler.ss, define-language.ss, define-pass.ss, driver.ss, helpers.ss, match.ss, meta-parser.ss, meta-syntax-dispatch.ss, nano-syntax-dispatch.ss, nano.ss, nanohelpers.ss, nanotest.ss, parser.ss, preprocess.ss, records.ss, synforms.ss, syntaxconvert.ss, term.ss, unparser.ss 2008-10-03 19:28:03 - d0a9aa5cfe8463a0a7d52a8fc9e03283b5f86078 * added copyright notice + Copyright.txt * removed match, it was used to do initial parsing of sexp - match.ss, nanotest.ss * added first comment in trying to decode define-language define-language.ss * moved back to optimize-level 2 to give debugging information nanotest.ss 2008-10-06 09:40:52 - 1fd736e52b3ca305f56aaeac049176ddd6f5eb71 * removed execution bit from files, since they were unneeded compiler.ss, define-language.ss, define-pass.ss, meta-parser.ss, meta-syntax-dispatch.ss, nano-syntax-dispatch.ss, nano.ss, nanohelpers.ss, parser.ss, records.ss, syntaxconvert.ss, term.ss, unparser.ss 2008-10-06 09:48:17 - e06164bd5a6bf2437a833a2b8009e7dc8c7629a2 * reorganized code to move library source into src directory moved: define-language.ss, define-pass.ss, meta-parser.ss, meta-syntax-dispatch.ss, nano-syntax-dispatch.ss, nano.ss, nanohelpers.ss, parser.ss, records.ss, syntaxconvert.ss, terms.ss, and unparser.ss to src directory 2008-10-06 09:49:43 - d72c88e555b24a6bc8738162c98d194b1069503f * reorganized code to move testing source into tests directory moved: alltests.ss, compiler.ss, driver.ss, helpers.ss, nanotest.ss, preprocess.ss, and synforms.ss to tests directory 2008-10-09 21:29:41 - a1b2dd8408b6f1282cfc9a962d38f0647dc32409 * accidentally changed (define-syntax define-langauge ... to (define-language ... * changed tests to support reorganized directories tests/nanotest.ss * began working to identify (and remove) unused code, along with code reading to understand where and how functions are used. Also changed to use consistent function definition syntax and line-wrap. src/define-language.ss, src/define-pass.ss * removed code after #!eof to be put in chaff file. src/define-language.ss, src/define-pass.ss * lifted duplicated common functions from make-processor-clause and do-define-pass src/define-pass.ss 2008-10-09 21:43:19 - d43213f91181deee413f86126fc3a0a56bfdf53e * lifted make-incontext-transformer and make-quasiquote-transformer to commonize these functions src/define-pass.ss * fixed (define-syntax define-language ... typo src/define-language.ss 2008-10-09 22:23:42 - 29d2029f0213605732712c2be60f586e02c27677 * commented out some of the lifted fields src/define-pass.ss 2008-10-09 22:23:42 - d14c0b3ed8e254991baddd15317a6a9e31dcf30c * uncommented and generally reworked code for defining passes src/define-pass.ss 2008-10-10 11:18:17 - 4f7840c069d47d7cd68357c67cd5b805a98886de * cleanup of language->s-expression code src/define-language.ss * more code reformating and moving of common functions into the helpers.ss src/nanohelpers.ss, src/define-pass.ss, src/meta-parser.ss, src/meta-syntax-dispatch.ss, src/nano-syntax-dispatch.ss, src/parser.ss, src/records.ss, src/syntaxconvert.ss, src/unparser.ss 2008-10-24 18:13:23 - d1dff8cb77922342f52a10ed36a89497f8df5f6b * added external TODO list moved from other files TODO.txt, src/define-language.ss * added load-all.ss file to load the parts from the src and tests directories load-all.ss * moved spare code to scrap file scraps.ss * curried the rec-member? call to reuse the code in all of the member? functions src/define-language.ss * removed alt-union, alt-difference, and tspec-union functions src/define-language.ss * reorganized deeply nested if statements into conds src/define-language.ss, src/define-pass.ss 2008-10-25 14:25:18 - 21451b92b0bd1a140b35cc375eda365530edfcc0 * removed calls to eval that were used for looking up the meta-parser by changing the meta-parser from a meta define to a procedure stored in the compile time environment (procedure is then passed around in define-pass). src/define-pass.ss, src/define-language.ss 2008-10-26 21:17:58 - 1284b9818ffb015f16d81e407aab94bfeaa59098 * R6RSification: changed syntax-object->datum => syntax->datum, list* => cons*, datum->syntax-object => datum->syntax, (sub1 ,x) => (- ,x 1), (add1 ,x) => (+ ,x 1), partition => partition-syn src/define-language.ss, src/define-pass.ss, src/meta-parser.ss, src/nanohelpers.ss, src/records.ss, src/syntaxconvert.ss, src/unparser.ss * removed unused, useless, or duplicated procedure definitions: show-decls, show-tspecs, show-productions, lookup-any, split-decls, any, every, choose, assp, remp, memp, filter, fold, reduce, empty-set, singleton-set, add-element, member?, empty?, union, intersection, difference src/nanohelpers.ss * moved lookup-alt from nanohelpers.ss to meta-parser.ss src/nanohelpers, src/meta-parser.ss * removed module wrappers as part of r6rsification src/unparser.ss, src/parser.ss, src/meta-parser.ss * changed null syntax () to #'() in generation of field patterns src/syntaxconvert.ss, * added more to scraps from the tail end of unparser src/scraps.ss 2008-10-26 21:20:07 - dc1e9b02e6964ec0c36772380660a462cf8e73d6 * created R6RS libraries to wrap around existing code base nanopass.ss, nanopass/helpers.ss, nanopass/language.ss, nanopass/meta-parser.ss, nanopass/parser.ss, nanopass/pass.ss, nanopass/r6rs-helpers.ss, nanopass/records.ss, nanopass/unparser.ss, * added R6RS compatibililty wrappers for define-record, syntax-error, literal-identifier=?, warning, and fx= nanopass/r6rs-helpers.ss * accidentally added swap file: nanopass/.records.ss.swp nanopass/.records.ss.swp 2008-10-26 22:15:18 - 871b67ad1d4e2dafabe71536f15a6ec6d364c2ec * added test-all script wrapper to ease testing test-all.ss 2008-11-09 01:50:07 - 806ef5378ca0259b9a2a1bf3f1766e18a14ac227 * removed accidentally added swap files: nanopass/.records.ss.swp nanopass/.records.ss.swp * cleaned up imports as more code is changed to comply with R6RS nanopass/helpers.ss, nanopass/language.ss, nanpoass/meta-parser.ss, nanopass/parser.ss, nanopass/pass.ss, nanopass/r6rs-helpers.ss, nanopass/records.ss, nanopass/syntaxconvert.ss, nanopass/unparser.ss * continued to press an Chez -> R6RS compatibility macro for define-record nanopass/r6rs-helpers.ss * also introduced my-syntax-violation to push for syntax-error compatibility nanopass/r6rs-helpers.ss * committed some debugging source (trace-define of parse-language) nanopass/define-language.ss, * added R6RS version of test-all test-all-r6rs.ss * code reformatting (removed spaces, changed to consistent coding standard) nanopass/r6rs-helpers.ss, tests/r6rs-compiler.ss * added implementation-helpers to abstract away some of the implementation specific code nanopass/syntaxconvert.ss, nanopass/unparser.ss * moved iota from tests/compiler.ss to tests/helpers.ss nanopass/compiler.ss * create r6rs copy of the test compiler tests/r6rs-compiler.ss, tests/r6rs-helper.ss, tests/r6rs-nanotest.ss 2008-11-09 01:59:07 - 118a0a36a308f49c25c58c3b67539ce4e384d46d * added the implementation helpers files to the repositor, one for Chez Scheme and one for Ikarus Scheme nanopass/implementation-helpers.ikarus.ss, nanopass/implementation-helpers.ss 2008-11-24 20:30:17 - 6e88caf2af091aac629fddb896651fcca92512a2 * removed parse-language trace-define src/define-language.ss * commented out assert, since the R6RS one stands in fine src/nanohelpers.ss 2008-11-24 20:39:20 - afe583a450a94aa25f9884902a7ce1032d5b48d7 * resolving conflicts between two wroking copies, assert => syn-assert src/nanohelpers.ss 2008-11-24 20:50:04 - 370bd11afdfc8a0233cf82b9f3d7f3c9e2f3db80 * exported all of the internal exports from the main nanopass library nanopass.ss * more exports to allow this to run on Ikarus Scheme: added meta-define, and a hack to support meta-define nanopass/implementation-helpers.ikarus.ss, nanopass/term.ss * exported more features of meta-parser: parse-cata, lookup-alt nanopass/meta-parser.ss * created library for meta-syntax-dispatch nanopass/meta-syntax-dispatch.ss * moved to more formal make-compile-time-value definition for putting things into the compile-time environment to support ikarus. src/define-language.ss * more cleanup and R6RSification of meta-parser.ss src/meta-parser.ss * removed module tag from meta-syntax-dispatch src/meta-syntax-dispatch.ss * R6RSification of src/parser.ss: syntax-object->datum => syntax->datum, assert => syn-assert src/parser.ss, src/records.ss * excluded datum from the R6RS compiler nanopss import tests/r6rs-compiler.ss 2008-11-22 11:05:22 - 61feff78ee11abef5624b2de493e2bdb09851ffe * same changes as previous version on a differnt machine. nanopass.ss, nanopass/helpers.ss, nanopass/meta-parser.ss nanopass/implementation-helpers.ikarus.ss, src/define-language.ss, src/meta-parser.ss, src/meta-syntax-dispatch.ss, src/nanohelpers.ss, src/records.ss, tests/r6rs-compiler.ss 2008-11-22 14:13:59 - 6b61d840e4e1b86eeacd1a489431a241023cf962 * finished copying changes from previous commit in different working copy nanopass/meta-syntax-dispatch.ss, nanopass/term.ss 2008-11-24 20:50:28 - 31d49c16511376b46781a3e5e737cb705b8f9609 * merged two working copies 2008-11-24 22:36:14 - cbc2955a6fd540f482290fc92a39eaa4168d057b * added trace-define-syntax and printf to the implementation-helpers to support debugging nanopass/implementation-helpers.ikarus.ss * imported meta-syntax-dispatch into the meta-parser nanopass/meta-parser.ss * committed debugging code in the language definition src/define-language.ss 2008-11-24 20:27:30 - f79bcb8b4aab5e804246a4030d2061edcf560e8d * added meta-define and make-compilet-time-value macros for Chez to expand into the appropriate meta define and cons load-all.ss * reformatted the exports in the nanopass top-level nanopass.ss * exported more helper procedures nanopass/helpers.ss, nanopass/implementation-helpers.ss * created auxiliaary keywords to export from the libraries to ensure they will be free-identifier=? when used as keywords outside the library with macros defined within the library nanopass/language.ss, nanopas/meta-parser.ss * created nano-syntax-dispatch library based on the syntax dispatcher from the original code. nanopass/nano-syntax-dispatch.ss * added inclusing of nanopass/nano-syntax-dispatch.ss to parser.ss nanopass/parsers.ss * small formatting changes and removed debugging code. nanopass/language.ss, src/define-language.ss, src/define-pass.ss, src/parser.ss, src/unparser.ss, tests/r6rs-compiler.ss * pulled make-double-collector-over-list and map2 into helpers nanopass/helpers.ss * small changes to deal with chez style records (record-type-name => chez-record-type-name, record-type-descriptor => chez-record-type-descriptor src/unparser.ss * added procedure definitions for compose, disjoin, any, every, choose, reverse-filter, fold, reduce, partition, constant? keyword?, list-of-user-primitives, list-of-system-primitives, user-primitive?, system-primitive? primitive? predicate-primitive? value-primitive?, effect-primitive? effect-free-primitive? gen-label, gen-symbol-seed, reset-seed, gen-symbol, set? iota, with-values, mvlet, empty-set, singleton-set, add-element, member?, empty?, union, intersection, and difference to tests version of r6rs-helpers tests/r6rs-helpers.ss * created tiny testing library for looking at a single language definition tests/r6rs-tiny.ss, tests/tiny.ss 2008-11-24 22:37:23 - 6f68e61e97d091ebad305b4406f7352e3cc14a6e * no changes? looks like a merge node. 2008-12-11 09:06:34 - 65049181072cd5a748e732d454617083814b724e * re-added auxiliary keywords for $tspec, $metas, $production, and $alt nanopass.ss * added code to push wraps down into syntax to support Ikarus. current code makes extended use of car, cdr, etc. to decompose syntax rather than syntax-case. eventually more of this needs to be dropped. nanopass/helpers.ss * added more implementation specific helpers to the Ikarus specific code. some of these are to support things like format, printf, etc. nanopass/implementation-helpers.ikarus.ss, nanopass/implementation-helpers.ss * moved auxiliary keywords: $tspec, $metas, $production, $alt, in, where, over, extends, definitions, and entry into aux-keywords library nanopass/language.ss, nanopassrecords.ss, (nanopass/aux-keywords.ss?) * added helper syntax for map to print out what is being mapped over for debugging purposes nanopass/pass.ss * fixing syntax around null (replacing #'() with '()) nanopass/r6rs-helpers.ss * tspec?, gramelt-metas, tspec-terminal, nonterminal-name, alt=?, and define-language now use an eq? comparison to match aux-keywords rather then relying on the auxiliary keyword facility nanopass/define-language.ss * general code cleanup (reformatting, removing debugging in places, etc.) nanopass/define-language.ss LATEST * reformatted a couple places where there was some odd indenting tests/compiler-test.ss * updated compiler passes to make use of the new pass syntax. with this change passes that utilized the automatic combining code needed to be rewritten to explicitly do the combining themselves (this was usually append or union). these passes now thread a varaible through and perform a cheaper update when possible. tests/compiler.ss, tests/unit-tests.ss * added set-cons for adding individual items to a set (instead of using union everywhere tests/helpers.ss, test/compiler.ss * worked a little on a new test compiler, but did not make much progress tests/new-compiler.ss * fixed error handling in the test driver so that we are no longer getting a non-continuable error raised when there is an exception in a pass tests/test-driver.ss 2011-04-09 - * added todo to investigate the handling of tspec=? down the road we may want to investigate the syntax for extending languages again and drop the definitions section (or at least rename it) nanopass/language.ss * fixed the cata syntax to support cata to a Processor that returns zero values. as part of this fix also improved support for mapping over processors that return multiple values. originally this was limited to just mapping over processors with one or two values, but now it supports zero or more. (zero return value is special-cased to use for-each, one return value is special-cased to use map, and a loop is built on the fly to support two or more return values.) nanopass/meta-parser.ss, nanopass/pass.ss * improved error message when a processor meta-variable cannot be found in the parser and unparser. nanopass/parser.ss, nanopass/meta-parser.ss 2011-04-25 - * merged changes from work with some in progress changes here. * updated tests to work with new meta-variable only nonterminal alternatives 2011-05-13 - * added nanopass-case macro to allow for local matching of nanopass syntax. currently this expands into a directly applied define-pass and is restricted to returning a single, non-checked value. nanopass/pass.ss * extended the meta parser to allow more then statement in the body of in-context and with-output-language transformers. nanopass/meta-parser.ss * fixed issue with processor internal definitions not being properly recognized and placed definitions within a with-output-language so that quasiquotes will be transformed into nanopass language-records similar to the processor right-hand-sides. nanopass/pass.ss * fixed bug with define-pass that was causing it to return a single value when a user provided body was checked for an appropriate language value. the check now happens to the first return value and the extra returned values are returned as is. nanopass/pass.ss * fixed bug in how extend pred-all checks were being generated so that a call to the ntspec's pred is being generated instead of just the a reference to the pred itself. nanopass/records.ss * fixed bug in the unparser that was causing non-terminal productions to be handled through a recursively generated form rather then using the existing pred-all for the non-terminal. nanopass/unparser.ss * improved error message when searching for procs fails, so that we know the syntax we were trying to process (and hence whether it was a body, auto-generated ntspec production, auto-generated cata, or cata call that generated the problem). nanopass/pass.ss * changed a debugging pretty-print nanopass/language.ss 2011-05-17 * improved error message when a field cannot be autogenerated in an autogenerated clause to a processor nanopass/pass.ss * changed from call-with-values to let-values in code produced in body of a processor (now that the error message doesn't hold onto the 3D code we were generating) nanopass/pass.ss 2011-05-22 * removed the syn-map, map2, make-double-collector, and find-matching-clause since they were no longer being used. nanopass/helpers.ss, tests/helpers.ss * changed references to prod and production to ntspec nanopass/languages.ss, nanopass/meta-parser.ss, nanopass/parser.ss, nanopass/unparser.ss, nanopass/records.ss * rewrote code for handling user clauses in order to support nonterminals on the left-hand-side of a clause. clauses are now matched in the order they appear, with additional clauses autogenerated after user clauses have been added. the code supports the current (limited) testing but has not yet been tested with the new compiler code. it also does not yet support terminal or nonterminal catas. nanopass/meta-parser.ss, nanopass/pass.ss 2011-05-22 * fixed the processor builder by adding the input identifier from a cata to the list of formal arguments (when it would not be otherwise shadowed). note: the order is not necessarily maintained, but since these values will be set by the let* that binds them, there does not seem to be a need of ordering. also fixed the else thunk to be a thunk. nanopass/pass.ss * incorporated changes to nanopass-case that Kent Dybvig made. when an identifier is used in as the expression to be matched the identifier is rebound with the new value when the cata is called. nanopass/pass.ss * incorporated changes to meta-language quasiquote syntax from Kent Dybvig. this change allows things like `(locals (,(reverse xnfv*) ...) ---) which would previously have raised an error since ellispis expected to find an identifier in its body. to support this a quote form was also added to make sure this feature does no cause automatically quoted items in the body of an input, like booleans, symbols, and other constants. nanopass/records.ss, nanopass/meta-parser.ss, nanopass/pass.ss 2011-05-25 * fixed the error message for the output processor so that it would have the preformatted name rather then the syntax I had inadvertently dropped in (fix thanks to Kent Dybvig). nanopass/meta-parser.ss 2011-05-25 * setup the output process to leave quasiquote in the correct context when an output expression is unquoted. this should allow us to avoid many of the in-context specifiers needed in the current np-compiler. nanopass/meta-parser.ss 2011-09-23 * removed definitions form from define-language. added a todo for a better solution to the problem of unparsing languages into a runnable s-expression syntax. also removed empty let wrapper from unparser output, since it is no longer needed with the definitions support gone. nanopass/language.ss, nanopass/record.ss, nanopass/unparser.ss * added feature to gather up information about the syntax being passed to a record constructor so that we can provide a slightly better error message when the value passed for one of the fields is invalid. this is done using the source-annotation functionality, and produces a single message for each fld (even though multiple syntax objects might have contributed, e.g. in the case of a list field). when the identifier is known, it will report that the problem occurred at the given syntax item and when it is not it will report that the problem ocurred near the given syntax item. nanopass/records.ss, nanopass/meta-parser.ss, nanopass/parser.ss * parser and unparser are now defined with define-who so that they can report which parser or unparser went belly up when an error occurs. nanopass/language.ss, nanopass/parser.ss * added check in nano-meta->fml* to raise an error when a quoted terminal is found in the list of formals. this is just a more specific message than the "unrecognized nano-rec" in the else case. nanopass/pass.ss * at optimize-level 3, the "checking" version of the pair-alt record constructor is now a syntax definitions that washes down to a call to the normal record constructor, so that the output of the checked and unchecked cases will be the same. nanopass/records.ss 2011-09-24 * moved the preprocessor code into the tests/compiler.ss file and changed it to use with-output-language, rather than the s-expression quasiquote. tests/compiler.ss, tests/compiler-tests.ss, tests/preprocess.ss (removed) * updated the synforms library to not require a quasiquoted expression. also changed to use ... in place of dots or .. by using the Chez extended syntax-rules (which allow for a general guard expression). also got rid of top level quoted item, probably should have also made unquote legal as start of pattern. tests/synforms.ss * now exporting define-who from tests/helpers.ss to allow for more convenient error calls in the rename-var/verify-scheme function. tests/helpers.ss, tests/compiler.ss 2011-09-29 * added a (maybe x) form to language definitions to allow language defintions to contain fields that can be occupied by either a non-terminal or #f. this means it is now possible to have a production like: (define-language L (terminals (integer (int)) ---) (Exp (e) (Foo int (maybe e)) ---)) and the e field in Foo maybe either be an Exp or #f. also added ? as a valid character to put on a meta-variable to allow e? for those fields that are maybe fields. nanopass/helpers.ss, nanopass/meta-parser.ss, nanopass/pass.ss, nanopass/records.ss, nanopass/syntaxconvert.ss, nanopass/unparser.ss test-all.ss, tests/unit-test-helpers.ss, tests/unit-tests.ss * Fixed variable overlap bug when a pattern and the langauge formal to a processor share the same name. For example: (Exp : Exp (e1) -> Exp () [(Foo ,e1 ,e2) ---] ---) this now produces the expected code and shadowing, instead of re-binding e1 before e2 has a chance to be extracted from e1. nanopass/pass.ss * Fixed bug when handling output expressions that can end in a terminal in the meta-parser. This means if you have: (define-language L (terminals (integer (int)) (boolean (bool)) ---) (Exp (e) (Foo int e-or-bool) ---) (Exp-or-Bool (e-or-bool) bool e)) then the expression: (with-output-language (L Exp) `(Foo 4 #f)) it should now work properly. nanopass/meta-parser.ss * Added indirect-export of record constructors, predicates, and accessors created when defining a language, so that if the language is exported, these will be exported as well. nanopass/records.ss * convert-pattern now returns fields and levels as separate list return values along with a list of maybes. it also parses the (maybe e) syntax (see note above) nanopass/syntaxconvert.ss * Fixed some tests that were still expecting the (let () ---) wrapper around the output of language unparsers. also cleaned up the output to make it a little more obvious what was going on with these. tests/unit-tests.ss, tests/unit-test-helpers.ss 2011-09-09 * The nanopass library is now built as a library group to ease testing in Chez Scheme 8.9.1 (which includes a built in copy of the nanopass framework that will be used in place of the library if it is not carefully loaded). nanopass.ss * Cleaned up unique names so that they now have a single number added to them rather then several, and the names are divided by : in stead of being divided by . nanopass/helpers.ss * Small changes to error messages that report bad meta-variables, these now report if they are from the parser or meta-parser. nanopass/meta-parser.ss, nanopass/parser.ss * First step at moving to record variants with case dispatch. This version includes the potential for some extra record checks, sometimes even when they are not needed. However the basic dispatch is there now. nanopass/pass.ss, nanopass/records.ss 2011-09-10 * Moved calculation of ntspec sub-terminal predicate and ntspec full tags into the same code that calculates the all-pred for the ntspec. This has the added benefit that when the else is used we only put in the nanopass-record check when there is a possibility that it could be a terminal. nanopass/records.ss, nanopass/pass.ss ---- 2011-12-26 * Small fix to echo message for echoing passes (now includes newline) nanopass/pass.ss * Added basic support for nanopass records as terminals. This support is incomplete, since it doesn't have a syntax that fully supports the define-record-type syntax, but should be able to. nanopass/pass.ss, nanopass/records.ss, nanopass/language.ss, nanopass/meta-parser.ss * Fixed (slightly) handling of mapping over input terms. Now if there is not an expression to map, it does not build a call to map. nanopass/pass.ss ---- 2012-12-17 - 949d59d57739e3a29cce020b244c81d049f73e5b * Moved project to public github. all files 2013-01-30 - 41f14e679b5fb9c2a8eaabe6f908905c3f329fe1 * removed list-tail definition from helpers and turned it into an import in implementation helpers. (thanks to Kent Dybvig, who made the change and submitted a bug report). nanopass/helpers.ss, nanopass/implementation-helpers.ss * there is no longer an additional (duplicate) count for traversing into a sub-nonterminal. counts for terminal elements of a wrapping nonterminal have also been removed (not sure if this was a good change or not). nanopass/language-node-counter.ss * changed how the "trace" keyword determines when it should use an input or output unparser. this is now determined by both checking that there is an input (or output) language and an input (or output) nonterminal in the transformer being traced. nanopass/pass.ss * changed the autogenerated clauses to call the checking record maker instead of the non-checking version, because a recursive call could potentially hit a compiler writer supplied terminal or nonterminal transformer that builds an invalid item. nanopass/pass.ss 2013-01-30 - 65d35a107fcdd4e7091af6c159867215d8da0971 * Updated copyright information in all the files. Copyright, nanopass.ss, nanopass/helpers.ss, nanopass/implementation-helpers.chezscheme.ss, nanopass/implementation-helpers.ikarus.ss, nanopass/implementation-helpers.ss, nanopass/language-node-counter.ss, nanopass/language.ss, nanopass/meta-parser.ss, nanopass/meta-syntax-dispatch.ss, nanopass/nano-syntax-dispatch.ss, nanopass/parser.ss, nanopass/pass.ss, nanopass/random-util.sls, nanopass/records.ss, nanopass/syntax-handler.sls, nanopass/syntaxconvert.ss, nanopass/unparser.ss, test-all.ss, tests/alltests.ss, tests/compiler-test.ss, tests/compiler.ss, tests/helpers.ss, tests/implementation-helpers.ikarus.ss, tests/implementation-helpers.ss, tests/new-compiler.ss, tests/synforms.ss, tests/test-driver.ss, tests/unit-test-helpers-implementation.chezscheme.sls, tests/unit-test-helpers.ss, tests/unit-tests.ss 2013-07-18 - 097f7c428a1573af14556e76619fab323f7d42b8 * Merged typo fix in error message (courtesy of Eric Holk) nanopass/pass.ss 2013-07-18 - 79e0e644d5c490a2ea71418834228a429b97d581 * Merged another typo fix in another error message (courtesy of Eric Holk) nanopass/records.ss 2013-08-03 - ce94b43cfc1a6ef1dd7de5bd65d37c165902918d * INCOMPATIBLE CHANGE: Extended languages now use the base languages's entry point as the entry point for the language instead of the first listed nonterminal. In general, this seems like the behavior you want, though it may break some existing libraries, so upgrade with caution. nanopass/languages.ss, tests/compiler.ss * Added a prune-language form that, when given a language, starts traversing the language from the entry nontermainal and determines if there are any dead nonterminals or terminals in the language, prunes them, and returns an S-expression representing only the reachable parts of the language. nanopass/language.ss, nanopass.ss 2013-09-03 - f8fc318d2bc644357c02cef5e897702efa2d1675 * Added binaries of the nanopass framework for OS X ReadMe, ReadMe.md, lib/ReadMe.md, lib/csv8.4/{,t}{a6,i3}osx/nanopass.so 2013-09-03 - b13b070e578d960c895c45aafba616175d4c5782 * Added binaries ot the nanopass framework for Linux lib/csv8.4/{,t}{a6,i3}le/nanopasss.so 2013-09-16 - ad7ff9b1eba29bffc474fc94cb4fc0ab431fa3ab * Fixed a bug with the parser that caused bare boolean terminals to fail to parse. Specifically, since #f was used to indicate a failed parse, parsing the bare boolean #f was raising an error. nanopass/parse.ss, tests/unit-tests.ss 2013-10-01 - af34af0544292872a5f1de4a8f92c1caca5e51b2 * changed unique-id to unique-symbol, since we are now building the unique-symbol and using it directly instead of generating the id to use in output syntax. also exporting make-list to make generating accessors easier. nanopass/helpers.ss, nanopass/implementation-helpers.chezscheme.ss, nanopass/implementation-helpers.ss * fixed language->s-expression to no longer output the nongenerative id of an ntspec, since it is no longer necessary to specify for each ntspec nanopass/language.ss * small cleanup of the meta-parser. removed extra (unused) argument to a couple of procedures. nanopass/meta-parsers.ss, nanopass/parser.ss, nanopass/unparser.ss * removed differentiation between checking and non-checking maker, since we are no longer using the non-checking maker. nanopass/meta-parsers.ss, nanopass/records.ss, nanopass/parser.ss, nanopass/pass.ss * improved checking of meta-variables so that if the wrong meta-variable is used, it will report it to the user, rather than doing a check that will always fail we now report that an invalid meta-variable was used at expand time. also did some general cleanup and improved error messages around using quoted items in a pattern match. nanopass/pass.ss, nanopass/records.ss * changed record creation code to skip the define-record-type macro and instead we are creating the records directly using the procedural interface. this (hopefully) helps the memory usage and speed of expanding language definitions. nanopass/records.ss 2013-10-02 - 3dd941537379b2a2a1a139daf8107a24ce919346 * added bin directory to automate the process of building binaries across Mac OS X and Linux. these scripts require a setup with multiple versions of the Chez Scheme compiler installed. bin/build-shared-objects, bin/compile-file-to-lib-dir 2013-10-02 - 3dd941537379b2a2a1a139daf8107a24ce919346 * added a define-pruned-language form that prunes a language and then defines it with a new name. also changed diff-languages to output code that is appropriate for the current implemntation of language extensions in the nanopass framework. nanopass.ss, nanopass/languages.ss 2013-10-04 - 9cd67d5ee048370ca253b7fd3b942151921858fd * added checking for mutually recursive nonterminals so that we now report an error to the user. this was a simple change, and if we want to support this in the future, there is probably a way to do so, we just need to be careful about pass generation. nanopass/records.ss 2013-10-04 - 1aa2c01274137066aa3de75f966ce7c11374d20f, c38ba0f9fea350ca403f8d0892765aebbb80890b * fixed a small bug in the error reporting code for the stricter checking of nanopass meta-variables. nanopass/pass.ss 2013-10-15 - 47c580d5ee361d6aa209189baa3489c067e18248, 3c7b2c6eff3e0e724291063cddce46ad9a447d47 * added support for Vicare Scheme through the implementation helper files. removed use of define-property, since it is not supported on other Scheme platforms. nanopass.ss, nanopass/helpers.ss, nanopass/language-node-counter.ss, nanopass/language.ss, nanopass/meta-parser.ss, nanopass/meta-syntax-dispatch.ss, nanopass/parser.ss, nanopass/pass.ss, nanopass/record.ss, nanopass/unparser.ss, nanopass/synforms.ss, nanopass.chezscheme.sls (new), nanopass/implementation-helpers.chezscheme.sls (renamed, was nanopass/implementation-helpers.chezscheme.ss), nanopass/implementation-helpers.ss (removed), nanopass/implementation-helpers.vicare.sls (new), tests/implementation-helpers.chezscheme.sls (new), tests/implementation-helpers.vicare.sls (new), tests/unit-test-helpers-implementation.vicare.sls (new) * moved language pruning code into a separate library to remove duplicated code for prune-language and define-pruned-language. nanopass/language-helpers.ss (new), nanopass/language.ss * added a gitignore file so that I won't accidentally commit vim swap files. .gitignore 2013-10-16 - d7f3c8a71a99f2cc88a3a5f8c28b780dcf07c41d * added support for Ikarus Scheme (which is a little easier to install on Mac OS X). moved more Chez specific code to the implementation specific libraries. nanopass/helpers.ss, implementation-helpers.chezscheme.sls, implementation-helpers.ikarus.ss, implementation-helpers.vicare.sls, nanopass/meta-parser.ss, nanopass/parser.ss, nanopass/pass.ss, nanopass/records.ss, nanopass/unparser.ss, tests/compiler.ss, tests/unit-test-helpers-implementation.ikarus.sls (new) * test-all now prints output when running under Vicare Scheme. tests/unit-test-helpers-implementation.vicare.sls * started cleaning up code that is no longer used. nanopass/helpers.ss, nanopass/random-util.sls (removed), nanopass/syntax-handler.sls (removed) 2013-10-17 - 31bdcd721d5685ca78c1f43974ffb0ea890ad8b2 * code cleanup. removed more no longer used code. nanopass/helpers.ss, nanopass/implementation-helpers.chezscheme.sls, test-all.ss 2013-10-17 - * updated documentation and logs LOG, TODO, ReadMe.md, CHANGES (removed), Notes (removed), ReadMe (removed) * updated binary build script and built updated binaries bin/build-shared-objects, bin/compile-file-to-dir, lib/csv8.4/{,t}{a6,i3}{le,osx}/nanopass.so 2013-10-24 - * fixed support for using improper lists in language productions. this addresses issue 7 from the github issues list. it is now possible to use an improper list as the top-level pattern for a production and improper lists can now be matched in a pass without raising an invalid pattern syntax error in the pass. also added regression tests. nanopass/language.ss, nanopass/meta-syntax-dispatch.ss, tests/unit-tests.ss, test-all.ss, lib/csv8.4/a6le/nanopass.so, lib/csv8.4/a6osx/nanopass.so, lib/csv8.4/i3le/nanopass.so, lib/csv8.4/i3osx/nanopass.so, lib/csv8.4/ta6le/nanopass.so, lib/csv8.4/ta6osx/nanopass.so, lib/csv8.4/ti3le/nanopass.so, lib/csv8.4/ti3osx/nanopass.so 2013-12-05 - * added a with-r6rs-quasiquote and a with-extended-quasiquote forms. the r6rs version provides the normal quasiquote, while the extended version includes support for ellipsis in the template (the extended quasiquote is now needed for the pretty output forms). nanopass.ss, nanopass/helpers.ss, nanopass/unparser.ss * added a second pretty form (->) for writing procedural unparsing of nonterminal productions. nanopass/language.ss, nanopass/helpers.ss, nanopass.ss, nanopass/records.ss, nanopass/unparser.ss * changed how trace-define-pass and traced transformers work, so that the tracing now outputs the raw S-expressions syntax, rather than the unparsed S-expression syntax. nanopass/unparser.ss * fixed how the unparser handles terminals, so that they will be unparsed using the pretty unparser, even when they are unparsed at the top level, if they are not using the raw unparsing. nanopass/unparser.ss * fixed a bug in how the meta-parser generates catas so that it will now put the correct type in for terminal specs. nanopass/meta-parser.ss * fixed a bug in how the transformer syntax is parsed when there is no input language, or when there is no output language. (the code used to assume that the language would be present, leading to unhelpful error messages.) nanopass/pass.ss 2013-12-05 - * fixed a bug with how errors are reported when a language production gets the wrong the value. (Thanks to Eric Holk for pointing out the bug (and the different handling of formats in Vicare). nanopass/records.ss * built csv8.4 binaries with the current updates. lib/csv8.4/a6le/nanopass.so, lib/csv8.4/a6osx/nanopass.so, lib/csv8.4/i3le/nanopass.so, lib/csv8.4/i3osx/nanopass.so, lib/csv8.4/ta6le/nanopass.so, lib/csv8.4/ta6osx/nanopass.so, lib/csv8.4/ti3le/nanopass.so, lib/csv8.4/ti3osx/nanopass.so 2013-12-09 - * fixed a bug with the unparsing of maybe fields, with an added test to make sure that we don't wreck the handling of maybe fields again. nanopass/unparser.ss, test-all.ss, tests/unit-tests.ss * built csv8.4 binaries with the current updates. lib/csv8.4/a6le/nanopass.so, lib/csv8.4/a6osx/nanopass.so, lib/csv8.4/i3le/nanopass.so, lib/csv8.4/i3osx/nanopass.so, lib/csv8.4/ta6le/nanopass.so, lib/csv8.4/ta6osx/nanopass.so, lib/csv8.4/ti3le/nanopass.so, lib/csv8.4/ti3osx/nanopass.so 2017-11-09 - * fixed bug in handling of extra arguments for terminal subtypes, nonterminal subtypes, and pass bodies. Previously all three of these cases simply looked for a processor that did not require more extra arguments than we had available, and supplied them in positional order, instead of using names like the cata-morphism or normal pair-alt production processing. nanopass/pass.ss, tests/unit-test.ss, test-all.ss 2017-11-10 - * fixed a bug introduced by the last bug check that was leading to an erroneous change in generation of terminal and nonterminal subtype calls when there were additional return values. Also fixed a bug with the handling of terminal subtype calls (these originally looked for a processor that could return multiple values and then produced a values return that added effectively had a multi-valued first element (which would have lead to run time errors). nanopass/pass.ss 2017-11-17 - * fixed error message generated by nanopass constructors with list fields so that it reports that it expected a list of (or list of list of ... etc.) the type instead of failing because we are calling for-each. (bad error message reported by Jamie Taylor---thanks!) nanopass/records.ss, test-all.ss, tests/unit-tests.ss * fixed assert-error so that it will work, now that there are tests that need to make use of it. tests/unit-test-helpers.ss 2018-09-05 - * remove outdated information and add links to papers ReadMe.md * fixed Travis CI fails caused by inaccurate vicare-scheme version .travis/install_scheme 2018-09-16 - * fixed tests to work with recent version of vicare (0.4d1) nanopass/implementation-helpers.vicare.sls, nanopass/language.ss, nanopass/pass.ss, nanopass/records.ss, tests/implementation-helpers.vicare.sls, tests/test-driver.ss 2018-09-30 - * implemented define-property for ikarus and vicare nanopass/syntactic-property.sls (new), nanopass/implementation-helpers.ikarus.ss, nanopass/implementation-helpers.vicare.sls, nanopass/implementation-helpers.chezscheme.ss, nanopass/helpers.ss * added pass-input-parser and pass-output-unparser to allow the class compiler driver to determine the parser and unparser for passes used in the compiler so that we can trace and start at intermediate points in the compiler without having to specify it in each case. nanopass.ss, nanopass/pass.ss, test-all.ss, tests/unit-tests.ss, tests/unit-test-helpers.ss * updated to the most recent vicare release .travis/install_scheme 2018-10-04 - * Updated the way we store the pass input and output languages, so that we can differentiate between a pass that does not have an input language or output language and an identifier that is not for a pass. These macros now expand into code for the language unparser/parser (when there is an input or output language), a procedure that takes one or more arguments and returns the first one (when there is no input or output language), or #f (when the identifier is not for a pass, or the pass info property has been somehow lost). Also added procedures for looking up the input and outpuot language with an identifier and the compile time environment, and determining if an identifier has related pass information. nanopass.ss, nanopass/pass.ss nanopass/records.ss 2019-11-27 - * Small fix to correct with-r6rs-quasiquote, which was previously not restoring the normal R6RS quasiquote within a scope where a nanopass quasiquote handler was bound. nanopass/helpers.ss * Whitespace cleanup. nanopass/pass.ss 2019-12-07 - * Small fix to make the unit tests exit with a non-zero exit code when one of the unit test fails. Along with this fixed formatting around the error messages so that it should be consistent across platforms. This required a bit of hackery to get the filename that will be used by Chez, Ikarus, and Vicare, along with exposing a version of format that sets the print parameters necessary to get it to match display-condition (in Chez, this is just format in Ikarus and Vicare). Finally, exposed some of the underlying source information extracting functions. test-all.ss, nanopass/helpers.ss, tests/unit-test-helpers-implementation.chezscheme.sls, tests/unit-test-helpers-implementation.ikarus.sls, tests/unit-test-helpers-implementation.vicare.sls, tests/unit-test-helpers.ss, tests/unit-tests.ss * Corrected (embarrassing) misspelling of received. nanopass/records.ss 2020-01-31 - * Small changes: added trace-define-who, slightly improved error message for quoted terminals in patterns, and a little code and comment cleanup. nanopass/helpers.ss, nanopass/meta-syntax-dispatch.ss, nanopass/pass.ss, nanopass/records.ss 2020-10-11 - * Changed the nano-syntax-dispatch into a macro so that compilers using define-parser do not have a run-time dependency on the (nanopass nano-syntax-dispatch) library. With this change the pattern no longer needs to be quoted in the output of define-parser. nanopass/nano-syntax-dispatch.ss, nanopass/parser.ss 2020-10-18 - * Removed np-parse-fail-token as a run-time dependency by making it a macro. The whole parser really needs to be revisited, but this should make it possible to generate compilers with intermediate language parser that do not have a run-time dependency on the nanopass framework. nanopass/parser.ss, nanopass/helpers.ss, nanopass/implementation-helpers.chezscheme.sls, nanopass/implementation-helpers.ikarus.ss, nanopass/implementation-helpers.ironscheme.sls, nanopass/implementation-helpers.vicare.sls