* libguile/vm-engine.h (RUN_HOOK1): Add some machinery whereby a hook
can push an arg on the stack, run the hook, then drop the value.
(RETURN_HOOK): Use it here, so we push the number of returned values.
* libguile/vm-i-system.c (return, return-values): Adapt to RETURN_HOOK
changes.
* module/system/vm/trace.scm (vm-trace): Change to just export the one
procedure, vm-trace. This way it's threadsafe and more robust. Also
refactor to not print any of Guile's internal bits. Hopefully Neil
will be happier :)
* module/system/repl/command.scm (option): Adapt to removal of
vm-trace-on! and vm-trace-off!, as those are unlikely to DTRT.
* README: Don't suggest setting vars before running configure.
Instead, suggest specifying them on the configure command-line.
Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org>
When the reader option 'r6rs-hex-escapes is enabled, the \uNNNN and
\UNNNNNN string escape sequences should be disabled.
* libguile/read.c (scm_read_string): added checks for SCM_R6RS_ESCAPES_P
* test-suite/tests/reader.test (r6rs-hex-escapes): new tests
* test-suite/tests/chars.test (R6RS Hex escapes): remove tests by reverting
to previous version
* test-suite/tests/strings.test (R6RS Hex escapes): remove tests by
reverting to previous version
This adds a reader option 'r6rs-hex-escapes that modifies the
behavior of numeric escapes in characters and strings. When enabled,
variable-length character hex escapes (#\xNNN) are allowed and become
the default output format for numerically-escaped characters. Also,
string hex escapes switch to a semicolon terminated hex escape (\xNNNN;).
* libguile/print.c (PRINT_CHAR_ESCAPE): new macro
(iprin1): use new macro PRINT_CHAR_ESCAPE
* libguile/private-options.h (SCM_R6RS_ESCAPES_P): new #define
* libguile/read.c (scm_read_opts): add new option r6rs-hex-escapes
(SCM_READ_HEX_ESCAPE): modify to take a terminator parameter
(scm_read_string): parse R6RS hex string escapes
(scm_read_character): parse R6RS hex character escapes
* test-suite/tests/chars.test (with-read-options): new procedure
(R6RS hex escapes): new tests
* test-suite/tests/strings.test (with-read-options): new procedure
(R6RS hex escapes): new tests
* module/system/vm/program.scm (program-arguments-alist): Rename from
program-arguments, a name shadowed by features.c
(arglist->arguments-alist, arity->arguments-alist)
(arguments-alist->lambda-list, program-lambda-list, write-program):
Adapt callers.
* module/system/vm/frame.scm (frame-lookup-binding): Return #f if the
binding is not found, not an error.
(frame-binding-set!, frame-binding-ref): Adapt to error appropriately.
(frame-arguments): Dispatch to frame-call-representation.
(frame-call-representation): Refactor a bit.
* module/ice-9/session.scm (procedure-arguments): Adapt to
program-arguments name change.
* module/texinfo/reflection.scm (get-proc-args): Refactor to actually
work with VM procedures.
* libguile/srfi-4.c (DEFINE_SRFI_4_C_FUNCS): Add a width parameter,
indicating the number of sizeof(ctype) entries comprised by one
element of the uniform; normally 1, but 2 for c32 and c64.
* libguile/arrays.h:
* libguile/arrays.c (scm_from_contiguous_array): New public function,
like scm_from_contiguous_typed_array but for arrays of generic Scheme
values.
* libguile/vm-i-scheme.c (make-struct): Sync regs before making the
struct, so if we get a GC the regs are on the heap.
(make-array): New instruction, makes an generic (untyped) Scheme
array.
* module/language/glil/compile-assembly.scm (dump-object): Correctly
compile arrays.
* module/ice-9/boot-9.scm (export, re-export): Evaluate at compile-time
in addition to load/eval.
* test-suite/tests/tree-il.test ("warnings")["unused-toplevel"]("unused
but define-public"): Remove throw to `unresolved'.
* module/ice-9/boot-9.scm: Load `deprecated.scm' with
`resolve-interface' instead of `primitive-load-path'.
* module/ice-9/deprecated.scm: Turned into a module, `(ice-9
deprecated)'.
* module/language/tree-il/analyze.scm (<reference-dag>): New record
type.
(dag-reachable-nodes, dag-reachable-nodes*, unused-variable-analysis):
New variables.
(unbound-variable-analysis): Slightly simplify the `up' procedure.
* module/language/tree-il/compile-glil.scm (%warning-passes): Add
`unused-toplevel'.
* module/system/base/message.scm (%warning-types): Likewise.
* test-suite/tests/tree-il.test (%opts-w-unused-toplevel): New variable.
("warnings")["unused-toplevel"]: New test prefix.
R6RS suggests that '\b' should be a string escape for the backspace
character.
* libguile/read.c (scm_read_string): parse backspace escape
* test-suite/tests/strings.test (R6RS backslash escapes): new test
(Guile extensions backslash escapes): remove R6RS escapes from test.
* doc/ref/api-data.texi (Strings): document new string escape
R6RS suggests that '\b' should be a string escape for the backslash
character.
* libguile/read.c (scm_read_string): parse backspace escape
* test-suite/tests/strings.test (R6RS backslash escapes): new test
(Guile extensions backslash escapes): remove R6RS escapes from test.
* doc/ref/api-data.texi (Strings): document new string escape
R6RS adds new names for some of the control characters.
* libguile/chars.c (scm_r6rs_charnames, scm_r6rs_charnums)
(SCM_N_R6RS_CHARNAMES): new character name constants
(scm_alt_charnames, scm_alt_charnums): modified to remove duplicates
(scm_i_charname, scm_i_charname_to_char): use new constants
* test-suite/tests/chars.test (R5RS character names, R6RS character names):
new tests
* doc/ref/api-data.texi (Characters): updated
* module/language/assembly/disassemble.scm (disassemble-meta):
Properties start with the fourth element, not the third. (The third is
the set of arities.)
* module/system/vm/frame.scm (frame-arguments): For subrs, we don't get
names in the lambda-list, we get #f instead. But still, parse out the
args in that case, assuming they are on the stack in that order.
* libguile/stackchk.h (SCM_STACK_OVERFLOW_P): Fix a potential overflow,
depending on the absolute values of the thread base and the stack
limit. Thanks to Ivan Shcherbakov for the report.
* libguile/vm-i-system.c (subr-call, smob-call): Unlike the previous
situation, in which a call to a subr or a smob didn't actually build a
frame, we no longer need to explicitly pop the procedure and its
arguments. Indeed the procedure and its arguments must remain on the
stack, for hooks and ticks and such always to see frames with valid
procedures. Two lines out, two bugs less, and faster to boot.
* module/system/vm/debug.scm (debug-pre-unwind-handler): Narrow two
frames instead of stack-reffing past one. The second frame is
necessary, now that make-stack itself is on the stack.
* module/system/vm/debug.scm (print-frames): Clean up a bit, reverting
part of the previous change. (The problem was that in the else branch
of the conditional, it didn't consume an arg.)
In the future I would like to preserve the clean look of the
backtraces. It's easier to read that way.