* module/ice-9/psyntax.scm (syntax-violation): Use lambda* for subform
arg. Instead of using scm-error, just throw to 'syntax-error with all
we got.
* module/ice-9/psyntax-pp.scm (#{and-map*\ 37}): Regenerated.
* libguile/numbers.c (scm_iuint2str): Add an assertion on the domain of
the radix. Use the number_chars table to write the string, instead of
doing strange math. Same effect, though.
(mem2uinteger, char_decimal_value): Change logic to allow all ascii
alphabetic chars as decimals, not just a-f. Thanks to Nils Gey for the
report.
* test-suite/tests/numbers.test ("number->string"): Add some tests.
* guile-readline/ice-9/readline.scm (make-readline-port): Instead of
calling add-history after every %readline call, do it only when
starting a new read. Other times, append the line just read to an
internal buffer.
* module/web/server.scm (sanitize-response): Flesh out. If we get a
string, we encode it to a bytevector using the encoding snarfed from
the response. We should check the request, though...
* module/web/http.scm (parse-media-type, validate-media-type,
(content-type): Change to represent media types as ("foo/bar" ("param"
. "val") ...) instead of ("foo" "bar" ("param" . "val") ...). Seems to
be more in line with what people expect.
* test-suite/tests/web-http.test ("entity headers"): Add content-type
test.
* test-suite/tests/web-response.test ("example-1"): Adapt expected
parse.
* module/Makefile.am
* module/web/toy-server.scm: Remove. It's not so much that the new (web
server) stuff is not a toy, it's that users are expected to use the
new backends (mod-lisp, etc) in "production".
* module/web/server.scm: New generic web server module, with support for
different backends. An HTTP-over-TCP backend is the only one included
with Guile, though one can imagine FastCGI, mod-lisp, mongrel2/0mq etc
backends as well.
* module/web/server/http.scm: The aforementioned HTTP backend.
* module/web/request.scm (<request>): Add `meta' field and accessor, for
metadata like the server IP, the client IP, CGI environment variables,
etc.
(build-request): Add meta kwarg.
(read-request): Add meta optional arg.
(write-request): Adapt.
* module/web/uri.scm (declare-default-port!): New function, declares a
default port for a scheme. Predeclare default ports for http and
https.
(unparse-uri): If the port is the default port for the given scheme,
don't serialize the port part of the URI.
Avoid the "expected a positive width" display error when printing
sequences with no width remaining.
* module/ice-9/pretty-print (print-sequence): test for zero width when
printing sequences
This is a followup to a4e4722944 ("need
read error for extra closing square brackets".)
* test-suite/tests/reader.test (exception:unexpected-rsqbracket): New
variable.
("reading")["paren mismatch (2)"]: Change exception type to
EXCEPTION:UNEXPECTED-RSQBRACKET.
["paren mismatch (3)", "paren mismatch (4)"]: New tests.
("mismatching parentheses")["closing square bracket following
mismatched opening"]: New test.
* module/ice-9/pretty-print.scm (generic-write)[pp-SYNTAX-CASE]: New
procedure.
[style]: Add support for `define-public', `define-syntax',
`let-syntax', `letrec-syntax', `syntax-rules', and `syntax-case'.
* module/web/toy-server.scm (serve-client): Fix up error handling, so we
catch errors when reading, handling, and writing. If we run
interactively, an error will enter the debugger.
* module/ice-9/pretty-print.scm (generic-write)[wr]: Handle read macros
that appear in the middle of a list.
* test-suite/tests/print.test (prints?): New macro.
("pretty-print"): New test prefix.
* module/web/http.scm: New module, declares known HTTP headers, and
their parsers and unparsers.
* test-suite/tests/web-http.test: Add test suite.
* module/Makefile.am:
* test-suite/Makefile.am: Adapt.
* module/web/uri.scm (uri-error): New proc, throws to 'uri-error.
(validate-uri, uri-decode, uri-encode): Use uri-error.
* test-suite/tests/web-uri.test: Update for uri-error.
* module/srfi/srfi-38.scm: New file, partly based on the reference
implementation and on Alex Shinn's public-domain implementation for
Chicken.
* module/Makefile.am (SRFI_SOURCES): Add srfi/srfi-38.scm.
* test-suite/tests/srfi-38.test: New file, minimal test suite for SRFI
38.
* test-suite/Makefile.am (SCM_TESTS): Added tests/srfi-38.test.
* doc/ref/srfi-modules.texi: Add a node for SRFI 38.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This allows customizing the reader behavior for a dynamic extent more easily.
* libguile/read.c (scm_read_hash_procedures): Renamed to
`scm_i_read_hash_procedures'.
(scm_i_read_hash_procedures_ref, scm_i_read_hash_procedures_set_x):
New (internal) accessor functions for the fluid.
(scm_read_hash_extend, scm_get_hash_procedure): Use these accessor
functions.
(scm_init_read): Create the fluid, named `%read-hash-procedures' instead of
the previous plain list `read-hash-procedures'.
* test-suite/tests/reader.test: Adapt the "R6RS/SRFI-30 block comment
syntax overridden" test to make use of the fluid.
* module/ice-9/deprecated.scm (read-hash-procedures):
New identifier macro -- backward-compatibility shim.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Because that probably isn't where people will look for it.
Thanks to Noah Lavine for the idea.
* doc/ref/api-regex.texi (Regular Expressions): New file, containing
the regex doc (promoted one level) that used to be in api-data.texi.
* doc/ref/guile.texi (API Reference): Include new file, and add menu
entry for the new section.
* THANKS: Add Noah.
* benchmark-suite/benchmarks/arithmetic.bm (repeat): Change the syntax.
Add support for binary OP.
("fixnum")["1+", "1-"]: Adjust accordingly.
["+", "-"]: New benchmarks.
Reimplement record-type descriptors as vtables for record structs, saving
us what was an expensive inspection of a record's vtable layout string to
determine its type.
* module/rnrs/records/inspection.scm (record-field-mutable?): Check
mutability using the bit field stored in the record-type descriptor
instead of the record struct's vtable.
* module/rnrs/records/procedural.scm (record-internal?): Reimplement as a
delegation to a check of the passed struct's vtable against
`record-type-descriptor?'.
(record-type-vtable): Modify to include base vtable layout as a prefix
of the record-type-descriptor layout so that all record-type instances
are now also vtables.
(make-record-type-descriptor): Remove field vtable; build up a mutability
bit field to use for fast mutability checks.
(record-accessor, record-mutator): Use field struct and mutability bit
field.
* module/language/tree-il/analyze.scm (gensym?): New procedure.
(unused-variable-analysis): Ignore variables whose name passes
`gensym?' or is `_'.
(unused-toplevel-analysis): Ignore variables whose name passes
`gensym?'.
* test-suite/tests/tree-il.test ("warnings")["unused-variable"]("special
variable names"): New test.
["unused-toplevel"]("special variable names"): New test.
* libguile/threads.c:
* libguile/posix.c: Change a couple #if HAVE_FOO to #ifdef HAVE_FOO to
pacify -Wundef. Some vars are defined or not, whereas some are always
defined to 0 or 1. The inconsistency is unfortunate.