summaryrefslogtreecommitdiff
path: root/oop/goops.scm
AgeCommit message (Collapse)AuthorFilesLines
2008-11-01move ice-9/ and oop/ under module/Andy Wingo1-1636/+0
Moved ice-9/ and oop/ under module/, with the idea being that we have only scheme under module/. Adjusted configure.in and Makefile.am appropriately. Put oop/ at the end of the compilation order.
2008-10-31compile goops accessors. woot!Andy Wingo1-5/+36
* oop/goops.scm: Define compiler hooks for dealing with @slot-ref and @slot-set!. (make-bound-check-get, make-get, make-set): Compile these indexed accessors instead of having them be closures. Probably slower for the memoizer, but faster for the vm... not sure what the perfect solution is. * test-suite/tests/goops.test ("defining classes"): Add a test that defining a class with accessors works (it didn't until I figured out that (@ (system base compile) compile) thing).
2008-10-31compile goops submodules, goops.test now passes againAndy Wingo1-4/+9
* libguile/goops.c (get_slot_value, set_slot_value): While keeping the inlined getter/setter dispatch for closures, allow the getters and setters to be any kind of procedure. * oop/goops.scm (compute-getters-n-setters): Relax the checks on getter/setter procedures, so that if a getter is a procedure but not a closure, we don't try to poke its arity. * oop/goops/Makefile.am (SOURCES): Compile all the goops submodules! * oop/goops/old-define-method.scm: Removed, in an act of housekeeping. * oop/goops/compile.scm: * oop/goops/dispatch.scm: Break a circular module dependency by making sure that (oop goops) is loaded when we go to compile submodules. * oop/goops/compile.scm (compile-method/memoizer) (compile-method/memoizer+next): Allow a procedure without source through. This can happen with getter and setter lambdas that were compiled, and in that case there is no next-method call anyway. Ideally we should be able to specify compile-method for accessor methods...
2008-10-31compile goopsAndy Wingo1-22/+18
The pending task is to make the accessors compiled too, and also to compile compile.scm and dispatch.scm, and to integrate dispatch into the VM. * oop/Makefile.am (SOURCES): VM-ify the makefile, so we compile goops.scm by default. * oop/goops.scm (load-toplevel): Load goops builtins when compiling too. (method): Fix a literal #<unspecified> in the generated procedure (for an empty body). (internal-add-method!): Cleverness when bootstrapping add-method!. Neat! (initialize for <generic>): Use the `method' macro so we get compilation support. * oop/goops/dispatch.scm (cache-methods): Don't assume entries are pairs.
2008-10-25add `formals', `body', and `compile-env' slots to <method>Andy Wingo1-1/+8
* 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-23method is a defmacro.Andy Wingo1-11/+7
* oop/goops.scm (method): Make into a defmacro.
2008-10-23define-method is a defmacroAndy Wingo1-50/+36
* 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-23define-generic, define-accessor are defmacros tooAndy Wingo1-70/+35
* 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-23make `define-class' and `class' into defmacrosAndy Wingo1-143/+73
* 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-09-30(oop goops) works again, after (the-environment) removalAndy Wingo1-3/+8
* 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.
2006-04-16merge from 1.8 branchKevin Ryde1-1/+1
2005-05-23The FSF has a new address.Marius Vollmer1-1/+1
2005-04-24Fix typo in commentNeil Jerram1-1/+1
2005-03-24* accessors.scm, simple.scm: New files.Mikael Djurfeldt1-3/+2
* goops.scm (standard-define-class): Removed; Export define-class as standard-define-class.
2005-01-18(class-of): Changed from being re-exported to justMarius Vollmer1-2/+1
being exported.
2004-01-12(compute-get-n-set): Use '#:' in error message instead of ':'. ThanksMarius Vollmer1-1/+1
to Richard Todd!
2003-04-20* goops.scm (compute-getters-n-setters): Allow for primitiveMikael Djurfeldt1-6/+9
procedure thunks. (Thanks to Neil W. Van Dyke.)
2003-04-17* tests/goops.test: Added tests for correctness of classMikael Djurfeldt1-1/+2
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* goops.scm (compute-getters-n-setters): Check for bad init-thunk.Mikael Djurfeldt1-3/+9
2003-04-17CommentMikael Djurfeldt1-0/+3
2003-04-15* tests/goops.test: Added tests for class redefinition, objectMikael Djurfeldt1-5/+8
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-14FixMikael Djurfeldt1-1/+1
2003-04-13* goops.scm (compute-getters-n-setters/verify-accessors): BetterMikael Djurfeldt1-15/+33
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-05Changed license terms to the plain LGPL thru-out.Marius Vollmer1-35/+10
2003-03-19* goops.scm (process-class-pre-define-accessor): Temporary kludgeMikael Djurfeldt1-5/+10
to fix a problem introduced by my previous change.
2003-03-17* goops.scm (process-class-pre-define-generic,Mikael Djurfeldt1-20/+44
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-12* goops.scm (merge-generics): Make sure not to merge a gf withMikael Djurfeldt1-8/+11
itself. That would be the cause of a real binding collision.
2003-03-11IndentationMikael Djurfeldt1-1/+1
2003-03-11* goops.scm (define-extended-generics): New syntax.Mikael Djurfeldt1-10/+33
(<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-10* srfi-1.scm (iota map for-each map-in-order list-index memberMikael Djurfeldt1-1/+16
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-07* boot-9.scm (process-define-module): Handle #:duplicates.Mikael Djurfeldt1-0/+42
(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-06* srfi-1.c (scm_init_srfi_1): Extend root module map and for-eachMikael Djurfeldt1-0/+2
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-01-18* goops.scm (method): Construct a new copy of the constant '('())Mikael Djurfeldt1-1/+1
for every macro invocation.
2003-01-08* goops.scm (upgrade-generic-with-setter,Mikael Djurfeldt1-4/+69
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.
2002-11-16* goops.scm (standard-define-class): Changed definition to formDirk Herrmann1-1/+2
a 'real' macro definition.
2002-07-13* oop/goops.scm (define-generic, define-accessor): Make sure thatDirk Herrmann1-13/+16
define-generic and define-accessor will continue to work when mmacros are expanded before execution. * test-suite/tests/goops.test: Added tests for define-generic and define-accessor.
2002-07-13* oop/goops.scm (define-class): Make sure that define-class willDirk Herrmann1-17/+11
continue to work when mmacros are expanded before execution. * test-suite/tests/goops.test: Added tests for define-class.
2002-07-08* goops.scm (define-generic, define-accessor): Make sure thatDirk Herrmann1-6/+8
implicit redefines only happen on top level. * goops.scm (define-class, define-generic, define-accessor), goops/stklos.scm (define-class): Use mmacros instead of macros.
2001-10-21* lib.scm: Move module the system directives `export',Mikael Djurfeldt1-47/+45
`export-syntax', `re-export' and `re-export-syntax' into the `define-module' form. This is the recommended way of exporting bindings. * srfi-2.scm, srfi-4.scm, srfi-8.scm, srfi-9.scm, srfi-10.scm, srfi-11.scm, srfi-14.scm, srfi-16.scm: Move module the system directives `export', `export-syntax', `re-export' and `re-export-syntax' into the `define-module' form. This is the recommended way of exporting bindings. * goops.scm, goops/active-slot.scm, goops/compile.scm, goops/composite-slot.scm, goops/describe.scm, goops/dispatch.scm, goops/old-define-method.scm, goops/save.scm, goops/util.scm: Move module the system directives `export', `export-syntax', `re-export' and `re-export-syntax' into the `define-module' form. This is the recommended way of exporting bindings. * slib.scm (array-indexes): New procedure. (*features*): Extend. (Probably some of these options should be set elsewhere.) (Thanks to Aubrey Jaffer.) * and-let-star-compat.scm, and-let-star.scm, calling.scm, channel.scm, common-list.scm, debug.scm, debugger.scm, expect.scm, hcons.scm, lineio.scm, ls.scm, mapping.scm, null.scm, optargs.scm, poe.scm, popen.scm, pretty-print.scm, q.scm, r5rs.scm, rdelim.scm, regex.scm, runq.scm, safe-r5rs.scm, safe.scm, session.scm, slib.scm, streams.scm, string-fun.scm, syncase.scm, threads.scm: Move module the system directives `export', `export-syntax', `re-export' and `re-export-syntax' into the `define-module' form. This is the recommended way of exporting bindings.
2001-06-04Use `re-export' instead of `export' when re-exportingMarius Vollmer1-1/+3
`class-of'.
2001-06-03Added exception notice to all files.Marius Vollmer1-0/+24
2001-05-19Fix missing paren.Marius Vollmer1-1/+1
2001-05-19Call `%init-goops-builtins' instead of using theMarius Vollmer1-6/+9
`(oop goops goopscore)' module.
2001-05-05(initialize-object-procedure): UseMarius Vollmer1-4/+1
`valid-object-procedure?' instead of explicit tag magic. (object-procedure-tags): Removed.
2001-04-28 * goops.scm (method): rename list* to cons*.Rob Browning1-1/+1
2001-03-10* goops.scm (define-method): Only accept new syntax.Mikael Djurfeldt1-84/+97
* goops/old-define-method.scm: New file. * goops.scm, goops/save.scm, goops/composite-slot.scm, goops/active-slot.scm: Use new method syntax.
2001-03-04* goops/compile.scm (compile-method): Tag method closure for bodyMikael Djurfeldt1-4/+4
expansion. * goops.scm (change-object-class): Quote empty list constants. (method): Reverted previous change (enclosing body); Quote empty list. (initialize <method>): Supply `dummy-procedure' as default instead of creating a new closure. * goops/internal.scm: Re-export (oop goops) without copying bindings.
2001-03-04* goops.scm (change-object-class): Quote empty list constants.Mikael Djurfeldt1-7/+10
(method): Reverted previous change (enclosing body); Quote empty list. (initialize <method>): Pre-expand the method closure.
2001-02-23* goops.scm (method): Enclosed BODY by `(let () ...)'.Keisuke Nishida1-3/+3
This allows local defines at the beginning of methods.
2000-11-24* Goops does not provide its own version of logand any more.Dirk Herrmann1-2/+1
* Removed use of deprecated stuff from goops.