1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-06 07:30:28 +02:00
Commit graph

19998 commits

Author SHA1 Message Date
Andy Wingo
affe170e5c Refactor to <class> slot computation
* module/oop/goops.scm (macro-fold-right, fold-<class>-slots, <class>):
  Use a macro folder to define (and redefine) class slots.  We'll use
  this to compute static indices as well.
2015-01-23 16:16:01 +01:00
Andy Wingo
945652a87a Remove GOOPS random state
* libguile/goops.c: Remove GOOPS random state, now that there are no
  more hashsets.
2015-01-23 16:16:01 +01:00
Andy Wingo
2e0b69344b More goops.c cleanups, and fix a security issue
* libguile/goops.c: Remove unused #includes.
  (make_class_name): New helper, replaces unsafe use of sprintf.
  (scm_make_extended_class): Rewrite to call scm_make_standard_class
  directly.
  (scm_make_port_classes): Rewrite to use scm_make_standard_class, and
  no need to patch the CPL any more.
2015-01-23 16:16:01 +01:00
Andy Wingo
06ea79b73d Remove unused union scm_t_debug_info
* libguile/debug.h (union scm_t_debug_info): Remove unused type
  declaration.
2015-01-23 16:16:01 +01:00
Andy Wingo
4db73f11de More unused code removal in GOOPS
* libguile/goops.c: Remove unused sym_memoize_method_x.
2015-01-23 16:16:01 +01:00
Andy Wingo
cf0a678ba3 Remove private var_no_applicable_method capture
* libguile/goops.c (var_no_applicable_method): Remove unused capture.
  (sym_no_applicable_method): Remove unused symbol.
