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

7681 commits

Author SHA1 Message Date
Ludovic Courtès
3318635666 Add `procedure->pointer' to the FFI.
* libguile/foreign.c (make_cif): New procedure, with code formerly in
  `scm_make_foreign_function'.
  (scm_make_foreign_function): Use it.
  (invoke_closure, scm_procedure_to_pointer)[FFI_CLOSURES]: New
  functions.

* libguile/foreign.h (scm_procedure_to_pointer): New declaration.

* module/system/foreign.scm: Export `procedure->pointer' when available.

* test-suite/standalone/test-ffi (f-callback-1, f-callback-2): New
  procedures and related tests.

* test-suite/standalone/test-ffi-lib.c (test_ffi_callback_1,
  test_ffi_callback_2): New functions.

* test-suite/tests/foreign.test ("procedure->pointer"): New test prefix.

* doc/ref/api-foreign.texi (Dynamic FFI): Document `procedure->pointer'.
2010-09-03 15:26:37 +02:00
Andy Wingo
3be8727983 module-local-variable optimization
* libguile/modules.c (scm_module_local_variable): An optimization in the
  common no-module-binder case.
2010-09-02 21:31:55 -07:00
Ludovic Courtès
f57fdf07d6 Fix memory leak in lock-mutex' (aka. scm_lock_mutex'.)
The memory leak is trivially reproducible with:

  (define m (make-mutex))
  (let loop () (lock-mutex m) (unlock-mutex m) (loop))

or similarly with:

  (define p (delay (+ 1 2)))
  (let loop () (force p) (loop))

since `force' acquires P's mutex.

It could also lead to premature release of a thread waiting in
`fat_mutex_lock' when a former owner's `do_thread_exit' is run.

* libguile/threads.c (fat_mutex_unlock): When `m->level' becomes 0,
  remove MUTEX from `t->mutexes'.
  (fat_mutex_lock): Update comment above the `t->mutexes' assignment.
  (do_thread_exit): Add an assertion making sure that each mutex in
  `t->mutexes' is owned by T.
2010-09-02 14:42:14 +02:00
Ludovic Courtès
d31ae2c363 Avoid calls to scm_current_thread' in fat_mutex_unlock'.
* libguile/threads.c (fat_mutex_unlock): Use `t->handle' instead of
  calling `scm_current_thread'.
2010-09-02 11:22:01 +02:00
Ludovic Courtès
5335850dbf Rewrite fport_flush' using Gnulib's full_write'.
* libguile/fports.c (fport_flush): Rewrite using `full_write'.
2010-09-01 15:04:59 +02:00
Andy Wingo
0142d376b8 bitvector work
* test-suite/Makefile.am:
* test-suite/tests/bitvectors.test: Add a new file to test bitvectors.

* libguile/uniform.c (scm_c_uniform_vector_length): Don't call
  scm_uniform_vector_elements, as we don't need to be able to access the
  elements with pointers to bytes. Fixes uniform-vector-length on
  bitvectors.
2010-08-29 20:48:32 -07:00
Andy Wingo
a2220d7ea4 add flag to vtables to indicate that their layout is valid
* libguile/struct.h (SCM_VTABLE_FLAG_VALIDATED): New flag, indicates
  that the layout of a vtable has been validated. The other flags have
  been renumbered.

* libguile/struct.c (scm_i_struct_inherit_vtable_magic): Set the
  VALIDATED flag if everything goes through.
  (scm_struct_vtable_p): If the struct should be a vtable but isn't
  validated, throw an error.
  (scm_make_vtable_vtable): Validate the incoming user_fields layout
  bit. Set the VALIDATED flag.
  (scm_c_make_structv): Add a comment about the case in which we delay
  scm_i_struct_inherit_vtable_magic.
2010-08-29 11:41:42 -07:00
Andy Wingo
877514dab0 threadsafety in deprecation, extensions
* libguile/deprecation.c (scm_c_issue_deprecation_warning):
* libguile/extensions.c (scm_c_register_extension, load_extension): Add
  locks around global data structures.
2010-08-28 12:15:53 -07:00
Andy Wingo
f5e854388b threadsafe object properties
* libguile/objprop.c: Add locking around the properties weak hash, to
  avoid corrupting the whash.
