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

6303 commits

Author SHA1 Message Date
Michael Gran
dea901d66e Reader option for R6RS hex escapes
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
2010-01-12 21:02:41 -08:00
Andy Wingo
0d782201bf hopefully fix shared c32 / c64 uniform arrays
* 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.
2010-01-12 20:14:06 +01:00
Andy Wingo
e30f5b7d40 make-array bugfix
* libguile/vm-i-scheme.c (make-array): Fix terrible stack corruption
  bug.
2010-01-12 00:21:16 +01:00
Andy Wingo
f3a1fc5a9e fix srfi-4 shared vector access from c
* libguile/srfi-4.c (DEFINE_SRFI_4_C_FUNCS): Fix
  elements/writable_elements for shared vectors. Thanks to Daniel
  Llorens del Río for the info.
2010-01-12 00:20:10 +01:00
Andy Wingo
73788ca8be allow compilation of #@2(1 2 3)
* 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.
2010-01-11 21:47:10 +01:00
Michael Gran
c5661d2860 Refactor repeated code in scm_read_string
* libguile/read.c (SCM_READ_HEX_ESCAPE): new macro
  (scm_read_string): use new macro SCM_READ_HEX_ESCAPE
2010-01-10 18:24:23 -08:00
Michael Gran
67a4a16d8e Add R6RS backspace string escape
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
2010-01-10 15:41:37 -08:00
Michael Gran
15b6a6b284 Add R6RS character names
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
2010-01-10 15:16:55 -08:00
Thien-Thi Nguyen
2051e2bdbb Fix bug: Use correct FUNC_NAME' for scm_macro_binding'.
* libguile/macros.c (scm_macro_binding): Use correct FUNC_NAME.

Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org>
2010-01-09 23:27:30 +01:00
Thien-Thi Nguyen
4168aa4675 Add cast in `make_vm' to silence compiler warning.
* libguile/vm.c (make_vm): Add cast for .stack_base assignment.

Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org>
2010-01-09 23:27:28 +01:00
Thien-Thi Nguyen
fdcb2b82d7 Fix bug: Init auto var to unrandomize `stack_depth' rv.
* libguile/stacks.c (stack_depth): Init `n'.

Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org>
2010-01-09 23:26:22 +01:00
Andy Wingo
7c4a645698 fix SCM_STACK_OVERFLOW_P bug
* 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.
2010-01-09 23:11:23 +01:00
Andy Wingo
fc7648637b fix bug in subr-call and smob-call
* 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.
2010-01-09 21:48:16 +01:00
Andy Wingo
0af34a3f83 port-encoding returns #f if port encoding not set
* libguile/ports.c (scm_port_encoding): Instead of returning "NONE" if
  we don't know the encoding, return #f. Allows truncated-print to work
  if you don't have a locale set.
2010-01-09 19:21:09 +01:00
Andy Wingo
6f16379e9a allocate free variables inline to closures
* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.

* libguile/programs.h (SCM_PROGRAM_FREE_VARIABLES)
  (SCM_PROGRAM_FREE_VARIABLE_REF, SCM_PROGRAM_FREE_VARIABLE_SET)
  (SCM_PROGRAM_NUM_FREE_VARIABLES):
* libguile/programs.c (scm_make_program, scm_program_num_free_variables)
  (scm_program_free_variable_ref, scm_program_free_variable_set_x):
  Allocate free variables inline with programs, instead of being in a
  vect. Should improve locality, and require fewer local variables in
  the VM.

* libguile/vm-engine.c (vm_engine): Remove free_vars and free_vars_count
  variables.

* libguile/vm-engine.h (CACHE_PROGRAM): No need to muck with free_vars
  and free_vars_count.
  (CHECK_FREE_VARIABLE): Update for inline free vars.

* libguile/vm-i-system.c (FREE_VARIABLE_REF): Update for inline free
  vars.
  (make-closure, fix-closure): Take the closure vals as separate stack
  args, and copy or fix them inline into the appropriate closure.

* module/language/objcode/spec.scm (program-free-variables): Define a
  local version of this removed function.

* module/language/tree-il/compile-glil.scm (flatten): Adjust to not make
  a vector when making closures.

* module/system/vm/program.scm: Export program-num-free-variables,
  program-free-variable-ref, program-free-variable-set!, and remove
  program-free-variables.

* test-suite/tests/tree-il.test ("lambda"): Update to not make vectors
  when making closures.
2010-01-09 16:43:26 +01:00
Andy Wingo
75c3ed2820 smobs are applied with vm trampoline procedures
* libguile/smob.c: Instead of having special evaluator support for
  applying smobs, we use the same strategy that gsubr uses, that smob
  application should happen via a trampoline VM procedure, which uses a
  special opcode (smob-apply). So statically allocate all of the desired
  trampoline procedures here.
  (scm_i_smob_apply_trampoline): Unfortunately there's no real place to
  put the trampoline, so instead use a weak-key hash. It's nasty, but I
  think the benefits of speeding up procedure calls in the general case
  are worth it.

* libguile/smob.h (scm_smob_descriptor): Remove fields apply_0, apply_1,
  apply_2, and apply_3; these were never public. Also remove the
  gsubr_type field. Instead cache the trampoline objcode here.
  (SCM_SMOB_APPLY_0, SCM_SMOB_APPLY_1, SCM_SMOB_APPLY_2,
  SCM_SMOB_APPLY_3): Just go through scm_call_0, etc here.

* libguile/vm-i-system.c (call, tail-call, mv-call): Simplify. All
  procedure calls are VM calls now.
  (smob-call): New instruction, used in smob trampoline procedures.

* libguile/vm.c (apply_foreign): Remove. Yay!

* libguile/procprop.c (scm_i_procedure_arity): Refactor a bit for the
  smob changes.
2010-01-09 14:21:03 +01:00
Andy Wingo
9174596d5b re-add SCM_GSUBR_MAX
* libguile/gsubr.h (SCM_GSUBR_MAX): Restore this define, which specifies
  the max number of args to a gsubr.

* libguile/smob.c: Remove local SCM_GSUBR_MAX define.
2010-01-09 13:10:57 +01:00
Andy Wingo
cc7005bc37 remove scm_tc7_gsubr
* libguile/tags.h (scm_tc7_gsubr): Return to the pool of unused tc7s, as
  there are no more gsubrs. Yay :)

* libguile/programs.h (SCM_F_PROGRAM_IS_PRIMITIVE):
  (SCM_PROGRAM_IS_PRIMITIVE): New flag and accessor.

* libguile/gsubr.c (create_gsubr):
* libguile/snarf.h (SCM_STATIC_PROGRAM): Give subrs a PRIMITIVE flag.

* libguile/smob.h:
* libguile/smob.c (scm_i_smob_arity): New internal procedure. Uses the
  old GSUBR type macros, local to the file.

* libguile/procprop.c (scm_i_procedure_arity): Call out to
  scm_i_smob_arity, and remove a gsubr case.

* libguile/gc.c (scm_i_tag_name):
* libguile/evalext.c (scm_self_evaluating_p):
* libguile/goops.c (scm_class_of):
* libguile/vm.c (apply_foreign):
* libguile/hash.c (scm_hasher):
* libguile/debug.c (scm_procedure_name):
* libguile/print.c (iprin1): Remove gsubr cases.

* libguile/gsubr.h (SCM_PRIMITIVE_P): Fix to work with the new VM
  program regimen.
  (SCM_GSUBR_TYPE, SCM_GSUBR_MAKTYPE, SCM_GSUBR_MAX, SCM_GSUBR_REQ)
  (SCM_GSUBR_OPT, SCM_GSUBR_REST): Remove these macros, that are no
  longer useful.
* libguile/gsubr.c (scm_i_gsubr_apply, scm_i_gsubr_apply_list)
  (scm_i_gsubr_apply_array): Remove internal gsubr application
  functions.
2010-01-07 23:49:39 +01:00
Andy Wingo
6c2961a011 fix procedure-name on applicable structs
* libguile/debug.c (scm_procedure_name): Fix for applicable structs.
2010-01-07 23:49:30 +01:00
Andy Wingo
fd12a19a5e subrs are now VM trampoline procedures
* libguile/_scm.h: Add foreign.h and programs.h to the private include
  list, as snarfing subrs with static allocation now needs access to
  some of their enums and macros.

* libguile/gsubr.c (create_gsubr): Instead of creating a tc7_gsubr
  object, create a VM program with the call-subr opcode, so that the
  representation of subrs is now gsubrs. CPP and elisp, together at
  last.
  (scm_subr_objcode_trampoline): New function, used by the SCM_DEFINE
  snarf macro.

* libguile/gsubr.h (SCM_SUBR_META_INFO, SCM_SUBR_PROPS)
  (SCM_SET_SUBR_GENERIC_LOC, SCM_SUBR_ARITY_TO_TYPE): Remove these
  macros. They were never deprecated, but hopefully people aren't using
  them.
  (SCM_SUBRF, SCM_SUBR_NAME, SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC):
  Update to work on the new subr representation.

* libguile/objcodes.h (SCM_F_OBJCODE_IS_STATIC): New flag, indicates
  that the "backing store" of the objcode is statically allocated.

* libguile/procprop.c (scm_sym_name): Define here instead of in gsubr.c.

* libguile/snarf.h (SCM_DEFINE): If we are doing static allocation,
  statically allocate the foreign object, the object table, and the
  program, and use some SCM_SNARF_INITtery to fix things up.
  Unfortunately I have not been able to make this immutable. It might be
  possible, though.
  (SCM_IMMUTABLE_CELL, SCM_STATIC_DOUBLE_CELL, SCM_IMMUTABLE_FOREIGN):
  (SCM_STATIC_SUBR_OBJVECT, SCM_STATIC_PROGRAM): New helper macros.
2010-01-07 23:49:25 +01:00
Andy Wingo
97812f4d38 better scm_subr_p deprecation
* libguile/deprecated.h (scm_subr_p): Dispatch instead to scm_i_subr_p so we get
  link-time and run-time warnings.
* libguile/deprecated.c (scm_i_subr_p): Here we call SCM_PRIMITIVE_P.
2010-01-07 23:49:22 +01:00
Andy Wingo
f1d19308ad provide missing prototypes
* libguile/array-map.c:
* libguile/chars.c:
* libguile/eq.c:
* libguile/strorder.c: Provide declarations missing after the asubrs/rpsubrs ->
  gsubr conversion.
2010-01-07 23:49:15 +01:00
Andy Wingo
2be89ca129 boot the VM very early in init.c
* libguile/init.c (scm_i_init_guile): Now that the VM doesn't depend on
  smobs, we can boot it before anything.
2010-01-07 23:42:41 +01:00
Andy Wingo
6f3b0cc29e tc7 tags for vm-related data
* libguile/tags.h (scm_tc7_frame, scm_tc7_objcode, scm_tc7_vm)
  (scm_tc7_vm_cont): Take more tc7s for VM-related data structures.

* libguile/evalext.c (scm_self_evaluating_p):
* libguile/gc.c (scm_i_tag_name):
* libguile/goops.c (scm_class_of, create_standard_classes):
* libguile/print.c (iprin1): Add cases for the new tc7s.

* libguile/frames.c:
* libguile/frames.h:
* libguile/objcodes.c:
* libguile/objcodes.h:
* libguile/vm.c:
* libguile/vm.h: Desmobify.

* libguile/vm.c (scm_vm_apply): Export to Scheme, because VM objects are
  no longer applicable.

* module/system/repl/command.scm (profile):
* module/system/vm/trace.scm (vm-trace):
* module/system/vm/vm.scm (vm-load): Call vm-apply to run a program in a
  VM instead of treating the VM as applicable.
2010-01-07 23:42:41 +01:00
Andy Wingo
a6029b97ea properly integrate vm bootstrapping into init.c
* libguile/Makefile.am (modinclude_HEADERS):
* libguile/vm-bootstrap.h: Remove vm-bootstrap.h.

* libguile/frames.c: No more vm-bootstrap.h.

* libguile/instructions.c (scm_init_instructions):
* libguile/objcodes.c (scm_init_objcodes):
* libguile/programs.c (scm_init_programs): No need to call
  scm_bootstrap_vm, init.c does that for us.

* libguile/vm.c (scm_bootstrap_vm): No need call e.g.
  scm_bootstrap_frames, init.c does that. Remove a twice-calling guard,
  should be unnecessary. Don't define the load-compiled subr here.

* libguile/load.c (scm_init_load): Define the load-compiled subr here.

* libguile/vm.h: Declare scm_bootstrap_vm here.

* libguile/init.c (scm_i_init_guile): Properly integrate VM
  bootstrapping into this file.
2010-01-07 23:42:41 +01:00
Andy Wingo
f3056b42cf boot bytevectors earlier
* libguile/init.c (scm_i_init_guile): It turns out generalized-vectors
  and generalized-arrays don't actually block anyone in the dependency
  graph, so punt those back to the end. Bootstrap bytevectors earlier,
  though, which don't actually depend on smobs.
2010-01-07 23:42:41 +01:00
Andy Wingo
a268973767 reimplement srfi-4 vectors on top of bytevectors
* libguile/srfi-4.h:
* libguile/srfi-4.c (scm_make_srfi_4_vector): New function, exported by
  (srfi srfi-4 gnu).
* libguile/srfi-4.i.c: Removed.
* module/srfi/srfi-4.scm:
* module/srfi/srfi-4/gnu.scm: Reimplement srfi-4 vectors on top of
  bytevectors. The implementation is mostly in Scheme now.

* test-suite/tests/unif.test: Update to use (srfi srfi-4 gnu).

* libguile/bytevectors.c (bytevector_ref_c32, bytevector_ref_c64)
  (bytevector_set_c32, bytevector_set_c64): Fix some embarrassing bugs.
  Still need to do an upper bounds check.

* libguile/deprecated.h: Remove deprecated array functions:
  scm_i_arrayp, scm_i_array_ndim, scm_i_array_mem, scm_i_array_v,
  scm_i_array_base, scm_i_array_dims, and the deprecated macros:
  SCM_ARRAYP, SCM_ARRAY_NDIM, SCM_ARRAY_CONTP, SCM_ARRAY_MEM,
  SCM_ARRAY_V, SCM_ARRAY_BASE, SCM_ARRAY_DIMS.
* libguile/deprecated.c (scm_uniform_vector_read_x)
  (scm_uniform_vector_write, scm_uniform_array_read_x)
  (scm_uniform_array_write): Newly deprecated functions.

* libguile/generalized-arrays.c (scm_array_type): Remove the bytevector
  hack.

* libguile/objcodes.c (scm_bytecode_to_objcode, scm_objcode_to_bytecode):
  Rework to operate on bytevectors, as scm_make_u8vector now causes a
  module lookup, which can't be done e.g. when loading the VM boot
  program for psyntax-pp.go on a fresh bootstrap.

* libguile/objcodes.h (SCM_F_OBJCODE_IS_BYTEVECTOR):
  (SCM_OBJCODE_IS_BYTEVECTOR): s/U8VECTOR/BYTEVECTOR/.

* module/ice-9/boot-9.scm (the-scm-module): A terrible hack to pull in
  (srfi srfi-4), as the bindings are primarily there now. We'll worry
  about this later.
2010-01-07 22:06:56 +01:00
Andy Wingo
3dc2afe2b8 Revert "Remove unused internal bytevector functions."
This reverts commit c4daa51910.
2010-01-07 22:06:20 +01:00
Andy Wingo
5c39373f48 clean up includes in vectors.[ch]
* libguile/vectors.h:
* libguile/vectors.c: Clean up the includes... mostly.
2010-01-07 22:06:20 +01:00
Andy Wingo
cf9a806dbd fix array->list
* libguile/generalized-arrays.c (array_to_list): Fix buggy
  implementation. Thanks to Daniel Llorens del Río for the bug repor.
2010-01-07 16:40:13 +01:00
Ludovic Courtès
e29dcaf3b7 Fix 1.8-compatibility of `scm_search_path ()'.
* libguile/load.c (scm_search_path): Handle the 1.8-compatibility case
  where REST is `SCM_UNDEFINED'.  Reported by Dale P. Smith.
2010-01-07 11:10:36 +01:00
Ludovic Courtès
daa4a3f1ff Use Gnulib's `full-write' instead of custom code.
* libguile/fports.c (write_all): Remove.
  (fport_write): Use `full_write ()' instead of `write_all ()'.
