Commit Graph

8 Commits (f18322fbe5de78ef5f6f4f31b3687f6f3bb6670d)

Author SHA1 Message Date
Mike Gerwitz f18322fbe5
birth, rebirth: Correct *->ecmascript procedure names
They were just out of date, having been copied from Prebirth.

* build-aux/bootstrap/birth.scm
  (prebirth->ecmascript, birth>ecmascript): Former renamed to latter.
* build-aux/bootstrap/rebirth.scm
  (prebirth->ecmascript, rebirth>ecmascript): Former renamed to latter.
2017-12-09 23:43:33 -05:00
Mike Gerwitz 0f9b034a82
rebirth: Unencapsulate all procedures
Many of the procedures were encapsulated within `prebirth->ecmascript';
these have been moved out so that they can be accessed by other procedures,
allowing me to organize the code how I please.

Which also makes me realize that the procedure name is incorrect.

* build-aux/bootstrap/rebirth.scm: Move all procedures out of
    `prebirth->ecmascript'.
2017-12-09 23:43:22 -05:00
Mike Gerwitz a839301a12
rebirth: Make quote form recursive, add quasiquote
This was pretty much a prerequisite for introducing macros (in commits to
follow)---the code would otherwise be far too verbose.

Note that this does _not_ introduce the shorthand forms ("'", "`", ",",
",@"), as implementing those in a reasonable manner would require
preprocesing the AST, which is not what I want to focus on right now.  So
macros will still be a bit verbose, using the full
"(quasiquote ... (unquote-splicing ...))" and such instead of simply
"`(... ,@(...))"

* build-aux/bootstrap/rebirth.scm
  (quote-sexp, quasiquote-sexp): Add procedures.
  (fnmap)[quote]: Use `quote-sexp'.
    [quasiquote]: Add special form.
2017-12-06 22:48:16 -05:00
Mike Gerwitz 4585203a22
rebirth: Remove libprebirth.js dependency
This re-implements libprebirth in Rebirth Lisp, finally cutting the
cord.  (Are these birth puns getting out of control?)  We are finally purely
in Lisp land!

* build-aux/bootstrap/rebirth.scm: Define libprebith primitives when
    `string->es' is available (using `cond-expand').
  (prebirth->ecmascript): Do not include `libprebirth.js' in output.
2017-12-05 00:50:29 -05:00
Mike Gerwitz 7f7a9704e5
prebirth,birth,rebirth: Permit newlines in strings
This modifies each of the three lexers just to avoid confusion, even
though prebirth has no need for it.  Birth does have a need, however, since
rebirth will contain newlines---despite the relevant rebirth code (next
commit) not being expanded, it still has to go through the lexer, which
otherwise errors out.

* build-aux/bootstrap/birth.scm (lex): Permit newlines in string regex.
* build-aux/bootstrap/prebirth.js (lex): Permit newlines in string regex.
* build-aux/bootstrap/rebirth.scm (lex): Permit newlines in string regex.
2017-12-05 00:47:26 -05:00
Mike Gerwitz 639948da02
birth,rebirth: Add cond-expand, string->es
`cond-expand' allows moving forward with implementing features based on the
current bootstrapped state of the system---rebirth will be able to
recursively compile itself and introduce new features along the way.

`string->es' allows outputting raw ECMAScript, which gives us more control
over the code that is generated without having to hard-code it in the
compiler itself.

* build-aux/bootstrap/birth.scm
  (fnmap)[cond-expand]: Always yield the empty string (do nothing).
* build-aux/bootstrap/rebirth.scm
  (fnmap)[cond-expand]: Expand `string->es' only.
  (fnmap)[string->es]: Add macro.
2017-12-05 00:38:39 -05:00
Mike Gerwitz 53ea5c5f4d
rebirth: Add variable definitions (define)
`define' can now be used to define values in addition to the procedure
short-hand.

* build-aux/bootstrap/rebirth.scm
  (cdfn): New procedure.  Renamed original `cdfn' to `cdfn-proc'.
  (cdfn-var): New procedure.
  (cdfn-proc): Renamed from `cdfn'.
2017-12-05 00:32:40 -05:00
Mike Gerwitz 1810fb7c38
rebirth: Copy from birth.scm
See diff for comments as to why this fork exists.

build-aux/bootstrap/rebirth.scm: New file, copied from `birth.scm'.
2017-11-12 00:53:32 -05:00