2010-08-28 11:57:51 -07:00
Andy Wingo
34cbb05331 Revert "[build] Rewrite guile-func-name-check in Scheme, adding features."
This reverts commit 6832604efa. Not only
does this fail on a fresh build due to a lack of "guile", but even if it
did have its Makefile fixed, it would take too long to run, because the
rest of Guile isn't compiled.

The right thing is to avoid invoking Guile until after at least psyntax
and boot-9 have been compiled.

This commit can be reinstated if we move doc snarfing to a phase that
happens after module/ is compiled.
2010-08-27 13:05:23 -07:00
Ludovic Courtès
93003b16b0 Assorted `syntax-check' fixes.
* doc/ref/Makefile.am ($(snarf_doc).am): Untabify.

* libguile/eval.c: Remove unnecessary <assert.h> inclusion.

* .x-sc_m4_quote_check: Update.

* libguile/error.c (scm_error_scm): Use `EXIT_FAILURE' instead of 1.
* libguile/init.c (fixconfig, scm_boot_guile): Likewise.
* libguile/null-threads.h (scm_i_pthread_exit): Likewise.
* libguile/script.c (scm_compile_shell_switches): Likewise.
* test-suite/standalone/test-conversion.c: Likewise.
* test-suite/standalone/test-list.c: Likewise.
* test-suite/standalone/test-unwind.c: Likewise.

* libguile/async.c: Remove unnecessary inclusion of <signal.h>.

* NEWS: "filesystem" -> "file system".
* doc/ref/r6rs.texi: Ditto.

* cfg.mk (local-checks-to-skip): New variable.

* .x-sc_m4_quote_check, .x-sc_obsolete_symbols, .x-sc_program_name,
  .x-sc_prohibit_atoi_atof, .x-sc_prohibit_magic_number_exit: New
  files.

* .gitignore: Update.
2010-08-27 18:59:42 +02:00
Thien-Thi Nguyen
6832604efa [build] Rewrite guile-func-name-check in Scheme, adding features.
* libguile/guile-func-name-check: Rewrite in Scheme; add inhibition
  directives, string-literal handling, failureful exit on error.