2015-01-23 16:16:00 +01:00
Andy Wingo
984d43b632 Remove scm_assert_bound
* libguile/goops.c (scm_assert_bound): Remove unexported unused helper.
* module/oop/goops.scm (make-generic-bound-check-getter): Change
  assert-bound use to use `unbound?'.
2015-01-23 16:16:00 +01:00
Andy Wingo
6a201bc4dd Remove scm_at_assert_bound_ref
* libguile/goops.c (scm_at_assert_bound_ref): Remove unused, unexported
  function.
2015-01-23 16:16:00 +01:00
Andy Wingo
e03e310126 Remove hashset slots from GOOPS classes
* libguile/goops.h (SCM_CLASS_CLASS_LAYOUT, SCM_INSTANCE_HASH)
  (SCM_SET_HASHSET):
* libguile/goops.c (prep_hashsets, scm_sys_make_root_class,
  scm_sys_init_layout_x):
* module/oop/goops.scm (build-<class>-slots): Remove hashsets from
  classes.  We haven't implemented hashed dispatch since Guile 1.8, and
  it's not clear that the particular formulation of dispatch is a good
  idea.
2015-01-23 16:16:00 +01:00
Andy Wingo
57898597ad Deprecate C exports of GOOPS classes.
* libguile/deprecated.h:
  (scm_class_boolean, scm_class_char, scm_class_pair)
  (scm_class_procedure, scm_class_string, scm_class_symbol)
  (scm_class_primitive_generic, scm_class_vector, scm_class_null)
  (scm_class_real, scm_class_complex, scm_class_integer)
  (scm_class_fraction, scm_class_unknown, scm_class_top)
  (scm_class_object, scm_class_class, scm_class_applicable)
  (scm_class_applicable_struct, scm_class_applicable_struct_with_setter)
  (scm_class_generic, scm_class_generic_with_setter, scm_class_accessor)
  (scm_class_extended_generic, scm_class_extended_generic_with_setter)
  (scm_class_extended_accessor, scm_class_method)
  (scm_class_accessor_method, scm_class_procedure_class)
  (scm_class_applicable_struct_class, scm_class_number, scm_class_list)
  (scm_class_keyword, scm_class_port, scm_class_input_output_port)
  (scm_class_input_port, scm_class_output_port, scm_class_foreign_slot)
  (scm_class_self, scm_class_protected, scm_class_hidden)
  (scm_class_opaque, scm_class_read_only, scm_class_protected_hidden)
  (scm_class_protected_opaque, scm_class_protected_read_only)
  (scm_class_scm, scm_class_int, scm_class_float)
  (scm_class_double, scm_port_class, scm_smob_class): Deprecate.

* libguile/deprecated.c:
* libguile/goops.c:
* libguile/goops.h: Adapt to deprecation.

* libguile/goops.h
* libguile/goops.c (scm_is_generic, scm_is_method): New interfaces.
  (SCM_GENERICP, SCM_METHODP): Change to use new interfaces.

* libguile/ports.c (scm_make_port_type):
* libguile/smob.c (scm_make_smob_type, scm_set_smob_apply): Use internal
  names for the port and smob class arrays.
2015-01-23 16:16:00 +01:00
Andy Wingo
6c7dd9ebd3 Generics with setters have <applicable-struct-with-setter> layout
* libguile/goops.c (scm_sys_set_object_setter_x): Remove.  Instead, we
  use slot-set! of 'setter.
  (scm_i_define_class_for_vtable): Move lower in the file, and fold in
  scm_make_extended_class_from_symbol and make_class_from_symbol.
  Properly handle applicable structs with setters.
  (scm_class_applicable_struct_with_setter_class): New private capture.
  (scm_sys_bless_applicable_struct_vtables_x): Rename to take two
  arguments, and bless the second argument as an applicable struct with
  setter vtable.
  (scm_sys_goops_early_init): Capture setter classes.

* libguile/deprecated.c (SPEC_OF, CPL_OF): Access slots by name, not by
  index.
  (applicablep, more_specificp): Adapt to use CPL_OF.
  (scm_find_method): Access "methods" slot by name.

* libguile/procs.c (scm_setter): Remove special case for generics; if
  it's a setter, it will be a normal applicable struct.
* module/oop/goops.scm (<applicable-struct-with-setter-class>)
  (<applicable-struct-with-setter>): New classes.
  (<generic-with-setter>): Now an instance of the setter metaclass and a
  child of the setter class, so that the "setter" slot ends up in the
  right place.
  (<accessor>, <extended-generic-with-setter>, <extended-accessor>): Be
  instances of the setter metaclass.
  (<method>, <accessor-method>): Move definitions farther down.
  (make): Use slot-set! when initializing setters here.
  (initialize): Likewise for <applicable-struct-with-setter>.  Remove
  specialization for <generic-with-setter>.
2015-01-23 16:16:00 +01:00
Andy Wingo
9e2cd55ec8 Remove unused CPP defines naming <method> slots
* libguile/goops.h (scm_si_generic_function, scm_si_specializers)
  (scm_si_procedure, scm_si_formals, scm_si_body)
  (scm_si_make_procedure): Remove unused CPP defines.
2015-01-23 16:16:00 +01:00
Andy Wingo
79f2aaab30 Remove unused `default-slot-definition-class' <class> slot
* libguile/goops.h (SCM_CLASS_CLASS_LAYOUT, scm_si_slotdef_class)
* module/oop/goops.scm (build-<class>-slots): Remove unused
  `default-slot-definition-class' <class> slot.
2015-01-23 16:16:00 +01:00
Andy Wingo
005c078f27 Remove useless scm_s_slot_set_x export
* libguile/goops.c:
* libguile/goops.h (scm_s_slot_set_x): Remove unused and useless
  export.
2015-01-23 16:16:00 +01:00
Andy Wingo
036c508402 Remove unreachable code in scm_setter
* libguile/procs.c (scm_setter): Remove unreachable code.
2015-01-23 16:16:00 +01:00
Andy Wingo
623559f311 Deprecate scm_no_applicable_method C export
* libguile/deprecated.c (scm_init_deprecated_goops)
  (scm_no_applicable_method):
* libguile/goops.h:
* libguile/goops.c (scm_no_applicable_method)
  (scm_sys_goops_early_init): Deprecate scm_no_applicable_method C
  export.
2015-01-23 16:16:00 +01:00
Andy Wingo
07f6200116 Remove unused scm_t_method and SCM_METHOD
* libguile/goops.h (scm_t_method, SCM_METHOD): Remove unused struct
  type, typedef, and macro.
2015-01-23 16:16:00 +01:00
Andy Wingo
e0590e7c27 Fold GOOPS compile and dispatch modules into main GOOPS module
* libguile/goops.c (scm_sys_invalidate_method_cache_x): Remove C
  interface to this internal method.  Instead, internal callers are all
  from Scheme, so we move the implementation to Scheme.
  (scm_make): Dispatch to `make' in Scheme.  This is an incompatible but
  great change, as it fulfills the common user perception that scm_make
  is the same as GOOPS's `make'.
  (scm_sys_goops_early_init): Capture `make'.
  (scm_no_applicable_method): Define in Scheme and capture in C.

* module/Makefile.am: Remove oop/goops/compile.scm and
  oop/goops/dispatch.scm.

* module/oop/goops/compile.scm:
* module/oop/goops/dispatch.scm: Fold into goops.scm.

* module/oop/goops.scm: Fold in the generic compile and dispatch
  modules.  This eliminates a circularity that caused some eval-when
  shenanigans, so remove the eval-whens as well.  Reimplement the boot
  version of `make' in Scheme, and make the <generic> `initialize'
  method handle invalidation instead of the generic %allocate-instance.
  (no-applicable-method): Define here.  Import the utils module in the
  normal define-module block.
