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

91 commits

Author SHA1 Message Date
Andy Wingo
05b37c17ff fix up some assumptions that cmethods were lists
* libguile/eval.i.c (type_dispatch, apply_vm_cmethod)
  (apply_memoized_cmethod): Tweak the nastiness a bit more so as to deal
  with the '(no-method) empty entries. I would like to stop the search if
  the cdr isn't a pair, but currently with the inlined memoized bits, the
  cdr is a pair. The fix would be to make the memoizer return a procedure
  and not the already-inlined bits -- slightly slower but the vm will be
  faster anyway.

* libguile/objects.c (scm_mcache_lookup_cmethod): Same fixes here.

* oop/goops/dispatch.scm (cache-hashval, cache-try-hash!): Allow non-list
  cmethod tails.
2008-10-30 15:50:48 +01:00
Andy Wingo
5487977b1b runtime byte compilation of goops methods, whooooo
* ice-9/boot-9.scm (make-modules-in): Change to make sure that we are
  making modules in modules; that is, that a global binding of `compile'
  doesn't prevent a module from importing a submodule named `compile'.
  (resolve-module): Clean up a bit, and serialize the logic.

* libguile/objects.c (scm_mcache_lookup_cmethod, scm_apply_generic):
* libguile/eval.i.c (CEVAL): Now that cmethod entries can have a program
  as their tail instead of a memoized proc, we have to change the halting
  condition on the method cache search, in both places: the one that's
  inlined into eval.i.c and the one in objects.c. If the cmethod isn't a
  pair, apply it.

* libguile/goops.c (make): In the `make' procedure that's used before
  GOOPS is booted, bind #:formals, #:body, and #:compile-env on methods.

* oop/goops/compile.scm (compute-entry-with-cmethod): There was a
  terrible trick here that involved putting a dummy pair in the cache,
  then modifying it in place with the result of memoization. The note
  claimed that this was to cut recursion short, or something. I can't see
  how it could recurse, given that `methods' is changing each time. Also,
  the pair trick doesn't work with byte-compiled methods. So, remove it.
  (compile-method): Dispatch to the appropriate method compiler, based on
  whether the method was defined with the interpreter or with the
  compiler.
  (make-next-method): New function, generically computes a `next-method'
  procedure, though the caller has to supply the arguments.
  (compile-method/vm): Exciting method byte compiler!
  (make-make-next-method/memoizer, compile-method/memoizer): Add the
  /memoizer suffix, and move all this code to the bottom of the file.
2008-10-30 13:42:40 +01:00
Andy Wingo
21497600d2 add formals', body', and `compile-env' slots to <method>
* ice-9/boot-9.scm (compile-time-environment): Return #f instead of
  erroring under the interpreter, a bit more sane.

* libguile/goops.c (create_standard_classes):
* libguile/goops.h (scm_si_formals, scm_si_body, scm_si_compile_env):
* oop/goops.scm (method, initialize): Add `formals', `body', and
  `compile-env' slots to <method>.
2008-10-25 22:58:48 +02:00
Andy Wingo
ae9ce4b786 defmacroize (oop goops accessors), (oop goops save)
* oop/goops/accessors.scm (define-class-with-accessors)
  (define-class-with-accessors-keywords): Turn into defmacros.

* oop/goops/save.scm (readable, restore, write-component): Turn into
  defmacros.

Both of these changes are untested, unfortunately.
2008-10-25 22:58:48 +02:00
Andy Wingo
02e720ff76 method is a defmacro.
* oop/goops.scm (method): Make into a defmacro.
2008-10-23 15:00:19 +02:00
Andy Wingo
56f952c682 define-method is a defmacro
* oop/goops.scm (define-method): Make into a defmacro -- didn't change
  any of the logic, but the logic is a bit dodgy (see the note in the
  source).
2008-10-23 14:56:17 +02:00
Andy Wingo
1d83f47eb0 define-generic, define-accessor are defmacros too
* oop/goops.scm (define-generic, define-accessor): Define as defmacros. I
  find their semantics to be a bit odd, though -- but the test case
  checks for this behavior, so we'll follow the test cases.
2008-10-23 14:24:57 +02:00
Andy Wingo
d31c5d197d make define-class' and class' into defmacros
* oop/goops.scm: Use srfi-1, as util.scm already does.
  (kw-do-map): New helper for processing keyword args.
  (define-class-pre-definition, define-class): Rework so that
  define-class is a defmacro without side effects. There are two
  functional differences: we don't check that define-class is called only
  at the toplevel, because defining a lexical class might makes sense,
  and defmacros don't give us the toplevel check that we would want.
  Second in the redefinition case, we don't do a `define', as we don't
  actually need a new variable.
  (class): Similarly, make `class' a defmacro.
2008-10-23 14:03:51 +02:00
Andy Wingo
5e390de62f fix bug in self-tail-recursion with "external" variables; other sundries
* gdbinit (pp, inst): New commands.

* libguile/vm-engine.c (vm_error_not_a_pair): New error case.

* libguile/vm-i-scheme.c (VM_VALIDATE_CONS): New macro -- use this
  instead of SCM_VALIDATE_* because SCM_VALIDATE will exit nonlocally
  before we have a chance to sync the regs.
  (car, cdr, set-car, set-cdr): Use VM_VALIDATE_CONS.

* libguile/vm-i-system.c (goto/args): Bugfix: when doing a
  self-tail-recursion, allocate fresh externals. Fixes use of match.go.

* module/system/vm/assemble.scm (dump-object!): Add some checks that we
  aren't dumping out values that the VM can't handle.

* module/system/vm/disasm.scm (disassemble-externals): Fix rotten call to
  `print-info'.