2010-01-07 11:10:35 +01:00
Ludovic Courtès
a3d7d5d508 Use encoding-error' instead of misc-error' for string encoding errors.
* libguile/strings.c (scm_encoding_error): New function.
  (scm_from_stringn, scm_to_stringn): Use it instead of `scm_misc_error ()'.

* test-suite/lib.scm (exception:encoding-error): Adjust accordingly.

* test-suite/tests/encoding-escapes.test (exception:conversion):
  Remove.  Use `exception:encoding-error' instead.

* test-suite/tests/encoding-iso88591.test: Likewise.

* test-suite/tests/encoding-iso88597.test: Likewise.

* test-suite/tests/encoding-utf8.test: Likewise.
2010-01-07 11:10:35 +01:00
Ludovic Courtès
7b0419128b Have string ports honor `%default-port-encoding'.
* libguile/strports.c (scm_i_mkstrport): Remove.
  (scm_mkstrport): Don't change the port's encoding to UTF-8; convert
  STR to the default port encoding.
  (scm_strport_to_string): Fix documentation & indentation.

* libguile/strports.h (scm_i_mkstrport): Remove.

* test-suite/lib.scm (exception:encoding-error): New variable.
  (format-test-name): Set `%default-port-encoding' to "UTF-8".

* test-suite/tests/ports.test ("string ports")["%default-port-encoding
  is honored", "suitable encoding [latin-1]", "suitable encoding
  [latin-3]", "wrong encoding"]: New tests.

* test-suite/tests/r6rs-ports.test ("7.2.11 Binary
  Output")["put-bytevector with UTF-16 string port", "put-bytevector
  with wrong-encoding string port"]: New tests.

* test-suite/tests/reader.test (read-string): Set
  `%default-port-encoding' to `#f'.
  ("reading")["unprintable symbol"]: Use a string that doesn't contain
  zeros.

* doc/ref/api-io.texi (String Ports): Document encoding issues with
  `call-with-output-string' and `with-output-to-string'.
2010-01-07 11:10:35 +01:00
Ludovic Courtès
29bcdbb059 Add in-source documentation of `scm_to_stringn ()'.
* libguile/strings.c (scm_to_stringn): Add documentation comment.
2010-01-07 11:10:35 +01:00
Andy Wingo
9fdee5b40b fix compiler warnings in foreign.c
* libguile/foreign.c (scm_c_from_foreign, scm_c_take_foreign): Fix
  compiler warnings on 64-bit machines.
2010-01-07 10:40:38 +01:00
Andy Wingo
fd62932244 add subr-call VM op
* libguile/vm-i-system.c (subr_call): Add subr-call VM op.
2010-01-07 10:19:53 +01:00
Andy Wingo
f318aa1e38 add SCM_PROGRAM_IS_PRIMITIVE_GENERIC flag and checker
* libguile/programs.h (SCM_F_PROGRAM_IS_PRIMITIVE_GENERIC)
  (SCM_PROGRAM_IS_PRIMITIVE_GENERIC): Add a primitive-generic flag and
  accessor, for when we switch primitives to be implemented using VM
  trampolines.
2010-01-07 10:19:53 +01:00
Andy Wingo
31a26df2cc program-meta procedures get their program's objtable
* libguile/programs.c (scm_program_meta): Give the program meta
  procedure the same object table as the main procedure. Will allow for
  easier hand-crafting of meta programs. Of course when compiling a
  metadata procedure from Scheme, one still wants to avoid preallocating
  the heap objects needed by the metadata...
2010-01-07 10:19:53 +01:00
Julian Graham
d8164b046c Attempt to narrow normalized strings.
* libguile/strings.c (normalize_str): Clean up indentation.  Add call to
  scm_i_try_narrow_string.
2010-01-06 23:03:22 -05:00
Andy Wingo
9c246c0383 remove unused snarf macros
* libguile/snarf.h (SCM_DEFINE1, SCM_PRIMITIVE_GENERIC_1, SCM_PROC1)
  (SCM_GPROC1): Remove, as these deal in the removed typed subr
  constructors.

* libguile/tags.h (scm_tcs_subrs): Remove this. Use scm_tc7_gsubr
  instead, though hopefully that will go too, soon.
2010-01-05 16:31:12 +01:00
Andy Wingo
9fdf9fd3ea move subr implementation details to gsubr.[ch]
* libguile/procs.h: Move subr macros to gsubr.h.
* libguile/procs.c (scm_c_make_subr, scm_c_make_subr_with_generic)
  (scm_c_define_subr, scm_c_define_subr_with_generic): Remove these,
  because they deal in subr types, and now there is only one subr type.
  The body of this code is now in gsubr.c.

* libguile/deprecated.h (scm_subr_p): Remove from procs.[ch] and define
  as a deprecated macro. Only used internally, but who knows who's out
  there.

* libguile/goops.c (scm_generic_capability_p)
  (scm_enable_primitive_generic_x, scm_set_primitive_generic_x)
  (scm_primitive_generic_generic): Use the new SCM_PRIMITIVE_GENERIC_P
  macro instead of calling scm_subr_p.

* libguile/gsubr.h (SCM_PRIMITIVE_P, SCM_PRIMITIVE_GENERIC_P): New
  macros, to replace scm_subr_p and hacky checking for generic
  capability.
  (SCM_SUBR_META_INFO, SCM_SUBR_NAME, SCM_SUBRF, SCM_SUBR_PROPS)
  (SCM_SUBR_GENERIC, SCM_SET_SUBR_GENERIC, SCM_SET_SUBR_GENERIC_LOC)
  (SCM_SUBR_ARITY_TO_TYPE): Moved here from procs.h.

* libguile/gsubr.c (create_gsubr): Inline the
  scm_c_make_subr definition here, and work for generics too. Removed a
  scm_remember_upto_here_1 that was added earlier in the year when
  meta_info was not being traced by the GC. Adapt callers.
2010-01-05 16:15:14 +01:00
Andy Wingo
e809758a7e clean up macros.[ch]
There are some incompatible changes here, but only to interfaces that
were introduced earlier in 1.9, or interfaces which have been broken
since early in 1.9.

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump, as the macro
  changes affect the interface that is called by psyntax-generated macro
  definitions.

* libguile/inline.h (scm_words): New function, allocates a variable
  number of contiguous scm_t_bits locations, with a given value in the
  0th word, and 0 in the rest of the words.

* libguile/macros.h: Rework interface to correspond more closely, and
  minimally, to the needs of memoize.c and psyntax.
  (SCM_ASSYNT, SCM_MACRO_TYPE_BITS, SCM_MACRO_TYPE_MASK)
  (SCM_F_MACRO_EXTENDED, SCM_MACROP, SCM_MACRO_TYPE)
  (SCM_MACRO_IS_EXTENDED, SCM_BUILTIN_MACRO_P, SCM_SYNCASE_MACRO_P)
  (SCM_MACRO_CODE, scm_tc16_macro): Remove CPP macros related to the
  representation of Scheme macros.
  (scm_i_make_primitive_macro): Renamed from scm_i_makbimacro.
  (scm_i_macro_primitive): New accessor so that memoize.c can get to the
  primitive syntax transformer.
  (scm_make_syncase_macro, scm_make_extended_syncase_macro)
  (scm_syncase_macro_type, scm_syncase_macro_binding): Removed these
  functions, replaced by make-syntax-transformer and its accessors.
  (scm_macro_binding): New accessor, the same as what
  scm_syncase_macro_binding was.

* libguile/macros.c: All representation details of syntax transformers
  are private to this file now.
  (macro_print): Print macros as #<syntax-transformer ...>, or
  #<primitive-syntax-transformer ...> if psyntax has not attached a
  transformer of its own.
  (scm_i_make_primitive_macro): Represent macros as 5-word smobs.
  (scm_make_syntax_transformer): New constructor for syntax transformers
  (macros), exported to scheme. Takes a name, and looks it up in the
  current module to determine the previous primitive transformer, if
  any.
  (scm_macro_type): Instead of returning 'builtin-macro!, etc, return
  the type as set by psyntax, or #f if it's a primitive.
  (scm_macro_name): Return the stored macro name.
  (scm_macro_transformer): Return the psyntax-set syntax transformer.
  Hacky, but should help introspection somewhat.

* libguile/memoize.c (memoize_env_ref_transformer): Use the new
  scm_i_macro_primitive, and adapt to other macro API changes.

* module/ice-9/psyntax.scm (put-global-definition-hook)
  (get-global-definition-hook, chi-install-global): Call (and generate
  calls to) the new macro constructors and accessors.

* module/ice-9/psyntax-pp.scm: Doubly regenerated.

* module/ice-9/debugging/traps.scm (trap-here): Comment out this
  definition and export, while it's not working.
2010-01-05 15:33:46 +01:00
Andy Wingo
bab9804661 remove mmacros, SCM_SYNTAX snarf macro
* libguile/snarf.h (SCM_SYNTAX): Remove snarf macro, users can't define
  primitive syntax any more.

* libguile/memoize.c (SCM_SYNTAX): Define locally, and just call
  scm_i_makbimacro as there's no difference between that and
  scm_makmmacro. Alter invocations to suit.

* libguile/macros.h:
* libguile/macros.c (scm_i_makmmacro): Remove; users can't define
  primitive syntax any more. Use define-syntax instead.
  (scm_make_synt): Remove, this was only used by the SCM_SYNTAX snarf
  macro.
  (scm_i_makbimacro): Change prototype of this internal function to make
  the gsubr on behalf of the caller.
  (macro_print, scm_macro_type): Remove cases for mmacros.
2010-01-05 11:47:16 +01:00
Andy Wingo
9f09b127d4 remove scm_makacro and scm_makmacro
* libguile/macros.h:
* libguile/macros.c (scm_makacro): Remove this function for making
  "acros", as it is unused and won't work with the compiler.
  (scm_makmacro): Remove this deprecated function for making
  non-memoizing macros, as they won't work with the compiler.
  (macro_print, scm_macro_type): Remove a couple of cases for macros
  that can't be created any more.
2010-01-05 10:39:40 +01:00
Andy Wingo
ea7d717b1e fix include paths in foreign.c
* libguile/foreign.c: Fix include paths.
2010-01-05 10:17:41 +01:00
Andy Wingo
54cd715022 remove the deprecatd scm_make_subr_*
* libguile/deprecated.h:
* libguile/deprecated.c (scm_make_subr, scm_make_subr_with_generic)
  (scm_make_subr_opt): Remove these functions that were deprecated in
  2003, as they explicitly reference subr types.
2010-01-05 10:16:45 +01:00
Andy Wingo
e773b1e6ce dynamic-func returns foreign objects, not bignums
* libguile/dynl.c (scm_dynamic_func, scm_dynamic_call)
  (scm_dynamic_args_call): Change the representation of dynamic
  functions to be foreign objects. Shouldn't affect any users, as people
  should be treating the return value of dynamic-func as an opaque
  object.
2010-01-04 12:39:21 +01:00
Andy Wingo
e2c2a6994d add foreign value wrapper
* libguile/foreign.h:
* libguile/foreign.c: New files, implementing simple wrappers around
  foreign values, such as those that one might link in dynamically from
  a library.

* libguile/tags.h (scm_tc7_foreign): Take a tc7 for foreign values.

* libguile.h:
* libguile/init.c: Add foreign.h to headers and init.

* libguile/print.c (iprin1): Add printer for foreign values.

* libguile/gc.c (scm_i_tag_name): Case for foreign values.
* libguile/goops.c (scm_class_of, create_standard_classes): Add a class
  for foreign values.

* libguile/evalext.c (scm_self_evaluating_p): Add case for foreign
  values.

* libguile/Makefile.am: Add foreign.[ch] to the build.
2010-01-04 12:39:21 +01:00
Andy Wingo
a5bbb22e83 rename goto/args and friends to tail-call, tail-apply, etc
* libguile/vm-i-system.c (tail-call, tail-call/nargs, tail-apply)
  (tail-call/cc): Rename these back to tail-* from goto/*. We should
  reserve the rename-then-goto name for when you actually do a rename
  and goto, not when you shuffle the stack.

* doc/ref/vm.texi:
* module/language/glil/decompile-assembly.scm:
* module/language/tree-il/compile-glil.scm:
* test-suite/tests/tree-il.test: Adapt all callers and documentation.
2010-01-03 14:49:40 +01:00