2015-01-23 16:16:00 +01:00
Andy Wingo
6098d96b7b Remove unused *goops-module* definition.
* module/oop/goops.scm (*goops-module*): Remove.
2015-01-23 16:16:00 +01:00
Andy Wingo
7cb88cbc92 define-generic, define-extended-generic are hygienic syntax
* module/oop/goops.scm (define-generic, define-extended-generic):
  (define-extended-generics): Reimplement using syntax-case.
2015-01-23 16:16:00 +01:00
Andy Wingo
f840ed2538 `class' is a hygienic macro
* module/oop/goops.scm (class): Rewrite as a hygienic macro.
2015-01-23 16:16:00 +01:00
Andy Wingo
28b818d303 Deprecate scm_basic_make_class
* libguile/deprecated.h:
* libguile/deprecated.c (scm_basic_make_class): Deprecate.

* libguile/goops.c:
* libguile/goops.h (scm_make_standard_class): New internal helper.  It's
  a better spelling, as it matches make-standard-class, and is internal
  so as not to cause confusion between boot GOOPS helpers and "real"
  GOOPS interfaces.
2015-01-23 16:16:00 +01:00
Andy Wingo
51fd1cd650 Move GOOPS boot to Scheme
* module/oop/goops.scm (build-<class>-slots): New helper, replacing
  build_class_class_slots.
  (build-slots-list, %compute-getters-n-setters, %compute-layout): New
  private helpers, moved here from C.
  (%prep-layout!): Reimplement in Scheme.
  (make-standard-class): New private helper, replacing
  scm_basic_make_class.
  (<class>, <top>, <object>): Define in Scheme.

  (<foreign-slot>, <protected-slot>, <hidden-slot>, <opaque-slot>,
   <read-only-slot>, <self-slot>, <protected-opaque-slot>,
   <protected-hidden-slot>, <protected-read-only-slot>, <scm-slot>,
   <int-slot>, <float-slot>, <double-slot>, <procedure-class>,
   <applicable-struct-class>, <method>, <accessor-method>, <applicable>,
   <applicable-struct>, <generic>, <extended-generic>,
   <generic-with-setter>, <accessor>, <extended-generic-with-setter>,
   <extended-accessor>): Define in Scheme.

  (<boolean>, <char>, <list>, <pair>, <null>, <string>, <symbol>,
   <vector>, <foreign>, <hashtable>, <fluid>, <dynamic-state>, <frame>,
   <vm-continuation>, <bytevector>, <uvec>, <array>, <bitvector>,
   <number>, <complex>, <real>, <integer>, <fraction>, <keyword>,
   <unknown>, <procedure>, <primitive-generic>, <port>, <input-port>,
   <output-port>, <input-output-port>): Define in Scheme.

  (compute-slots): Use build-slots-list helper.

* libguile/goops.h:
* libguile/goops.c (scm_basic_basic_make_class, scm_sys_compute_slots)
  (scm_sys_prep_layout_x): Remove.  These were available to C, but were
  undocumented internals that were dangerous, confusing, and
  unnecessary.

* libguile/goops.c: Add note about variable versus value references.
  Remove internal C routines that were just used during boot, as they
  have been moved to Scheme.
  (scm_basic_make_class): Change to call out to make-standard-class in
  Scheme.
  (scm_sys_make_root_class, scm_sys_bless_applicable_struct_vtable_x)
  (scm_sys_bless_pure_generic_vtable_x, scm_sys_init_layout_x): New
  private helpers.
  (scm_sys_goops_early_init): Change to capture values defined in
  Scheme.
2015-01-23 16:16:00 +01:00
Andy Wingo
a91ea6a8a3 Remove declarations without definitions
* libguile/goops.h: Remove declarations for scm_oldfmt, scm_c_oldfmt0,
  and scm_c_oldfmt.  These symbols were not defined.
2015-01-23 16:16:00 +01:00
Andy Wingo
8906f23ded Remove unused %fast-slot-ref / %fast-slot-set! from GOOPS
* libguile/goops.h:
* libguile/goops.c (scm_sys_fast_slot_ref, scm_sys_fast_slot_set_x):
  Remove these unused, unsafe functions.  They were publically available
  only to C.

* module/oop/goops/active-slot.scm (compute-get-n-set): Update to use
  struct-ref / struct-set! instead of %fast-slot-ref / %fast-slot-set!
  from (oop goops internal).
2015-01-23 16:16:00 +01:00
Andy Wingo
82ab50900a Preparation for more GOOPS refactorings
* libguile/goops.c (scm_sys_goops_early_init)
  (scm_init_goops_builtins): Factor out some initialization to a
  separate helper.  This will be the base for moving more things from C
  to Scheme in the future.

* module/oop/goops.scm: Call %goops-early-init.
2015-01-23 16:15:59 +01:00
Andy Wingo
6ab1939653 %init-goops-builtins is an extension, not a global
* libguile/goops.h:
* libguile/goops.c (scm_init_goops, scm_init_goops_builtins): Move
  %init-goops-builtins to be an extension instead of a globally
  accessible function.

* module/oop/goops.scm: Adapt.
2015-01-23 16:15:59 +01:00
Andy Wingo
9167e0b88d compute-cpl implementation only in Scheme
* libguile/goops.c (build_class_class_slots, create_basic_classes):
  Instead of creating <class> with uninitialized `direct-slots',
  `slots', and `getters-n-setters' fields and initializing them later,
  create <class> with a "boot" version of unspecialized slots and later
  replace the fields with specialized slot classes.  This allows
  slot-ref to work during early boot, which is necessary to move
  compute-cpl to Scheme.
  (create_standard_classes): Finish initializing <class> here.
  (map, filter_cpl, compute_cpl): Remove the boot-time compute-cpl in C
  and its helpers.
  (scm_basic_basic_make_class): Call compute-cpl in Scheme.
  (fix_cpl): Remove; since we use the correct compute-cpl from the
  beginning, there's no need to correct for the deficiencies of the C
  implementation any more.
  (build_slots_list): Adapt to build_class_class_slots change.