* oop/goops/dispatch.scm: Add a FIXME.

* testsuite/Makefile.am (vm_test_files):
* testsuite/t-closure4.scm (extract-symbols): New test, distilled with
  much effort out of match.scm.

* ice-9/Makefile.am (NOCOMP_SOURCES): Re-enable compilation of match.scm.
  Yay!
2008-10-18 19:21:44 +02:00
Andy Wingo
999f1b26e7 Merge commit 'origin/master' into vm
Conflicts:

	doc/Makefile.am
	ice-9/Makefile.am
	libguile/gc.c
2008-09-30 21:12:16 +02:00
Andy Wingo
ac0e91c42d (oop goops) works again, after (the-environment) removal
* oop/goops.scm: Update so as not to use (the-environment), which no
  longer exists. I think that the speed characteristics are the same,
  broadly speaking.
2008-09-30 20:29:35 +02:00
Ludovic Courtès
61db429e25 Add `ChangeLog-2008' files to the distribution. 2008-09-12 21:57:52 +02:00
Ludovic Courtès
afb59d75b8 Rename ChangeLog' files to ChangeLog-2008'. 2008-09-12 21:49:58 +02:00
Ludovic Courtès
85ca88c68b Remove `.cvsignore' files. 2008-09-11 21:28:21 +02:00
Ludovic Courtès
cc7e01cedd Use SRFI-1 in `(oop goops util)'. 2008-03-18 09:10:45 +00:00
Ludovic Courtès
bbb6fc4fc2 Provide describe' feature in (oop goops describe)'. 2008-03-12 17:00:07 +00:00
Ludovic Courtès
608860a5b3 Changes from arch/CVS synchronization 2007-05-05 20:38:57 +00:00
Kevin Ryde
6e7d5622ee merge from 1.8 branch 2006-04-16 23:37:40 +00:00
Marius Vollmer
92205699d0 The FSF has a new address. 2005-05-23 19:57:22 +00:00
Neil Jerram
8378b269a6 Fix typo in comment 2005-04-24 12:29:14 +00:00
Mikael Djurfeldt
f12de0a178 * accessors.scm, simple.scm: New files.
* goops.scm (standard-define-class): Removed; Export
define-class as standard-define-class.
2005-03-24 10:23:17 +00:00
Marius Vollmer
219b286864 *** empty log message *** 2005-01-18 15:00:52 +00:00
Marius Vollmer
f7aaa3b300 (class-of): Changed from being re-exported to just
being exported.
2005-01-18 15:00:44 +00:00
Mikael Djurfeldt
f1dc5f45ab * Makefile.am (TAGS_FILES): Use this variable instead of
ETAGS_ARGS so that TAGS can be built using separate build
directory.

* Makefile.am (TAGS_FILES): Use this variable instead of
ETAGS_ARGS so that TAGS can be built using separate build
directory.

* debugger/breakpoints/Makefile.am (TAGS_FILES),
debugger/Makefile.am (TAGS_FILES), Makefile.am (TAGS_FILES): Use
this variable instead of ETAGS_ARGS so that TAGS can be built
using separate build directory.

* primitives/Makefile.am (TAGS_FILES), internals/Makefile.am
(TAGS_FILES), Makefile.am (TAGS_FILES): Use this variable instead
of ETAGS_ARGS so that TAGS can be built using separate build
directory.

* Makefile.am, goops/Makefile.am (TAGS_FILES): Use this variable
instead of ETAGS_ARGS so that TAGS can be built using separate
build directory.

* Makefile.am (TAGS_FILES): Use this variable instead of
ETAGS_ARGS so that TAGS can be built using separate build
directory.
2004-02-09 01:48:34 +00:00
Marius Vollmer
f9825394b5 *** empty log message *** 2004-01-12 17:28:46 +00:00
Marius Vollmer
3a43b605b8 (compute-get-n-set): Use '#:' in error message instead of ':'. Thanks
to Richard Todd!
2004-01-12 17:28:30 +00:00
Mikael Djurfeldt
05a6b2d3cc * goops.scm (compute-getters-n-setters): Allow for primitive
procedure thunks.  (Thanks to Neil W. Van Dyke.)
2003-04-20 17:35:41 +00:00
Mikael Djurfeldt
1ac61c2b50 * goops/dispatch.scm (cache-hashval): Corrected termination
condition for hashval computation.  (Previously, it made erroneous
assumptions about the representation of environments; Thanks to
Andreas Rottmann.)
2003-04-19 17:26:05 +00:00
Mikael Djurfeldt
47cd67db2f * tests/goops.test: Added tests for correctness of class
precedence list in all basic classes and tests for eqv? and
equal?.

* goops.scm (compute-getters-n-setters): Check for bad init-thunk.
(eqv?): Added default method.
(equal?): New default method which uses eqv?.

* eq.c (scm_eqv_p): Turned into a primitive generic.
2003-04-17 19:23:52 +00:00
Mikael Djurfeldt
266f3a23d7 * goops.scm (compute-getters-n-setters): Check for bad init-thunk. 2003-04-17 17:37:11 +00:00
Mikael Djurfeldt
466dd85969 Comment 2003-04-17 15:24:53 +00:00
Mikael Djurfeldt
58241edc7d * tests/goops.test: Added tests for class redefinition, object
update and active slots.

* goops.scm (compute-getter-method): For custom getter: Check
boundness even if there is an init-thunk.  (The getter can return
#<unbound> even if the slot has been set before.)
(remove-class-accessors!): Also remove accessor-method from its
accessor.

* goops.c (scm_sys_fast_slot_ref): Use SCM_SLOT instead of
scm_at_assert_bound_ref.  (We don't want the unbound check.  See
oop/goops/active-slot.scm.)
2003-04-15 01:17:36 +00:00
Mikael Djurfeldt
e1ac894c38 Fix 2003-04-14 20:12:40 +00:00
Mikael Djurfeldt
21ab2aeb77 * goops.scm (compute-getters-n-setters/verify-accessors): Better
check of format of value returned by compute-get-n-set.
(compute-getters-n-setters): Extended format of slot
getters-n-setters to indicate position and size of slot memory
allocated in instances.

* goops.c (scm_sys_prep_layout_x): Instance allocation is now
indicated through extra fields in getters-n-setters.
(scm_add_slot): Adapted to new format of getters_n_setters slot.
(Thanks to Andy Wingo.)
2003-04-13 14:48:35 +00:00
Marius Vollmer
73be1d9e8e Changed license terms to the plain LGPL thru-out. 2003-04-05 19:15:35 +00:00
Mikael Djurfeldt
e6726828ca * goops.scm (process-class-pre-define-accessor): Temporary kludge
to fix a problem introduced by my previous change.
2003-03-19 14:50:20 +00:00
Mikael Djurfeldt
c31142eefd * goops.scm (process-class-pre-define-generic,
process-class-pre-define-accessor, process-define-generic,
process-define-accessor): New functions.
(define-class-pre-definition): Use
process-class-pre-define-generic and
process-class-pre-define-accessor; Make sure not to create a new
local variable if the variable has been imported.
(define-generic): Use process-define-generic.
(define-accessor): Use process-define-accessor.
2003-03-17 13:53:58 +00:00
Mikael Djurfeldt
c9fa174805 * goops.scm (merge-generics): Make sure not to merge a gf with
itself.  That would be the cause of a real binding collision.
2003-03-12 18:41:44 +00:00
Mikael Djurfeldt
c614a00b8c * srfi-1.scm (filter, filter!): Removed. (Now implemented in the core.)
* goops/util.scm (filter): Removed.  (Now supplied by core.)

* list.c, list.h (scm_filter, scm_filter_x): New functions.

* debugger/command-loop.scm: Prefix all commands imported from
(ice-9 debugger command-loop) with debugger:.

* boot-9.scm (resolve-interface): Process #:hide; Name custom interfaces
appropriately.
(module-use!, module-use-interfaces!): Remove existing interfaces
on the use-list based on module name rather than interface
identity so that custom interfaces truly replaces their previous
version.
2003-03-11 19:58:14 +00:00
Mikael Djurfeldt
b0dff01890 Indentation 2003-03-11 19:55:00 +00:00
Mikael Djurfeldt
f8af5c6d35 * goops.scm (define-extended-generics): New syntax.
(<class> <operator-class> <entity-class> <entity>): Marked as
replacements.
(upgrade-accessor): Renamed from upgrade-generic-with-setter.
(ensure-accessor, upgrade-accessor): Rewritten to accomodate the
new <accessor> class.
(merge-accessors): Provide for merging of accessors imported from
different modules under the same name.

* goops.c, goops.h (scm_class_accessor_method): Renamed from
scm_class_accessor.
(scm_class_accessor): New class.
2003-03-11 14:50:08 +00:00
Mikael Djurfeldt
f595ccfefc * srfi-1.scm (iota map for-each map-in-order list-index member
delete delete! assoc): Marked as replacements.

* goops.scm (define-extended-generics): New syntax.
(<class> <operator-class> <entity-class> <entity>): Marked as
replacements.

* boot-9.scm (module-override!, make-mutable-parameter,
lookup-duplicates-handlers, default-module-duplicates-handler):
New functions.
(process-duplicates): Don't call duplicates handlers for duplicate
bindings of the same variable.
(process-define-module): Process #:replace.
(compile-interface-spec, resolve-interface): Process #:prefix.

* format.scm (format): Marked as replacement.

* threads.scm (future, future-ref): Marked as replacements.
2003-03-10 23:18:05 +00:00
Mikael Djurfeldt
7b07e5efb6 * boot-9.scm (process-define-module): Handle #:duplicates.
(module-use-interfaces! process-duplicates): New functions.
(duplicate-handlers): Dictionary of duplicate handlers.
(module-symbol-local-binding, module-symbol-binding): Bugfix.

* goops.scm (equal?): Define default method.
(merge-generics): Provide for merging of generic functions
imported into a module under the same name.
2003-03-07 13:12:47 +00:00
Mikael Djurfeldt
a48d60b1c0 * srfi-1.c (scm_init_srfi_1): Extend root module map and for-each
with the versions in this module using
scm_c_extend_primitive_generic.

* goops.scm (equal?): Define default method.

* goops.c (scm_primitive_generic_generic): Enable primitive
generic if not enabled.
(scm_sys_goops_loaded): Setup unextended primitive generics.

* goops.c, goops.h (scm_c_extend_primitive_generic): New function.

* snarf.h (SCM_PRIMITIVE_GENERIC, SCM_PRIMITIVE_GENERIC_1): New
snarf macros.

* numbers.c (scm_abs): Use SCM_PRIMITIVE_GENERIC.  (This is only a
testing example.  All uses of SCM_GPROC should be converted.)

* procprop.c (scm_stand_in_scm_proc): Use scm_assq instead of
scm_assoc.

* eq.c (scm_equal_p): Turned into a primitive generic.
2003-03-06 12:51:57 +00:00
Mikael Djurfeldt
27b32aad49 * goops.scm (method): Construct a new copy of the constant '('())
for every macro invocation.
2003-01-18 19:07:38 +00:00
Mikael Djurfeldt
bbf8d52350 * goops.scm (upgrade-generic-with-setter,
compute-new-list-of-methods): Use methods slot directly instead of
generic-function-methods.
(upgrade-generic-with-setter): Handle <extended-generic>:s.
(define-extended-generic): New syntax.
(make-extended-generic): New function.

* goops.c, goops.h (scm_class_extended_generic_with_setter): New
class.
(scm_compute_applicable_methods): Use scm_generic_function_methods.

* goops.c (scm_generic_function_methods): Support extended
generic functions.
2003-01-08 13:24:41 +00:00
Rob Browning
b2cbe8d8a2 *** empty log message *** 2002-12-09 00:51:53 +00:00
Rob Browning
e50186ab08 * Makefile.am (subpkgdatadir): VERSION -> GUILE_EFFECTIVE_VERSION.
* goops/Makefile.am (subpkgdatadir): VERSION ->
GUILE_EFFECTIVE_VERSION.
2002-12-09 00:43:51 +00:00
Rob Browning
aad6f7db2c * goops/Makefile.am (subpkgdatadir): VERSION ->
GUILE_EFFECTIVE_VERSION.
2002-12-09 00:43:27 +00:00
Dirk Herrmann
9089f73c52 * goops.scm (standard-define-class): Changed definition to form
a 'real' macro definition.
2002-11-16 16:29:06 +00:00