Noah Lavine
bff3ccd957
Split peg.scm
...
* module/ice-9/peg.scm: move code generators to new module
* module/ice-9/peg/codegen.scm: new module for PEG code generators
2013-01-16 10:11:42 +01:00
Andy Wingo
718bc349af
reformat and reflow api-peg.texi
...
* doc/ref/api-peg.texi: Reformat and reflow.
2013-01-16 10:11:42 +01:00
Andy Wingo
c7ed2190cf
peg: remove error-val
...
* module/ice-9/peg.scm (error-val): Remove needless definition.
2013-01-16 10:11:42 +01:00
Andy Wingo
3be2799eaf
peg: refactor peg-sexp-compile to operate on syntax directly
...
* module/ice-9/peg.scm (cg-generic-ret): Remove unused for-syntax
argument.
(peg-sexp-compile): Take the pattern as syntax directly, and use
syntax-case to destructure it and dispatch to the code generators.
(cg-and, cg-and-int, cg-or, cg-or-int): Refactor to operate on syntax
instead of on s-expressions.
(cg-body): Likewise; though this was a larger refactor.
(define-nonterm, peg-match): Adapt to peg-sexp-compile calling
convention change.
(peg-string-compile): Likewise, and just take the grammar as a syntax
object.
2013-01-16 10:11:41 +01:00
Andy Wingo
5041b82067
peg: cg-string, cg-peg-any, cg-range: remove needless for-syntax arg
...
* module/ice-9/peg.scm (cg-string, cg-peg-any, cg-range): Remove
unnecessary for-syntax arg.
(peg-sexp-compile): Adapt.
2013-01-16 10:11:41 +01:00
Andy Wingo
c5b85eceba
peg: change some instances of "match" to "pat"
...
* module/ice-9/peg.scm (cg-string): Rename "match" to "pat".
(peg-sexp-compile, cg-body-test, cg-body, define-nonterm): Likewise.
2013-01-16 10:11:40 +01:00
Andy Wingo
63a1336de7
remove cggl, cg-generic-lambda
...
* module/ice-9/peg.scm (cg-generic-lambda, cggl): Remove these helpers,
they are no longer needed.
(cg-generic-ret): Remove optimization for particular cg- routines, as
it's no longer needed.
2013-01-16 10:11:40 +01:00
Andy Wingo
e9722ec0aa
peg: more cggl / cggr excisions
...
* module/ice-9/peg.scm (cg-peg-any): Don't use cggr.
(cg-range): Don't use cggl or cggr.
2013-01-16 10:11:39 +01:00
Andy Wingo
102d022f53
peg: cg-string does not use cggr
...
* module/ice-9/peg.scm (cg-string): Don't use cggr. Interesting to see
what it actually generates.
2013-01-16 10:11:39 +01:00
Andy Wingo
67ac87f96d
peg: cg-peg-any does not use cggl
...
* module/ice-9/peg.scm (cg-peg-any): Don't use cggl.
2013-01-16 10:11:39 +01:00
Andy Wingo
7b746f4090
peg: cg-string without cggl
...
* module/ice-9/peg.scm (cg-string): Refactor to not use cggl.
2013-01-16 10:11:38 +01:00
Andy Wingo
990b24b254
peg: cg-string improvement
...
* module/ice-9/peg.scm (cg-string): Use the more efficient string= with
range args, rather than string=? and substring.
2013-01-16 10:11:38 +01:00
Andy Wingo
87c3ef2f95
peg: helper macro docstrings
...
* module/ice-9/peg.scm: Convert the helper macro comments into
docstrings.
2013-01-16 10:11:37 +01:00
Andy Wingo
09a6a7a44a
peg: module-ref cleanup
...
* module/ice-9/peg.scm (cg-generic-ret, cg-and-int, cg-body-test):
Remove a few needless @ or @@ forms.
2013-01-16 10:11:37 +01:00
Andy Wingo
49db248111
peg: remove get-code debugging foo
...
* module/ice-9/peg.scm (define-nonterm): Don't stash the code in a
symbol property.
(get-code): Remove.
2013-01-16 10:11:37 +01:00
Andy Wingo
a907bce657
peg: more syntax helper cleanup
...
* module/ice-9/peg.scm (single-filter, push-not-null!): Use
syntax-rules, and move outside the eval-when.
2013-01-16 10:11:36 +01:00
Andy Wingo
bb7ff21a77
peg: else for default cond clauses, not #t
...
* module/ice-9/peg.scm: Change default cases of `cond' to use `else'
instead of #t.
2013-01-16 10:11:36 +01:00
Andy Wingo
b5ebb8abad
peg; syntax helper cleanups
...
* module/ice-9/peg.scm (until, single?, push!): Move outside the
eval-when. Use syntax-rules, and single? is faster now.
2013-01-16 10:11:35 +01:00
Andy Wingo
3c8963de27
peg: cleanups
...
* module/ice-9/peg.scm (until): Rename from until-works, and be
functional (and faster).
(peg-match): Adapt.
2013-01-16 10:11:35 +01:00
Andy Wingo
0d2f21fc81
peg: define-module cleanup
...
* module/ice-9/peg.scm: Fix up define-module block.
2013-01-16 10:11:35 +01:00
Noah Lavine
9ca71e7b84
peg: let cleanups
...
* module/ice-9/peg.scm (cg-string, cg-peg-any, cg-range): Remove some
unnecessary lets.
2013-01-16 10:11:34 +01:00
Noah Lavine
18905baf6e
peg: remove unhygienic safe-bind, safe-bind-f
...
* module/ice-9/peg.scm (safe-bind, safe-bind-f): Remove.
2013-01-16 10:11:34 +01:00
Noah Lavine
ac8a071390
peg: remove unused nonhygienic expander helpers
...
* module/ice-9/peg.scm (cggl, cggr): Remove, and rename the cggl-syn and
cggr-syn to take their place.
2013-01-16 10:11:33 +01:00
Noah Lavine
84cb143eb4
peg: more helpers returning syntax
...
* module/ice-9/peg.scm (cg-body, cg-body-success, cg-body-more)
(cg-body-ret): Return syntax instead of s-expressions.
2013-01-16 10:11:33 +01:00
Noah Lavine
8e8de46ec6
peg: cg-or, cg-or-int return syntax
...
* module/ice-9/peg.scm (cg-or, cg-or-int): Return syntax instead of
s-expressions.
(peg-sexp-compile): Adapt.
2013-01-16 10:11:33 +01:00
Noah Lavine
00e227f779
peg: hygiene in cg-and, cg-and-int
...
* module/ice-9/peg.scm (cg-and, cg-and-int): Use cggr-syn instead of
cggr, and also return syntax now instead of s-expressions.
2013-01-16 10:11:32 +01:00
Noah Lavine
8b52357e88
peg: hygiene in cg-range
...
* module/ice-9/peg.scm (cg-range): Use cggl-syn and cggr-syn.
2013-01-16 10:11:32 +01:00
Noah Lavine
febe6dadab
peg: hygiene in cg-peg-any
...
* module/ice-9/peg.scm (cg-peg-any): Use cggl-syn and cggr-syn.
2013-01-16 10:11:31 +01:00
Noah Lavine
6f6c7d15a2
peg: more hygiene in cg-string
...
* module/ice-9/peg.scm (cggl-syn, cggr-syn): New functions, equivalent
to cggl and cggr except that they operate on syntax instead of
s-expressions.
(cg-string): Use them here.
2013-01-16 10:11:31 +01:00
Noah Lavine
0b61da75fe
peg: lower datum->syntax in cg-range case
...
* module/ice-9/peg.scm (cg-range): Datum->syntax here...
(peg-sexp-compile): ...instead of here.
2013-01-16 10:11:31 +01:00
Noah Lavine
6a297af101
peg: lower datum->syntax in cg-peg-any case
...
* module/ice-9/peg.scm (cg-peg-any): Datum->syntax here...
(peg-sexp-compile): ...instead of here.
2013-01-16 10:11:30 +01:00
Noah Lavine
b987677437
peg: lower datum->syntax in cg-string case
...
* module/ice-9/peg.scm (cg-string): Return syntax instead of
s-expressions.
(peg-sexp-compile): No need for datum->string in cg-string case.
2013-01-16 10:11:30 +01:00
Noah Lavine
2a88fe3046
peg: peg-sexp-compile datum->syntax refactor
...
* module/ice-9/peg.scm (peg-sexp-compile): Push datum->syntax call
through cond expression in peg-sexp-compile. This is a preliminary
move so that I can convert the code-generating functions into
syntax-generating functions one by one.
2013-01-16 10:11:29 +01:00
Noah Lavine
fe50d7ee1a
peg: compilers return syntax instead of s-expressions
...
* module/ice-9/peg.scm (peg-sexp-compile, peg-string-compile): Return
syntax instead of s-expressions.
2013-01-16 10:11:29 +01:00
Noah Lavine
ccab173a5b
peg: beginnings of hygiene
...
* module/ice-9/peg.scm: Pass for-syntax argument to all of the
code-generating functions.
2013-01-16 10:11:29 +01:00
Noah Lavine
c9a6f4befa
peg: more syntax-for-non-cache-case cleanups
...
* module/ice-9/peg.scm (syntax-for-non-cache-case): More cleanups.
2013-01-16 10:11:28 +01:00
Noah Lavine
8b38945119
peg: clean up syntax-for-non-cache-case
...
* module/ice-9/peg.scm (syntax-for-non-cache-case): Cleanups.
2013-01-16 10:11:28 +01:00
Noah Lavine
bce6e5d3f2
peg: use quasisyntax instead of safe-bind
...
* module/ice-9/peg.scm (syntax-for-non-cache-case): Use quasisyntax
instead of safe-bind.
2013-01-16 10:11:27 +01:00
Noah Lavine
c011c0b6ef
peg: define-nonterm returns syntax instead of s-expression
...
* module/ice-9/peg.scm (define-nonterm, syntax-for-non-cache-case):
Returns syntax instead of an s-expression.
2013-01-16 10:11:27 +01:00
Noah Lavine
f4576d8161
peg: split define-nonterm into two functions for better readability.
...
* module/ice-9/peg.scm (define-nonterm): Split for readability.
2013-01-16 10:11:27 +01:00
Andy Wingo
add20d35be
peg: add copyright header
...
* module/ice-9/peg.scm: Add copyright header.
2013-01-16 10:11:26 +01:00
Andy Wingo
eee0877c3e
add PEG parser generator
...
* module/ice-9/peg.scm: New file.
* module/Makefile.am: Add to build.
* doc/ref/Makefile.am:
* doc/ref/api-peg.texi:
* doc/ref/guile.texi: Add documentation for PEG parser.
* test-suite/Makefile.am:
* test-suite/tests/peg.bench:
* test-suite/tests/peg.test: Add tests, and a benchmark.
2013-01-16 10:11:15 +01:00
Andy Wingo
2f0db5ee96
update make-struct docstring
...
* libguile/struct.c (scm_make_struct): Remove reference to deprecated
make-vtable-vtable.
2013-01-16 09:17:35 +01:00
Andy Wingo
449ca87bdb
ASCII is not ISO-8859-1
...
* libguile/ports.c (scm_i_set_default_port_encoding): An encoding of
ASCII is not the same as ISO-8859-1, because it does not allow
characters above 128. Fix this.
2013-01-15 16:37:01 +01:00
Andy Wingo
e5cef86e9c
fix string->bytevector for utf-8 and non-error conversion strategies
...
* module/ice-9/iconv.scm (call-with-encoded-output-string):
(string->bytevector, bytevector->string): Only call string->utf8 and
utf8->string if the conversion strategy is `error'.
2013-01-15 16:37:01 +01:00
Andy Wingo
686df5162d
string->utf8 implementation uses scm_from_utf8_stringn
...
* libguile/bytevectors.c (UTF_TO_STRING): Use scm_from_utf8_stringn.
2013-01-15 16:36:55 +01:00
Andy Wingo
b39685c6da
scm_from_stringn and scm_to_stringn encoding args are never NULL
...
* libguile/strings.c (scm_from_stringn, scm_to_stringn): Encoding
argument cannot be NULL. Instead check that the encoding was
ISO-8859-1.
2013-01-15 16:32:52 +01:00
Andy Wingo
d1b9f8ace9
Port encodings cannot be NULL
...
* libguile/ports.c (scm_c_read_unlocked, scm_ungetc_unlocked):
* libguile/read.c (scm_read_character):
* libguile/vports.c (sf_fill_input): Port encodings cannot be NULL any
more, now that encodings are canonicalized, so simplify these.
2013-01-15 16:32:52 +01:00
Andy Wingo
e2551947dd
All r6rs ports are both textual and binary
...
* module/rnrs/io/ports.scm (binary-port?): All ports are binary _and_
textual. Bytevectors and strings may be written to or read from
either.
(port-transcoder): All textual ports (all ports) have transcoders of
some sort.
* test-suite/tests/r6rs-ports.test ("8.2.6 Input and output ports"):
Remove test that binary ports don't have transcoders, because binary
ports are also textual.
2013-01-15 16:32:52 +01:00
Andy Wingo
93c4fa2174
Port encodings are case-insensitive, but normalized to upper-case.
...
* libguile/ports.c (ascii_toupper, encoding_matches)
(canonicalize_encoding): New helpers.
(scm_c_make_port_with_encoding):
(scm_i_set_default_port_encoding):
(scm_i_set_port_encoding_x): Use the new helpers to be
case-insensitive and also to canonicalize the internal representation
to upper-case ASCII names.
(scm_i_default_port_encoding): Never return NULL.
(scm_port_encoding): The encoding is always a string.
* libguile/read.c (scm_i_scan_for_encoding): Use a locale-independent
check instead of isalnum. Don't upcase the result: the port code will
handle that.
* test-suite/tests/web-response.test ("example-1"): Adapt test to expect
normalized (upper-case) encoding for the response port.
2013-01-15 16:32:17 +01:00