* module/oop/goops.scm (compute-std-cpl, compute-cpl): Move these up to
  the top, so they can be called by the boot process.
  (compute-clos-cpl, top-sort, std-tie-breaker, build-transitive-closure)
  (build-constraints): Remove unused private code.
2015-01-23 16:15:59 +01:00
Andy Wingo
d1500d3a3b More useless goops.c code removal
* libguile/goops.c: Remove needless scm_sym_define_public definition.
2015-01-23 16:15:59 +01:00
Andy Wingo
08c5d888d4 Remove unused macros in goops.c
* libguile/goops.c (NXT_MTHD_METHODS, NXT_MTHD_ARGS): Remove unused
  macros.
2015-01-23 16:15:59 +01:00
Andy Wingo
3a0d141233 Rewrite %method-more-specific? to be in Scheme
* libguile/goops.h:
* libguile/goops.c (more_specificp, scm_sys_method_more_specific_p):
* module/oop/goops.scm (%method-more-specific?): Rewrite in Scheme.  We
  remove the scm_sys_method_more_specific_p interface as it is a private
  interface and it's not extensible.
2015-01-23 16:15:59 +01:00
Andy Wingo
e4aa440a2f Deprecate C interfaces scm_compute_applicable_methods, scm_find_method
* libguile/deprecated.h:
* libguile/deprecated.c (scm_compute_applicable_methods): Deprecate.
  This was the boot version of compute-applicable-methods, not the full
  version; the right thing to do is to call scheme.
  (scm_find_method): Deprecate.  Again, the right thing is to do this on
  the Scheme level.