* libguile/guile-snarf-docs.in: Use ‘@top_builddir@/meta/guile’.
* libguile/pairs.c: Add guile-func-name-check inhibition directive.
2010-08-26 23:34:49 +02:00
Thien-Thi Nguyen
e6d67f1e69 [build] Refine libguile/*.doc snarfing.
* libguile/guile-snarf-docs.in: Rewrite to incorporate all
  three phases of snarfing: func-name check, cpp, tokenization.
  Also, require/check new command-line syntax.
* libguile/Makefile.am (AM_V_FILTER): Delete var.
  (AM_V_FILTER_, AM_V_FILTER_0): Likewise.
  (.c.doc): Run ./guile-snarf-docs; use new command-line syntax.
2010-08-26 18:36:48 +02:00
Andy Wingo
d5a1a8cd1b consolidate sitedir definition
* configure.ac (sitedir): Fix definition to point to the
  version-specific sitedir.

* libguile/Makefile.am (libpath.h): Take sitedir definition from
  configure.ac.
2010-08-25 10:24:27 -04:00
Thien-Thi Nguyen
bfebf099d9 [build] Use AM_SILENT_RULES for generating cpp-E.c, cpp-SIG.c.
* libguile/Makefile.am (.syms.c): Prefix first command
  with $(AM_V_GEN); unconditionally silence second command.
2010-08-19 11:15:08 +02:00
Andy Wingo
4b02bf47f4 objcodes.c comments
* libguile/objcodes.c: Comments from Noah Lavine
2010-08-18 23:00:42 -07:00
Noah Lavine
9a690dfb45 Whitespace fix
Add a space in libguile/objcodes.c to comply with the GNU Coding Standards.
2010-08-18 23:00:42 -07:00
Thien-Thi Nguyen
319b53dd1c [build] Fix sed portability bug: Don't use '\n' in sed script.
Regression introduced 2010-07-22, "[build] Overhaul
<errno.h>, <signal.h> cpp symbol extraction/checking".
See: <http://autobuild.josefsson.org/guile/log-201008181002653292000.txt>

* libguile/Makefile.am (.syms.c): Convert
  one-liner sed script to while-read-echo loop.
2010-08-18 19:48:12 +02:00
Thien-Thi Nguyen
b405cdb4c5 [build] Create libguile/version.h using the configure script.
* configure.ac (AC_CONFIG_FILES): Add libguile/version.h.

* libguile/Makefile.am (version.h): Delete target.
  (EXTRA_DIST): Remove version.h.in.
  (BUILT_SOURCES): Remove version.h.
  (MOSTLYCLEANFILES): Remove version.h, version.h.tmp.
* libguile/version.h.in (SCM_MAJOR_VERSION): Use conventional
  @VAR@ instead of @-VAR-@ for ‘GUILE_MAJOR_VERSION’.
  (SCM_MINOR_VERSION, SCM_MICRO_VERSION, SCM_EFFECTIVE_VERSION): Likewise
  for ‘GUILE_MINOR_VERSION’, ‘GUILE_MICRO_VERSION’, ‘GUILE_EFFECTIVE_VERSION’.
2010-08-18 19:48:12 +02:00
Andy Wingo
833263ec4a further discouraged excision
* libguile/gen-scmconfig.h.in: Remove a DISCOURAGED define.
2010-08-16 21:36:14 -07:00
Andy Wingo
7545ddd42a a number of doc fixes
* doc/ref/api-control.texi (Handling Errors): Update docs for
  display-error.

* libguile/backtrace.h (scm_i_display_error): Change prototype to
  s/stack/frame/.
* libguile/throw.c (handler_message): Change invocation of
  scm_i_display_error to pass a frame.

* doc/ref/api-deprecated.texi (Deprecation): Update wording.

* doc/ref/api-evaluation.texi (Local Evaluation): Remove section on
  local-eval.

* doc/ref/api-macros.texi: Fix a couple typos.

* doc/ref/api-memory.texi (Objects): Remove terrible section.
* doc/ref/api-procedures.texi (Procedure Properties): Remove docs for
  closure?.
  (Compiled Procedures): Update wording.

* doc/ref/guile.texi (API Reference): Remove reference to "Objects".
2010-08-16 21:36:14 -07:00
Andy Wingo
efa360afc3 @apply for multiple args in the boot memoizer
* libguile/memoize.c (m_apply): Fix for multiple arguments, as in
  (@apply proc foo bar baz).
2010-08-16 21:36:14 -07:00
Ludovic Courtès
fa2a89a6d1 Add string->pointer' and pointer->string' to the FFI.
* libguile/foreign.c (scm_string_to_pointer, scm_pointer_to_string): New
  functions.

* libguile/foreign.h (scm_string_to_pointer, scm_pointer_to_string): New
  declarations.

* module/system/foreign.scm: Export `string->pointer' and
  `pointer->string'.

* test-suite/tests/foreign.test ("pointer<->string"): New test prefix.

* doc/ref/api-foreign.texi (Void Pointers and Byte Access): Add
  `string->pointer' and `pointer->string'.
2010-08-15 16:43:39 +02:00
Andy Wingo
8a4ed2dd34 remove "discouraged" infrastructure
* libguile/discouraged.h: Remove.

* libguile/deprecated.c (scm_internal_select, scm_thread_sleep)
  (scm_thread_usleep): Deprecate formerly discouraged names.

* libguile/eq.h (SCM_EQ_P):
* libguile/pairs.h (SCM_NULLP, SCM_NNULLP, SCM_CONSP, SCM_NCONSP):
* libguile/boolean.h (SCM_FALSEP, SCM_NFALSEP, SCM_BOOLP, SCM_BOOL):
  (SCM_NEGATE_BOOL, SCM_BOOL_NOT): Undiscourage these names, because I'm
  not sure deprecating them will do any good.

* libguile.h:
* libguile/gen-scmconfig.c:
* libguile/numbers.c:
* libguile/init.c:
* libguile/Makefile.am:
* configure.ac: Remove bits that referenced discouraged.h, and dealt
  with the "discouraging" system.
2010-08-08 14:15:47 +02:00
Andy Wingo
220058a835 deprecated all discouraged functions
* libguile/Makefile.am:
* libguile/discouraged.c: Remove discouraged.c.

* libguile/deprecated.c:
* libguile/deprecated.h:
* libguile/discouraged.h: All functions and declarations moved from
  discouraged.[ch] to deprecated.[ch], adding deprecation warnings.

* libguile/init.c: Remove discouraged init.

* libguile/numbers.c (scm_num2float, scm_num2double): Deprecate.

* test-suite/standalone/test-num2integral.c: Port to modern API.
2010-08-08 13:48:35 +02:00
Andy Wingo
e5f7f675d0 add docs for extensiondir; misc other fixes
* libguile/foreign.c (scm_i_pointer_print): Print in hexadecimal.

* doc/ref/api-foreign.texi (Modules and Extensions): Update for
  "extensiondir", and a discussion of Guile versions.
  (Foreign Variables): Fix discussion of types.
  (Void Pointers and Byte Access): Fix typo.
2010-08-06 13:43:47 +02:00
Andy Wingo
ba270f8c26 remove type discusison from dynamic-pointer docstring
* doc/ref/api-foreign.texi:
* libguile/dynl.c (scm_dynamic_pointer): Remove discussion of types from
  the docstring.
2010-08-06 13:41:58 +02:00
Andy Wingo
869bfe86af s/extensionsdir/extensiondir/
* libguile/Makefile.am (libpath.h): Change "extensionsdir" to
  "extensiondir".
* meta/guile-2.0.pc.in (extensiondir): Likewise.
2010-08-06 13:15:58 +02:00
Andy Wingo
bc325e763f %site-dir is specific to the effective version
* libguile/load.h:
* libguile/load.c (scm_sys_global_site_dir): New API, is what %site-dir
  used to be.
  (scm_sys_site_dir): Changed to be a version-specific dir.
  (scm_init_load_path): Search the version-specific sitedir before the
  global one.

* libguile/Makefile.am (libpath.h): Update SCM_SITE_DIR and
  SCM_GLOBAL_SITE_DIR, as appropriate.
2010-08-06 13:15:29 +02:00
Andy Wingo
551b96d294 fix vector-move-right! and vector-move-left!
* libguile/vectors.c (scm_vector_move_left_x, scm_vector_move_right_x):
  Fix some bugs reported by Michael Lucy -- both variants would happily
  write beyond the end, and vector-move-right! didn't increment the
  counter before copying in the reverse direction.

* test-suite/tests/vectors.test ("vector-move-left!"):
  ("vector-move-right!"): Add tests.
2010-08-04 21:48:00 +02:00
Yan Li
f9560a348e Compiling DOT_X_FILES requires version.h
There was a race condition when building Guile since DOT_X_FILES didn't
depend on version.h, which is dynamically generated. Sometimes the
DOT_X_FILES are compiled before the version.h is generated and leads to
build failure. This patch fixed this problem.

Signed-off-by: Yan Li <yan.i.li@intel.com>
2010-08-04 20:07:27 +02:00
Andreas Rottmann
2af6e1351d Fix the range of `random' on 64-bit platforms
For > 32 bit integers still in the fixnum range, scm_random() would
return random numbers with a lower range than specified.

* libguile/random.c (scm_i_mask32): New static inline function.
  (scm_c_random): Use `scm_i_mask32'.
  (scm_c_random64): New function, 64-bit variant of scm_c_random.
  (scm_random): Use `scm_c_random64' instead of forming the 64-bit random
  number in a bogus way.
* libguile/random.h: Added `scm_c_random64'.
2010-08-01 21:53:29 +02:00
Ludovic Courtès
183a2a224b Update the FFI doc.
* doc/ref/api-foreign.texi (Foreign Types): Remove bits about typed
  foreign pointers.  Add `void'.
  (Foreign Variables): Update the doc of `dynamic-pointer' and the
  `numptob' example.  Remove `foreign-set!' and `foreign-ref'.  Add
  `pointer-address', `make-pointer', `%null-pointer', and
  `null-pointer?'
  (Void Pointers and Byte Access): Make it clear that wrapped pointers
  are untyped.  Remove `void' from here.  Replace `foreign->bytevector'
  and `bytevector->foreign' by `pointer->bytevector' and
  `bytevector->pointer'.  Add `dereference-pointer' and the rest of the
  `numptob' example.
  (Dynamic FFI): Update examples.  Remove `%null-pointer' from here.

* libguile/dynl.c (scm_dynamic_pointer): Update docstring.

* libguile/foreign.c (scm_dereference_pointer,
  scm_pointer_to_bytevector): Likewise.

* module/system/foreign.scm (null-pointer?): Add docstring.
2010-07-28 12:24:25 +02:00
Ludovic Courtès
22697acbc9 Remove unused parameter from `bytevector->pointer'.
* libguile/foreign.c (scm_bytevector_to_pointer): Remove unused LEN
  parameter.  Update docstring.
2010-07-28 12:24:25 +02:00
Ludovic Courtès
854aa906b4 Always return `%null-pointer' when creating a NULL pointer with no finalizer.
* libguile/foreign.c (scm_make_pointer): Always call out to
  `scm_from_pointer'.
  (scm_from_pointer): Return NULL_POINTER when PTR and FINALIZER are
  NULL.
2010-07-28 12:24:25 +02:00
Ludovic Courtès
5b46a8c2c8 Use "pointer" instead of "foreign" when dealing with wrapped pointers.
* libguile/foreign.h (scm_t_foreign_finalizer): Rename to...
  (scm_t_pointer_finalizer): ... this.
  (SCM_FOREIGN_P): Rename to...
  (SCM_POINTER_P): this.
  (SCM_VALIDATE_FOREIGN): Rename to...
  (SCM_VALIDATE_POINTER): ... this.
  (SCM_FOREIGN_HAS_FINALIZER): Rename to...
  (SCM_POINTER_HAS_FINALIZER): ... this.
  (scm_take_foreign_pointer): Rename to...
  (scm_from_pointer): ... this.
  (scm_foreign_address): Rename to...
  (scm_pointer_address): ... this.
  (scm_foreign_to_bytevector): Rename to...
  (scm_pointer_to_bytevector): ... this.
  (scm_foreign_set_finalizer_x): Rename to...
  (scm_set_pointer_finalizer_x): ... this.
  (scm_bytevector_to_foreign): Rename to...
  (scm_bytevector_to_pointer): ... this.
  (scm_i_foreign_print): Rename to...
  (scm_i_pointer_print): ... this.

* libguile/foreign.c: Update accordingly.

* libguile/tags.h (scm_tc7_foreign): Rename to...
  (scm_tc7_pointer): ... this.

* libguile/foreign.c, libguile/deprecated.c, libguile/dynl.c,
  libguile/evalext.c, libguile/gc.c, libguile/goops.c, libguile/gsubr.c,
  libguile/gsubr.h, libguile/print.c, libguile/snarf.h,
  libguile/vm-i-system.c, module/system/foreign.scm,
  test-suite/standalone/test-ffi, test-suite/tests/foreign.test: Update
  accordingly.
2010-07-28 12:24:25 +02:00
Andy Wingo
9defb64118 64-bit random fixes
* libguile/random.c (scm_random): Fix generation of inum randoms with
  more than 32 bits.

* libguile/random.h (scm_t_rstate): Fix a comment.
2010-07-27 11:32:40 +02:00
Ludovic Courtès
17fc9efecb Add dereference-pointer' to (system foreign)'.
* libguile/foreign.c (scm_dereference_pointer): New function.

* libguile/foreign.h (scm_dereference_pointer): New declaration.

* module/system/foreign.scm (dereference-pointer): Likewise.

* test-suite/tests/foreign.test
  ("foreign<->bytevector")["dereference-pointer"]: New test.
2010-07-26 19:38:52 +02:00
Ludovic Courtès
d4149a510e Simplify the (system foreign) API.
Suggested by Neil Jerram.

* libguile/foreign.h (SCM_FOREIGN_TYPE, SCM_FOREIGN_VALUE_REF,
  SCM_FOREIGN_VALUE_SET, SCM_FOREIGN_LEN, SCM_FOREIGN_TYPED_P,
  SCM_FOREIGN_VALUE_P, SCM_VALIDATE_FOREIGN_VALUE, scm_foreign_set_x,
  scm_foreign_type): Remove.
  (scm_foreign_ref): Rename to...
  (scm_foreign_address): ... this.
  (scm_take_foreign_pointer): Update.
  (SCM_FOREIGN_POINTER): Remove CTYPE argument.  Update callers.
  (scm_make_pointer): New declaration.

* libguile/foreign.c (scm_to_uintptr, scm_from_uintptr): New macros.
  (scm_make_pointer): New function.
  (scm_take_foreign_pointer): Remove TYPE and LEN arguments.  Update
  callers.
  (scm_foreign_ref): Remove to...
  (scm_foreign_address): ... this.  Remove type-related code.
  (scm_foreign_set_x): Remove.
  (scm_foreign_to_bytevector): Change argument order; make LEN argument
  compulsory.
  (scm_i_foreign_print): Remove type printing.
  (unpack): Remove foreign-type checking.

* libguile/deprecated.c (scm_dynamic_args_call): Update accordingly.

* libguile/dynl.c (scm_dynamic_pointer): Remove the TYPE and LEN
  arguments; update callers.  Update to the new foreign API.

* libguile/dynl.h (scm_dynamic_pointer): Update.

* libguile/gsubr.c (create_gsubr): Update to the new foreign API.

* libguile/gsubr.h (SCM_SUBRF, SCM_SUBR_GENERIC): Ditto.

* libguile/snarf.h (SCM_IMMUTABLE_FOREIGN): Ditto.

* libguile/vm-i-system.c (subr_call): Ditto.

* module/system/foreign.scm (null-pointer?): New procedure.

* test-suite/standalone/test-ffi: Update to the new
  `bytevector->foreign' signature.

* test-suite/tests/foreign.test ("null pointer")["null pointer
  identity", "null-pointer? %null-pointer"]: New tests.
  ["foreign-set! other-null-pointer", "foreign->bytevector
  other-null-pointer"]: Remove.
  ("make-pointer", "foreign<->bytevector"): New test prefixes.
2010-07-26 19:38:52 +02:00
Ludovic Courtès
1af772303b Import unbound variable reports in the VM.
* libguile/vm-engine.c (VM_NAME)[vm_error_unbound]: Add comment.

* libguile/vm-i-system.c (variable_ref): Attempt provide the name of X
  in FINISH_ARGS.
2010-07-26 19:38:52 +02:00
Ludovic Courtès
fefd60ba4b Check for go/scm mtime ordering rather than equality.
* am/guilec (install-data-hook): Remove.
  (guile_install_go_files): New variable.
  ($(guile_install_go_files)): New dependency.

* libguile/load.c (compiled_is_fresh): Check for ordering of STAT_SOURCE
  and STAT_COMPILED, not equality.

* module/ice-9/boot-9.scm (load): Ditto.

* module/system/base/compile.scm (call-with-output-file/atomic): Don't
  set the timestamp of TEMPLATE.
2010-07-26 19:38:52 +02:00
Andy Wingo
a2a95453eb rstates point to rngs
* libguile/random.h (scm_t_rstate): Include the rng in the rstate, so we
  can actually have multiple rngs. Instead of reserved0 / reserved1,
  reserve a double explicitly for scm_c_normal01.
  (scm_c_uniform32): Change to call the rstate's rng.

* libguile/random.c: Change to access an rstate's rng through its rng
  pointer.
  (scm_c_normal01): Instead of a flag and a next double, just check that
  the double is equal to 0.0. Excluding one value shouldn't affect the
  distribution, right?
2010-07-26 16:36:15 +02:00
Andy Wingo
1d454874c1 update docs
* doc/ref/api-data.texi:
* libguile/random.c: Update datum->random-state and random-state->datum
  docs.
2010-07-26 15:12:42 +02:00
Andy Wingo
99a0ee6620 refactor datum->random-state / random-state->datum
* libguile/random.c (scm_t_i_rstate): Move here from random.h, along
  with prototypes for functions
  (scm_i_uniform32, scm_i_init_rstate, scm_i_copy_rstate): Change to
  take a stock scm_t_rstate as an arg, and cast it. This way we don't
  cast the pointers below.
  (scm_i_rstate_from_datum, scm_i_rstate_from_datum): Same and rename
  from scm_i_init_rstate_scm / scm_i_expose_rstate.
  (scm_c_rstate_from_datum): Rename from scm_c_make_rstate_scm.
  (scm_datum_to_random_state, scm_random_state_to_datum): Rename from
  scm_external_to_random_state and scm_random_state_to_external.
  (scm_init_random): Remove casts.

* libguile/random.h (scm_t_rng): Rename init_rstate_scm, expose_rstate
  vmethods to from_datum, to_datum. Remove internal definitions. Rename
  to scm_c_rstate_from_datum, and provide scm_random_state_to_datum and
  scm_datum_to_random_state.
2010-07-26 15:01:02 +02:00
Andy Wingo
b606ff6af9 low-level RNG interfaces deal in scm_t_uint32, not unsigned long
* libguile/random.h (scm_t_rng): random_bits returns a scm_t_uint32.
  (scm_i_uniform32, scm_t_i_rstate): Internal RNG returns a
  scm_t_uint32, as advertised, instead of unsigned long.
  (scm_c_random): Return a scm_t_uint32 instead of an unsigned long.

* libguile/random.c (scm_i_uniform32, scm_i_init_rstate_scm):
  (scm_i_expose_rstate, scm_c_random, scm_c_random_bignum, scm_random)
  (scm_init_random): Adapt types to match implementation.
2010-07-26 15:01:02 +02:00
Andy Wingo
4ca4826997 remove SCM_HAVE_T_INT64, SCM_HAVE_T_UINT64
* libguile/__scm.h:
* libguile/numbers.h:
* libguile/random.c:
* libguile/srfi-4.c:
* libguile/srfi-4.h:
* libguile/numbers.c:
* test-suite/standalone/test-conversion.c:
* libguile/gen-scmconfig.c: As we require 64-bit integers in
  configure.ac, remove conditional definition of 64-bit types.
2010-07-26 15:00:49 +02:00
Andreas Rottmann
77b139121d Allow exposing of random number generator state
Now the random number generator state can be obtained in external
(i.e. `read'/`write'-able) form via the new procedure
`random-state->external'.  An externalized state can be reinstantiated by
calling `external->random-state'.

* libguile/random.c (scm_i_init_rstate_scm, scm_i_expose_rstate): New
  internal functions.
* libguile/random.c (scm_c_make_rstate_scm, scm_external_to_random_state,
  scm_random_state_to_external): New public functions.
* libguile/random.h: Add prototypes for the above functions.

* libguile/random.h (scm_t_rng): Add new fields `init_rstate_scm' and
  `expose_rstate'.
* libguile/random.c (scm_init_random): Initialize the new fields in
  `scm_the_rng'.
2010-07-26 15:00:49 +02:00
Thien-Thi Nguyen
2d6a14adc9 Fix "make dist" regression: Distribute guile-func-name-check.
Regression introduced 2010-07-22,
"Avoid no-op config-subst for libguile/guile-func-name-check".
* libguile/Makefile.am (noinst_SCRIPTS):
Move guile-func-name-check from here...
(EXTRA_DIST): ...to here.
2010-07-24 22:25:24 +02:00
Thien-Thi Nguyen
395afce9f2 [maint] Remove unused script guile-doc-snarf.
* doc/ref/tools.texi (Doc Snarfing): Don't mention guile-doc-snarf.

* configure.ac (libguile/guile-doc-snarf): Delete ‘GUILE_CONFIG_SCRIPT’.

* libguile/Makefile.am (noinst_SCRIPTS): Remove guile-doc-snarf.
* libguile/.gitignore: Remove guile-doc-snarf.
* libguile/guile-doc-snarf.in: Delete file.

* module/scripts/doc-snarf.scm: Comment munging; nfc.

* AUTHORS: Update.
2010-07-22 21:10:38 +02:00
Thien-Thi Nguyen
6a6df18794 [maint] Avoid no-op config-subst for libguile/guile-func-name-check.
* configure.ac (libguile/guile-func-name-check): Remove ‘GUILE_CONFIG_SCRIPT’.
* libguile/Makefile.am (.c.doc): Look in $(srcdir) for awk script.
* libguile/guile-func-name-check: Rename from guile-func-name-check.in.
2010-07-22 14:17:26 +02:00