1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-05 23:20:38 +02:00
Commit graph

14736 commits

Author SHA1 Message Date
Ludovic Courtès
3474222a65 Use #f' for addrinfo:canonname' when it wasn't supplied by getaddrinfo(3).
* libguile/net_db.c (scm_from_addrinfo): Use `#f' when `ai_canonname'
  isn't set.
2010-02-15 18:42:34 +01:00
Ludovic Courtès
25bc75c431 Fix `getaddrinfo' tests.
Thanks to Ken Raeburn.

* test-suite/tests/net-db.test ("getaddrinfo")["port 80"]: Fix bogus
  check of `addrinfo:flags' (POSIX says that the "contents of the
  ai_flags field of the returned structures are undefined.").
  ("wrong service name"): Accept `EAI_NONAME' as a valid error code.
2010-02-15 16:10:01 +01:00
Ludovic Courtès
2fe5eb561c Make the `getaddrinfo' "no name" test more robust.
* test-suite/tests/net-db.test ("getaddrinfo")["no name"]: Check for
  `EAI_EAGAIN' too.
2010-02-15 00:43:20 +01:00
Ludovic Courtès
40ff484d80 Add missing Gnulib files; update `.gitignore'.
This files were missing from commit
61cd9dc907 ("Use Gnulib's `getaddrinfo'
module.").
2010-02-14 22:37:39 +01:00
Ludovic Courtès
55ae00ea73 Add `getaddrinfo' and related procedures.
* libguile/net_db.c (sym_getaddrinfo_error, sym_ai_passive,
  sym_ai_canonname, sym_ai_numerichost, sym_ai_numericserv,
  sym_ai_v4mapped, sym_ai_all, sym_ai_addrconfig, sym_eai_badflags,
  sym_eai_noname, sym_eai_again, sym_eai_fail, sym_eai_family,
  sym_eai_socktype, sym_eai_service, sym_eai_memory, sym_eai_system,
  sym_eai_overflow, sym_eai_nodata, sym_eai_addrfamily,
  sym_eai_inprogress, sym_eai_canceled, sym_eai_notcanceled,
  sym_eai_alldone, sym_eai_intr, sym_eai_idn_encode): New variables.
  (scm_from_addrinfo, scm_getaddrinfo, scm_gai_strerror): New functions.

* libguile/net_db.h (scm_getaddrinfo, scm_gai_strerror): New functions.

* module/ice-9/networking.scm (addrinfo:flags, addrinfo:fam,
  addrinfo:socktype, addrinfo:protocol, addrinfo:addr,
  addrinfo:canonname): New procedures.

* test-suite/tests/net-db.test: New file.

* test-suite/Makefile.am (SCM_TESTS): Add `tests/net-db.test'.

* doc/ref/posix.texi (Network Databases)[getaddrinfo]: New subsection.
  [The Host Database]: Suggest using `getaddrinfo'.
2010-02-14 20:56:47 +01:00
Ludovic Courtès
61cd9dc907 Use Gnulib's `getaddrinfo' module.
* m4/gnulib-cache.m4: Add `getaddrinfo'.

* libguile/Makefile.am (libguile_la_LDFLAGS): Add `$(GETADDRINFO_LIB)
  $(HOSTENT_LIB) $(SERVENT_LIB)'.
2010-02-14 17:06:13 +01:00
Thien-Thi Nguyen
60b6a84f0f Document trailing whitespace policy.
* HACKING (Coding standards): Delete trailing whitespace.
Add blurb documenting trailing whitespace policy.

Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2010-02-13 23:51:07 +01:00
Ludovic Courtès
4adf9a7e27 Document the maximum number of arguments for a subr.
* doc/ref/api-procedures.texi (Primitive Procedures): Specify the
  maximum number of arguments.  Patch by guign@mails.selgrad.org.
2010-02-13 23:50:06 +01:00
Ludovic Courtès
acbccb0c83 Reinstate `scm_protects', for backward compatibility.
Partly reverts e7efe8e793 ("decruftify
scm_sys_protects").

* libguile/gc.c (protects): Rename to...
  (scm_protects): ... this.

* libguile/gc.h (scm_protects): Add declaration.
2010-02-13 19:33:51 +01:00
Ludovic Courtès
524aa8ae68 Fix documentation of the string->utf' and utf->string' functions.
* doc/ref/api-data.texi (Bytevectors as Strings): Describe optional
  parameter of `string->utf{16,32}' and `utf{16,32}->string'.
2010-02-10 00:40:01 +01:00
Ludovic Courtès
dad6817f7d Use the R6RS I/O API in `write-bytecode'.
* module/language/assembly/compile-bytecode.scm
  (write-bytecode)[u32-bv]: New variable.
  [write-char, write-uint16-be, write-uint16-le, write-uint32-le]:
  Remove.
  [write-string, write-uint32-be, write-uint32, write-wide-string,
  write-bytevector]: Rewrite using the `(rnrs io ports)' API.
  [write-uint24-be]: Rename to...
  [write-int24-be]: ... this.  Use `(rnrs io ports)' API.  Callers
  updated.
  [write-uint16]: Remove.
2010-02-10 00:40:01 +01:00
Ludovic Courtès
bde92e6b3b Change `write-bytecode' to accept a bytevector.
* module/language/assembly/compile-bytecode.scm (write-bytecode):
  Replace the WRITE-BYTE and GET-ADDR parameters with PORT.  New ADDRESS
  and EMIT-OPCODE? parameters.  Callers updated.
  [write-byte, get-addr]: New procedures.
  Adjust to write to PORT.
  (compile-bytecode): Update accordingly.

* test-suite/tests/asm-to-bytecode.test (munge-bytecode): Return a
  bytevector instead of a u8vector.
  (comp-test): Deal with bytevectors.
2010-02-10 00:40:01 +01:00
Ludovic Courtès
0c368d2b28 vlist: Slightly improve readability and consistency.
* module/ice-9/vlist.scm (define-inline): Fix case with non-singleton
  body.
  (make-vhash-assoc): Remove.  Change to...
  (%vhash-assoc): ... this, using `define-inline'.
2010-02-10 00:40:01 +01:00
Andy Wingo
d8873dfe47 continuations return multiple values on the stack
* libguile/vm.h (struct scm_vm_cont): Instead of saving the "IP", save
  "RA" and "MVRA". That is, save singly-valued and multiply-valued
  return addresses, so that we can return multiple values on the stack.
  (scm_i_vm_reinstate_continuation): Remove.
* libguile/vm.c (vm_capture_continuation): Rename from capture_vm_cont,
  and change the prototype so we can capture the RA and MVRA, and so
  that tail calls to call/cc can capture a continuation without the
  call/cc application frame.
  (vm_return_to_continuation): Rename from reinstate_vm_cont, and take
  arguments to return to the continuation. Handles returning to single
  or multiple-value RA.
  (scm_i_vm_capture_continuation): Change to invoke
  vm_capture_continuation. Kept around for the benefit of make-stack.

* libguile/vm-i-system.c (continuation-call): Handle reinstatement of
  the VM stack, with arguments.
  (call/cc, tail-call/cc): Adapt to new vm_capture_continuation
  prototype. tail-call/cc captures tail continuations.

* libguile/stacks.c (scm_make_stack): Update for scm_vm_cont structure
  change.

* libguile/continuations.h (struct scm_contregs): Remove throw_value
  member, which was used to return a value to a continuation.
  (scm_i_check_continuation): New internal function, checks that a
  continuation may be reinstated.
  (scm_i_reinstate_continuation): Replaces scm_i_continuation_call; just
  reinstates the C stack.
  (scm_i_contregs_vm, scm_i_contregs_vm_cont): New internal accessors.
* libguile/continuations.c (scm_i_make_continuation): Return
  SCM_UNDEFINED if we are returning again.
  (grow_stack, copy_stack_and_call, scm_dynthrow): Remove extra arg, as
  vm opcodes handle value returns.
  (copy_stack): No need to instate VM continuation.
  (scm_i_reinstate_continuation): Adapt.
2010-02-08 22:59:25 +01:00
Andy Wingo
269479e31f scm_i_make_continuation takes vm and vm_cont args explicitly
* libguile/continuations.h:
* libguile/continuations.c (scm_i_make_continuation): Take VM and VM
  continuation arguments as well; I'm not convinced that saving all VM
  continuations was the right thing, and in any case we only ever saved
  the latest. Running a new VM should create a continuation barrier.

* libguile/stacks.c (scm_make_stack):
* libguile/vm-i-system.c (call/cc, tail-call/cc): Adapt callers.

* libguile/vm.h (scm_i_vm_capture_continuation)
  (scm_i_vm_reinstate_continuation): Change to be internal, and to only
  capture and reinstate continuations for a particular VM.
2010-02-08 13:35:42 +01:00
Andy Wingo
997659f898 make scm_make_continuation internal
* libguile/continuations.h:
* libguile/continuations.c (scm_i_make_continuation): Change from
  scm_make_continuation, and make internal.

* libguile/vm-i-system.c (call/cc, tail-call/cc): Adapt callers.

* test-suite/standalone/test-unwind.c (check_cont_body): Adapt a test.

* doc/ref/api-control.texi (Continuations): Update docs.
2010-02-08 13:35:06 +01:00
Andy Wingo
babfc7b2c3 eval.c uses scm_i_call_with_current_continuation
* libguile/continuations.h
* libguile/continuations.c (scm_i_call_with_current_continuation): New
  internal function. Not exported because I'm not sure whether or not
  this should have a continuation barrier in the future. Uses a
  hand-coded VM procedure.

* libguile/eval.c (eval): Use scm_i_call_with_current_continuation.
2010-02-08 13:34:26 +01:00
Andy Wingo
1d1cae0e2e continuations are vm procedures
* libguile/vm-i-system.c (continuation-call): New op, like subr-call or
  foreign-call, but for continuations.

* libguile/continuations.h: Add scm_i_continuation_call internal
  declaration.
  (SCM_CONTINUATIONP): Reimplement in terms of
  SCM_PROGRAM_IS_CONTINUATION.
  (scm_tc16_continuation, SCM_CONTREGS, SCM_CONTINUATION_LENGTH)
  (SCM_SET_CONTINUATION_LENGTH, SCM_JMPBUF, SCM_DYNENV, SCM_THROW_VALUE)
  (SCM_CONTINUATION_ROOT, SCM_DFRAME): Remove these from the exposed
  API.
  (scm_i_continuation_to_frame): New internal declaration.
* libguile/continuations.c
* libguile/continuations.c: Add trickery like in foreign.c, smob.c, and
  gsubr.c, so that we can make procedural trampolines for continuations.
  (scm_i_continuation_to_frame): New internal function, from stacks.c.

* libguile/programs.h (SCM_F_PROGRAM_IS_CONTINUATION)
  (SCM_PROGRAM_IS_CONTINUATION): Add a flag for programs that are
  continuations. Probably should add flags for the other trampoline
  types too.
* libguile/programs.c (scm_i_program_print): Print continuations as
  before.

* libguile/stacks.c (scm_stack_id, scm_make_stack): Use
  scm_i_continuation_to_frame in the continuation case.
2010-02-08 13:00:54 +01:00
Andy Wingo
217167c6b2 push a prompt handler value even in the inline-handler case
* module/language/tree-il/compile-glil.scm (flatten): Push a handler
  value even in the inline-handler case, to make prompt's interface more
  uniform, and also to correspond to the existing VM implementation.
2010-02-08 12:38:19 +01:00
Andy Wingo
adaf86ec49 connect a few more wires to promptenstein
* libguile/tags.h (scm_tc7_prompt): Allocate a tc7 for prompt objects.

* libguile/control.h (SCM_F_PROMPT_INLINE, SCM_F_PROMPT_ESCAPE)
  (SCM_PROMPT_P, SCM_PROMPT_FLAGS, SCM_PROMPT_INLINE_P)
  (SCM_PROMPT_ESCAPE_P, SCM_PROMPT_TAG, SCM_PROMPT_REGISTERS)
  (SCM_PROMPT_DYNENV, SCM_PROMPT_HANDLER)
  (SCM_PROMPT_PRE_UNWIND_HANDLER, SCM_PROMPT_SETJMP)
  (struct scm_prompt_registers):
* libguile/control.c (scm_c_make_prompt): Flesh out a simple prompts
  implementation.

* libguile/vm-i-system.c (prompt): Wire up the implementation.
* libguile/vm.c: Add a needed #include.
2010-02-08 12:38:18 +01:00
Michael Gran
69f90b0b05 Optimize reader by preferring stack-allocated buffers
* libguile/read.c (read_token): now takes a C buffer instead of a SCM.
  string.  All callers changed.
  (read_complete_token): now takes C buffers, not SCM strings.  No longer
  does port position updates or encoding processing.  All callers changed.
  (scm_read_number, scm_read_mixed_case_symbol, scm_read_number_and_radix)
  (scm_read_character): Do port updates and string processing no longer
  done by read_complete_token. Some reordering for optimization.
2010-02-02 20:33:41 -08:00
Ludovic Courtès
a670e67211 Use vhashes in `unused-variable-analysis'.
* module/language/tree-il/analyze.scm (unused-variable-analysis): Use
  vhashes instead of alists/lists.
2010-02-03 00:03:34 +01:00
Ludovic Courtès
df685ee46b Use vhashes in `arity-analysis'.
* module/language/tree-il/analyze.scm (arity-analysis): Use vhashes
  instead of alists.
2010-02-03 00:03:16 +01:00
Ludovic Courtès
04ea6fb504 Use vhashes in `unbound-variable-analysis'.
* module/language/tree-il/analyze.scm (unbound-variable-analysis): Use
  vhashes instead of alists/lists.
2010-02-03 00:03:02 +01:00
Ludovic Courtès
5cbf2e1d7b Use vhashes in `unused-toplevel-analysis'.
* module/language/tree-il/analyze.scm (graph-reachable-nodes): Add
  REACHABLE argument.  Update to use vhash instead of alists or lists.
  (graph-reachable-nodes*): Adjust accordingly.
  (partition*): New function.
  (unused-toplevel-analysis): Adjust to use vhash instead of alists or
  lists.
2010-02-03 00:02:43 +01:00
Ludovic Courtès
22ec6a31ed Add `(ice-9 vlist)'.
* module/ice-9/vlist.scm, test-suite/tests/vlist.test,
  benchmark-suite/benchmarks/vlists.bm: New files.

* module/Makefile.am (ICE_9_SOURCES): Add `vlist.scm'.

* test-suite/Makefile.am (SCM_TESTS): Add `tests/vlist.test'.

* benchmark-suite/Makefile.am (SCM_BENCHMARKS): Add
  `benchmarks/vlists.bm'.

* doc/ref/api-compound.texi (VLists, VHashes): New nodes.
2010-02-03 00:02:14 +01:00
Ludovic Courtès
30a700c8c1 Inline SRFI-9 constructors too.
* module/srfi/srfi-9.scm (define-record-type)[constructor]: Use
  `define-inlinable' instead of `define'.

* test-suite/lib.scm (exception:syntax-pattern-unmatched): New variable.

* test-suite/tests/srfi-9.test ("constructor")["foo 0 args (inline)",
  "foo 2 args (inline)"]: New tests.
  ["foo 0 args", "foo 2 args"]: Adjust to constructor inlining.

* testsuite/t-records.scm: Remove wrong-arg-count case.
2010-02-01 00:25:51 +01:00
Ludovic Courtès
61cbfff509 SRFI-9: Fix `define-inlinable'.
* module/srfi/srfi-9.scm (define-inlinable): Fix the catch-all case of
  the generated macro.
2010-02-01 00:25:51 +01:00
Andy Wingo
9b2a2a391a add (ice-9 control)
* module/language/tree-il/primitives.scm (define-primitive-expander):
  Allow quoted datums. Allow all self-evaluating expressions to be
  constants.
  (prompt, control): Add primitive expanders to turn these into @prompt
  and @control.

* module/ice-9/control.scm: New module, for delimited continuation
  operators.

* module/Makefile.am: Add.
2010-01-31 20:40:24 +01:00
Andy Wingo
b9c100d008 add @control and @prompt stub primitives
* libguile/Makefile.am:
* libguile/control.c:
* libguile/control.h:
* libguile/init.c: Add stub @control and @prompt primitives, for use
  when bootstrapping (ice-9 control).
2010-01-31 20:40:24 +01:00
Andy Wingo
9b7ca73cfe GLIL and assembly support for prompt compilation
* module/language/glil/compile-assembly.scm (glil->assembly): Compile
  <glil-prompt> appropriately.

* module/language/assembly/disassemble.scm (code-annotation):
* module/language/assembly/decompile-bytecode.scm (decode-load-program):
* module/language/assembly/compile-bytecode.scm (write-bytecode):
  Assemble and disassemble `prompt' appropriately.
2010-01-31 20:40:24 +01:00
Andy Wingo
c6601f1077 tree-il -> glil compilation of prompt, dynamic-wind, control
* module/language/tree-il/compile-glil.scm (flatten): Compile <prompt>,
  <dynamic-wind>, and <control>.
2010-01-31 20:40:24 +01:00
Andy Wingo
2d9260d12c add return/nvalues
* libguile/vm-i-system.c (return/nvalues): New instruction, like
  call/nargs.
2010-01-31 20:40:24 +01:00
Andy Wingo
88fed05d03 GLIL support for <prompt>
* module/language/glil.scm (<glil>): Add <glil-prompt>, with
  handler-label and escape-only? fields.
2010-01-31 20:40:23 +01:00
Andy Wingo
282d128cb4 tree-il analyzer and inliner handle <prompt>
* module/language/tree-il/analyze.scm (analyze-lexicals): Add cases for
  <prompt>, <dynamic-wind>, and <control>. If a continuation is not
  referenced in the body of a prompt handler, mark the prompt as
  escape-only.
* module/language/tree-il/inline.scm (inline!): Inline the handler of a
  prompt if it is a simple lambda.
2010-01-31 20:40:23 +01:00
Andy Wingo
1bf78495e9 dynamic-wind compilation to VM ops
* module/language/tree-il/primitives.scm: Resolve calls to dynamic-wind
  to <dynamic-wind>, thereby inlining the dynwind to VM ops, and
  allowing inline allocation of the body thunk.
2010-01-31 20:40:23 +01:00
Andy Wingo
1c297a3850 new tree-il for prompt, control, and dynamic-wind
* module/language/tree-il.scm: Initial tree-il support for <prompt>,
  <control>, and <dynamic-wind>.
2010-01-31 20:40:23 +01:00
Andy Wingo
4f66bcdeff initial VM support for delimited continuations and dynamic-wind
* libguile/vm-i-system.c (prompt, wind, throw, unwind):
  New instructions, for implementing dynamic-wind and delimited
  continuations.
* libguile/vm.c: Add some stub support for the new instructions.
* libguile/vm-engine.c: Some new error conditions.
2010-01-31 20:40:21 +01:00
Andy Wingo
17d819d4c4 add a test for ffi and pointers
* test-suite/standalone/test-ffi:
* test-suite/standalone/test-ffi-lib.c: Add a pointer test.
2010-01-27 22:25:29 +01:00
Andy Wingo
3435f3c07c add simple foreign finalization, and pointer support
* libguile/foreign.h:
* libguile/foreign.c (scm_foreign_set_finalizer_x): New function, for a
  limited form of finalization (like `free').
  (scm_alignof, scm_sizeof, parse_ffi_type, fill_ffi_type): For the
  purposes of make-foreign-function, treat '* (the asterisk symbol) as a
  pointer.

* module/system/foreign.scm: Export foreign-set-finalizer!.
2010-01-27 22:12:58 +01:00
Andy Wingo
663212bbc6 statprof bugfixes
* module/statprof.scm (get-call-data): For closures, get call data by
  the program's objcode.
  (statprof-start, statprof-stop): Fix bug in which all statprof runs
  were enabling the apply hook regardless of the setting of
  #:count-calls?. The result was distorted timings, where procedure
  calls were unfairly penalized.
  (procedure=?): Streamline.
2010-01-27 21:52:05 +01:00
Andy Wingo
d27a7811db inline calls to variable-bound?
* module/language/tree-il/compile-glil.scm (*primcall-ops*):
* module/language/tree-il/primitives.scm
  (*interesting-primitive-names*): Actually resolve calls to
  `variable-bound?' to the opcode that we have for it.
2010-01-27 21:48:06 +01:00
Andy Wingo
0515661235 fix to variable-bound? instruction prototype
* libguile/vm-i-system.c (variable-bound?): Correctly declare as popping
  one item.
2010-01-27 21:47:01 +01:00
Andy Wingo
80e22004bd remove incremental NEWS entries in preparation for 1.9.8
* NEWS
2010-01-27 21:45:47 +01:00
Andy Wingo
c612ed59ab add a test for foreign functions taking struct args
* test-suite/standalone/test-ffi (f-sum-struct):
* test-suite/standalone/test-ffi-lib.c (test_ffi_sum_struct): Add a
  struct test. Wheee....
2010-01-26 22:56:42 +01:00
Andy Wingo
75383ddbd7 turn asserts into exceptions in foreign.c
* libguile/foreign.c (scm_foreign_ref, scm_foreign_set_x)
  (scm_i_foreign_print, fill_ffi_type, cif_to_procedure, unpack): Turn a
  number of asserts into proper errors.
2010-01-26 22:56:42 +01:00
Andy Wingo
70ea39f70f add make-c-struct, parse-c-struct
* module/system/foreign.scm: Export alignof and sizeof.
  (make-c-struct, parse-c-struct): New public functions.
2010-01-26 22:56:42 +01:00
Andy Wingo
9a396cbdbe add alignof' and sizeof' Scheme functions
* libguile/foreign.h:
* libguile/foreign.c (scm_alignof, scm_sizeof): New functions.
2010-01-26 22:56:42 +01:00
Andy Wingo
37371ea1ba add ffi tests
* test-suite/standalone/Makefile.am:
* test-suite/standalone/test-ffi:
* test-suite/standalone/test-ffi-lib.c: Add some tests for the ffi.
2010-01-26 22:56:42 +01:00
Andy Wingo
4d9130a5b7 implement foreign-call
* libguile/foreign.h:
* libguile/foreign.c (scm_i_foreign_call): New internal function,
  actually implementing foreign calls. Untested.

* libguile/vm-i-system.c (foreign-call): Wire up the call to
  scm_i_foreign_call.
2010-01-26 22:56:41 +01:00