* libguile/goops.c:
* libguile/goops.h: Deprecated code moved to deprecated.[ch].
2015-01-23 16:15:59 +01:00
Andy Wingo
c0a56ec78d %compute-applicable-methods in Scheme
* libguile/goops.c: Move %compute-applicable-methods to Scheme.
  (scm_sys_goops_loaded): No need to initialize
  var_compute_applicable_methods.
* libguile/goops.h (scm_sys_compute_applicable_methods): Remove.  This
  was internal so it shouldn't cause a problem.

* module/oop/goops.scm (%sort-applicable-methods):
  (%compute-applicable-methods): New definitions.
2015-01-23 16:15:59 +01:00
Andy Wingo
6679375332 Mark two coverage tests as XFAIL
* test-suite/tests/coverage.test ("several times", "one proc hit, one
  proc unused"): Mark as XFAIL until we can fix either the expander or
  the compiler to have proper source info.
2015-01-23 16:15:59 +01:00
Andy Wingo
e00c0a4824 Fix the assembler for unexpected source properties
* module/system/vm/assembler.scm (link-debug): Fix for source properties
  that don't have line and column, as are currently being produced by
  the new lalr.
2015-01-23 16:11:10 +01:00
Andy Wingo
4247d8e34e Merge commit '5b7632331e'
Conflicts:
	module/oop/goops.scm
2015-01-22 14:54:17 +01:00
Andy Wingo
0a5b437ef9 Merge commit 'ed72201a79'
Conflicts:
	test-suite/tests/r6rs-ports.test
2015-01-22 14:53:06 +01:00
Andy Wingo
e19235e21b Merge commit '01a301d1b6'
Conflicts:
	libguile/hash.c
2015-01-22 14:49:36 +01:00
Andy Wingo
baf90102cf Merge commit '894d0b894d'
Conflicts:
	libguile/hash.c
2015-01-22 14:48:40 +01:00
Andy Wingo
1cd779140d Merge commit '5943a62042' 2015-01-22 14:38:00 +01:00
Andy Wingo
baa74d3695 Merge commit '37b1453032' 2015-01-22 14:37:52 +01:00
Andy Wingo
6f248df1f6 Merge commit 'cdcba5b2f6'
Conflicts:
	module/statprof.scm
2015-01-22 14:37:18 +01:00
Ludovic Courtès
1abe6ba5d8 Really disable stack underflow checks when VM_CHECK_UNDERFLOW == 0.
* libguile/vm-engine.h: Use '#if VM_CHECK_UNDERFLOW' instead of
  '#ifdef'.
2015-01-22 14:01:16 +01:00
Andy Wingo
2f5c5d09a0 Merge commit '5d971db802'
Conflicts:
	libguile/ports.c
2015-01-22 13:34:48 +01:00
Andy Wingo
1fc3fc11ff Merge commit '47ca15c7df' 2015-01-22 13:33:07 +01:00
Andy Wingo
7c6ce75e2c Merge commit '7c433cbbce'
Conflicts:
	meta/Makefile.am
2015-01-22 13:32:59 +01:00
Andy Wingo
12dfe6568c Merge commit '5fac1a7ada'
Conflicts:
	configure.ac
	doc/ref/libguile-parallel.texi
2015-01-22 13:30:25 +01:00
Andy Wingo
a5b5cb422e Merge commit '8cf2a7ba74' 2015-01-22 13:24:30 +01:00
Andy Wingo
a51111dd25 Merge commit '81d2c84674'
Some fixups in bytevectors.c.
2015-01-22 13:23:51 +01:00
Andy Wingo
086bbcc874 Merge commit 'fdd319e9bd' 2015-01-22 13:04:34 +01:00