summaryrefslogtreecommitdiff
path: root/libguile
AgeCommit message (Collapse)AuthorFilesLines
2015-10-25Adapt stime.c to gnulib updateswip-stimeAndy Wingo1-329/+167
* libguile/stime.c: Rely on gnulib to provide time.h and strptime. (timet): Remove this internal define; replaced with time_t. (scm_from_struct_tm): Rename from filltime. Take the zone to set as an SCM. (scm_to_timezone, scm_struct_tm_zone_name): New helpers. (scm_to_struct_tm_and_timezone): Rename from bdtime2c and parse out a timezone_t as well. (scm_localtime): Use localtime_rz to avoid having to call tzset. (scm_gmtime): Use gmtime_r. (scm_mktime): Use mktime_z. (scm_strftime): Use the timezone_t argument to nstrftime. Use nstrftime with a NULL buffer to measure how big of a buffer to allocate. (scm_strptime): Use scm_from_struct_tm.
2015-10-22Small subr-call refactorAndy Wingo3-68/+55
* libguile/gsubr.c (scm_apply_subr): New internal helper. * libguile/vm-engine.c (subr-call): Call out to scm_apply_subr. * doc/ref/vm.texi (subr-call): Don't specify how the foreign pointer is obtained.
2015-10-22subr-call implementation simplificationAndy Wingo1-23/+22
* libguile/vm-engine.c (subr-call): Reference args from SP, not FP.
2015-10-21SP-relative local addressingAndy Wingo2-238/+227
* libguile/vm-engine.c: S24/S12/S8 operands addressed relative to the SP, not the FP. Cache the SP instead of a FP-relative locals pointer. Further cleanups to follow. * libguile/vm.c (vm_builtin_call_with_values_code): Adapt to mov operand addresing change. * module/language/cps/compile-bytecode.scm (compile-function): Reify SP-relative local indexes where appropriate. * module/system/vm/assembler.scm (emit-fmov*): New helper, exported as emit-fmov. (shuffling-assembler, define-shuffling-assembler): Rewrite to shuffle via push/pop/drop. (standard-prelude, opt-prelude, kw-prelude): No need to provide for shuffling args. * test-suite/tests/rtl.test: Update. * module/language/cps/slot-allocation.scm: Don't reserve slots 253-255.
2015-10-21Fix boot closure wrong-num-args errorAndy Wingo1-1/+2
* libguile/eval.c (prepare_boot_closure_env_for_eval): Fix issue if fixed closure is called with wrong number of arguments during bootstrap.
2015-10-21Prepare for SP-addressed localsAndy Wingo2-280/+353
* libguile/vm-engine.c: Renumber opcodes, and take the opportunity to fold recent additions into more logical places. Be more precise when describing the encoding of operands, to shuffle local references only and not constants, immediates, or other such values. (SP_REF, SP_SET): New helpers. (BR_BINARY, BR_ARITHMETIC): Take full 24-bit operands. Our shuffle strategy is to emit push when needed to bring far locals near, then pop afterwards, shuffling away far destination values as needed; but that doesn't work for conditionals, unless we introduce a trampoline. Let's just do the simple thing for now. Native compilation will use condition codes. (push, pop, drop): Back from the dead! We'll only use these for temporary shuffling though, when an opcode can't address the full 24-bit range. (long-fmov): New instruction, like long-mov but relative to the frame pointer. (load-typed-array, make-array): Don't use a compressed encoding so that we can avoid the shuffling case. It would be a pain, given that they have so many operands already. * module/language/bytecode.scm (compute-instruction-arity): Update for new instrution word encodings. * module/system/vm/assembler.scm: Update to expose some opcodes directly, without the need for shuffling wrappers. Adapt to instruction word encodings change. * module/system/vm/disassembler.scm (disassembler): Adapt to instruction coding change.
2015-10-21Replace dynamic link on stack with previous frame sizeAndy Wingo3-55/+12
* libguile/frames.h (SCM_FRAME_DYNAMIC_LINK) (SCM_FRAME_SET_DYNAMIC_LINK): Instead of storing the absolute value of the previous FP, store its offset from the current FP. This allows us to avoid relinking when composing continuations or when relocating the stack. * libguile/frames.c (scm_frame_dynamic_link, scm_c_frame_previous): No need to relocate the dynamic link. * libguile/vm.c (vm_return_to_continuation_inner): (vm_reinstate_partial_continuation_inner, vm_expand_stack_inner): Don't relocate the frame pointer chain. (scm_i_vm_mark_stack): Terminate when FP is above stack_top, not when 0. (make_vm): Init FP to stack_top.
2015-10-21Rename union scm_vm_stack_element membersAndy Wingo5-38/+39
* libguile/frames.h (union scm_vm_stack_element): Rename members from scm, ip, etc to as_scm, as_ip, etc. Adapt users.
2015-10-21Remove sp from scm_vm_contAndy Wingo4-8/+4
* libguile/vm.h (struct scm_vm_cont): Remove "sp" member; it's always the same as stack_bottom. * libguile/vm.c (scm_i_vm_cont_to_frame, scm_i_vm_capture_stack): (vm_return_to_continuation_inner): * libguile/stacks.c (scm_make_stack): * libguile/continuations.c (scm_i_continuation_to_frame): Adapt.
2015-10-21VM caches address of local 0 instead of FPAndy Wingo1-55/+67
* libguile/vm-engine.c (vm_engine): Cache the address of local 0 instead of the FP. This makes locals access a bit cheaper, but we still have to negate the index. The right fix is to index relative to the SP instead. That's a more involved change, so we punt until later.
2015-10-21VM stack grows downwardAndy Wingo15-391/+399
Adapt VM stack to grow downward. This will make native compilation look more like the VM code, as we will be able to use native CALL instructions, taking proper advantage of the return address buffer. * libguile/continuations.c (scm_i_continuation_to_frame): Record offsets from stack top. * libguile/control.c (scm_i_prompt_pop_abort_args_x): Adapt for reversed order of arguments, and instead of relying on the abort to push on the number of arguments, make the caller save the stack depth, which allows us to compute the number of arguments ourselves. (reify_partial_continuation, scm_c_abort): Adapt to reversed stack order. * libguile/dynstack.c (scm_dynstack_wind_prompt): Since we wind the stack in a downward direction, subtract the reloc instead of adding it. * libguile/dynstack.h (SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY): Remove flag; instead rely on prompt-establishing code to save the stack depth. * libguile/eval.c (eval): Remove extraneous "volatile" declarations for variables that are not re-set between the setjmp and any longjmp. Adapt to save stack depth before instating the prompt. * libguile/foreign.c (scm_i_foreign_call): Adapt to receive arguments in reverse order. * libguile/frames.c (frame_stack_top, scm_i_frame_stack_top): Adapt to compute stack top instead of stack bottom. (scm_c_frame_closure): Adapt to stack growth change. (scm_frame_num_locals, scm_frame_local_ref, scm_frame_set_x): Use union data type to access stack. (RELOC): Reformat. (scm_c_frame_previous): Adapt to stack growth change. * libguile/frames.h: Adapt stack diagram to indicate that the stack grows up. (union scm_vm_stack_element): New data type used to access items on the stack. (SCM_FRAME_PREVIOUS_SP) (SCM_FRAME_RETURN_ADDRESS, SCM_FRAME_SET_RETURN_ADDRESS) (SCM_FRAME_DYNAMIC_LINK, SCM_FRAME_SET_DYNAMIC_LINK) (SCM_FRAME_LOCAL, SCM_FRAME_NUM_LOCALS): Adapt to stack representation change. (SCM_FRAME_SLOT): New helper. (SCM_VM_FRAME_FP, SCM_VM_FRAME_SP): Adapt to stack growth change. * libguile/stacks.c (scm_make_stack): Record offsets from top of stack. * libguile/throw.c (catch): Adapt to scm_i_prompt_pop_abort_args_x change. * libguile/vm-engine.c (ALLOC_FRAME, RESET_FRAME): (FRAME_LOCALS_COUNT_FROM): Adapt to stack growth change. (LOCAL_ADDRESS): Use SCM_FRAME_SLOT to get the address as the proper data type. (RETURN_ONE_VALUE, RETURN_VALUE_LIST): Adapt to stack growth change. (apply): Shuffling up the SMOB apply args can cause the stack to expand, so use ALLOC_FRAME instead of RESET_FRAME. (vm_engine): Adapt for stack growth change. * libguile/vm.c (vm_increase_sp, vm_push_sp, vm_restore_sp): Adapt to stack representation change. (scm_i_vm_cont_to_frame): Adapt to take offsets from the top. (scm_i_vm_capture_stack): Adapt to capture from the top. (vm_return_to_continuation_inner): Adapt for data type changes. (vm_return_to_continuation): Likewise, and instead of looping, just splat the saved arguments on with memcpy. (vm_dispatch_hook): Adapt to receive arguments in the reverse order. Adapt callers. (vm_abort): There is never a tail argument. Adapt to stack representation change. (vm_reinstate_partial_continuation) (vm_reinstate_partial_continuation_inner): Adapt to stack growth change. (allocate_stack, free_stack): Adapt to data type change. (expand_stack): Don't try to mremap(), as you can't grow a mapping from the bottom. Without knowing that there's a free mapping space right below the old stack, which there usually isn't on Linux, we have to copy. We can't use MAP_GROWSDOWN because Linux is buggy. (make_vm): Adapt to stack representation changes. (return_unused_stack_to_os): Round down instead of up, as the stack grows down. (scm_i_vm_mark_stack): Adapt to walk up the stack. (scm_i_vm_free_stack): Adapt to scm_vm changes. (vm_expand_stack_inner, reset_stack_limit, vm_expand_stack): Adapt to the stack growing down. (scm_call_n): Adapt to the stack growing down. Don't allow argv to point into the stack. * libguile/vm.h (struct scm_vm, struct scm_vm_cont): Adapt to hold the stack top and bottom.
2015-08-13Allow decoding of UTF-8 containing U+FFFD, the replacement character.Mark H Weaver2-7/+8
* libguile/strings.c (scm_from_utf8_stringn): Use 'u8_mbtoucr' and check for a decoding error by its 'nbytes' return value. Previously we used 'u8_mbtouc' and improperly assumed that a U+FFFD character indicated a decoding error. * libguile/symbols.c (utf8_string_equals_wide_string): Likewise. * test-suite/tests/bytevectors.test (exception:decoding-error): New variable. ("2.9 Operations on Strings"): Add tests.
2015-06-05Fix write beyond stack boundary in vm-engine.cAndy Wingo1-1/+2
* libguile/vm-engine.c (RETURN_ONE_VALUE, RETURN_VALUE_LIST): These helpers, used in subr-call and the like, might not actually have enough space to push the return values. Use ALLOC_FRAME instead of RESET_FRAME, for that reason.
2015-03-12Remove unused "nargs" field of memoized call expressionsAndy Wingo2-13/+12
* libguile/eval.c (eval): * libguile/memoize.c (MAKMEMO_CALL, memoize, unmemoize): * module/ice-9/eval.scm (primitive-eval): Remove "nargs" field from memoized call expressions, and adapt callers.
2015-03-09Adapt GDB integration to newest patchesAndy Wingo1-21/+35
* libguile/libguile-2.2-gdb.scm (vm-frame-function-name): Don't default to the address, as we will have better identifying info via the file name. (vm-frame-source): New helper. (compile-time-cond): For some reason "else" matching wasn't working; punt and use expressions. (snarfy-frame-decorator): Rename from decorator, and adapt to new version of Guile frame filter patch. (vm-frame-filter): Adapt to frame filter changes, and fill in source info.
2015-02-18Non-vector 1D arrays print as #1()Daniel Llorens1-2/+3
* libguile/arrays.c (scm_i_print_array): Print the dimension whenever the array is a true scm_tc7_array. * test-suite/tests/arrays.test: Check that non-vector 1D arrays print as expected.
2015-02-17Struct and array GDB pretty printers hint as arraysAndy Wingo1-9/+53
* libguile/libguile-2.2-gdb.scm (make-scm-pretty-printer-worker): (%scm-pretty-printer): Refactor to avoid printing all struct / array fields by hinting these as arrays. The resulting print is not as faithful to the original data, but that's probably OK.
2015-02-17GDB support: add frame annotators and filtersAndy Wingo1-0/+91
These features depend on a patch to GDB that has not been merged yet. If GDB doesn't support the annotator/filter interface, the code have no effect. * libguile/libguile-2.2-gdb.scm (compile-time-cond): New helper. (snarfy-frame-annotator): Simple annotator that gives subr names for snarfed gsubrs. (vm-frame-filter): New filter that interleaves Scheme frames with C frames on the stack when the user asks for a backtrace.
2015-02-17De-bitrot libguile-2.2-gdb.scmAndy Wingo1-50/+155
* libguile/libguile-2.2-gdb.scm: Update to work with Guile 2.2 stacks. Represent the VM stack as a SRFI-41 stream, which will work better with the frame filter interface. Add support for getting the vm frame's function name, if possible.
2015-02-10Add `scm_smob_type_class()'.Andy Wingo2-1/+15
* libguile/smob.h: * libguile/smob.c (scm_smob_type_class): New function, to access the GOOPS class for a SMOB type.
2015-02-06Add #:static-slot-allocation?Andy Wingo2-0/+3
* libguile/goops.h (SCM_VTABLE_FLAG_GOOPS_STATIC): Reserve the fourth GOOPS flag to indicate that a class has static slot allocation. * libguile/goops.c (scm_init_goops_builtins): Define vtable-flag-goops-static for goops.scm. * module/oop/goops.scm (class-has-statically-allocated-slots?): New helper. (build-slots-list): Instead of the ad-hoc checks for <class> or <slot>, use the new helper. (initialize): Accept #:static-slot-allocation? keyword. * module/system/foreign-object.scm (make-foreign-object-type): Declare foreign object classes as having static slot allocation. * test-suite/tests/goops.test ("static slot allocation"): Add tests.
2015-01-23Use a vtable bit to mark <slot> instancesAndy Wingo2-0/+3
* libguile/goops.h (SCM_VTABLE_FLAG_GOOPS_SLOT): Allocate another vtable flag to indicate that instances of this vtable are slots. * libguile/goops.c (scm_init_goops_builtins): Export vtable-flag-goops-slot to Scheme. * module/oop/goops.scm (<slot>, slot?, make-standard-class, initialize): Arrange for <slot> classes to have the vtable-flag-goops.slot. (build-slots-list): Ensure that <slot> slots are statically laid out.
2015-01-23Introduce <slot> objects in GOOPSAndy Wingo1-0/+2
* module/oop/goops.scm (fold-class-slots): Change format to use proper slot specifications. (fold-slot-slots): Flesh out with all needed slots. (<class>): Update cons-layout to deal with new fold-class-slots form. Don't create slots; we do that later. (is-a?, get-keyword, *unbound, unbound?, %allocate-instance): Move definitions up. (<slot>, slot?): New definitions. (slot-definition-name, slot-definition-allocation) (slot-definition-init-keyword, slot-definition-init-form) (slot-definition-init-value, slot-definition-init-thunk) (slot-definition-options, slot-definition-getter) (slot-definition-setter, slot-definition-accessor) (slot-definition-slot-ref, slot-definition-slot-set!) (slot-definition-index, slot-definition-size): New definitions as accessors on <slot> objects. (class-slot-definition): Adapt to class-slots change. (direct-slot-definition-class, make-slot): New definitions. (make): Define a boot version that can allocate <slot> instances. (compute-direct-slot-definition) (compute-direct-slot-definition-initargs) (effective-slot-definition-class, compute-effective-slot-definition): New definitions. (build-slots-list): Adapt to slots being <slot> objects. (compute-get-n-set): New boot definition. (allocate-slots): New definition. Replaces compute-getters-n-setters. (%compute-layout, %prep-layout): Adapt to changes. (make-standard-class): Make <slot> objects for direct-slots, and handle the allocate-slots protocol. (<foreign-slot>): Inherit from <slot>. (get-slot-value-using-name, set-slot-value-using-name!) (test-slot-existence): Adapt to using slot definition objects. (make-class): Allow slot specs or <slot> objects as the `slots' argument. (write): New method on <slot>. (class-slot-ref, class-slot-set!): Reimplement. (compute-slot-accessors, compute-getter-method) (compute-setter-method): Adapt to changes. (compute-getters-n-setters): Remove. Yay! (compute-get-n-set): Adapt to use effective slot definitions instead of the getters-n-setters for #:class / #:each-subclass allocation. (%initialize-object): Adapt. (initialize): New method for <slot>. Adapt method for <class>. * module/oop/goops/active-slot.scm (compute-get-n-set): * module/oop/goops/composite-slot.scm (compute-propagated-get-n-set): Use slot-definition-options to access options of slot. * test-suite/tests/goops.test ("bad init-thunk"): Fix to be a "pass-if" instead of an "expect-fail".
2015-01-23The GOOPS "unbound" value is a unique pairAndy Wingo2-32/+6
* libguile/goops.c (SCM_GOOPS_UNBOUND, SCM_GOOPS_UNBOUNDP): Remove internal macros. (scm_make_unbound, scm_unbound_p): Remove internal functions. (scm_sys_clear_fields_x): Add "unbound" parameter, for the init value. * module/oop/goops.scm (*unbound*): Define in Scheme as a simple heap-allocated value. (unbound?): New definition. (%allocate-instance): Pass *unbound* to %clear-fields!. (make-class, slot-definition-init-value) (slot-definition-init-form, make-closure-variable): Use *unbound* instead of (make-unbound), which is now gone. * module/oop/goops/active-slot.scm (compute-get-n-set): Use *unbound* instead of make-unbound. This module uses the GOOPS internals module; perhaps we should export make-unbound or something... * module/oop/goops/save.scm (make-unbound): Export our own make-unbound definition, for use by residualized save code. * module/language/ecmascript/base.scm (<undefined>, *undefined*): Use a unique object kind and instance for the undefined value. * libguile/vm.c (scm_i_vm_mark_stack): Fill the stack with SCM_UNSPECIFIED instead of SCM_UNBOUND.
2015-01-23GOOPS: Deprecate "using-class" procs like slot-ref-using-classAndy Wingo4-42/+43
* libguile/deprecated.h: * libguile/goops.c: * libguile/goops.h: * libguile/deprecated.c (scm_slot_ref_using_class): (scm_slot_set_using_class_x): (scm_slot_bound_using_class_p): (scm_slot_exists_using_class_p): Deprecate. * module/oop/goops.scm (slot-ref-using-class, slot-set-using-class!) (slot-bound-using-class?, slot-exists-using-class?): Deprecate. Change to check that `class' is indeed the class of `obj', as required, and then dispatch to slot-ref et al.
2015-01-23Manipulate GOOPS vtable flags from Scheme, for speedAndy Wingo2-49/+17
* libguile/goops.h: Remove unimplemented declarations of scm_make_next_method, scm_sys_invalidate_method_cache_x, and stklos_version. (scm_sys_invalidate_class_x): Remove helper definition. This was exported in the past but shouldn't have been. * libguile/goops.c (scm_sys_make_vtable_vtable): Rename from scm_sys_make_root_class, and don't do anything about flags. (scm_sys_bless_applicable_struct_vtables_x, scm_class_p) (scm_sys_invalidate_class_x): Remove; we do these in Scheme now. (scm_init_goops_builtins): Define Scheme values for vtable flags. * module/oop/goops.scm (vtable-flag-goops-metaclass) (class-add-flags!, class-clear-flags!, class-has-flags?) (class?, instance?): New definitions. (<class>): Add GOOPS metaclass flags from Scheme. (<applicable-struct-class>, <applicable-struct-with-setter-class>): Add flags from Scheme. (make, initialize): Add class flags as appropriate. (class-redefinition): Clear the "valid" flag on the old class. (check-slot-args): Use instance? instead of a CPL check.
2015-01-23scm_make cleanupAndy Wingo1-6/+2
* libguile/goops.c (scm_make): Remove SCM_DEFINE around scm_make; the real definition is in Scheme.
2015-01-23Cosmetic goops refactors.Andy Wingo1-97/+56
* module/oop/goops.scm: Update comments. * libguile/goops.c: Cosmetic reorderings, re-commentings, and de-commentings.
2015-01-23Incorporate %inherit-magic! into %init-layout!Andy Wingo2-35/+29
* libguile/goops.c (scm_make_standard_class, scm_sys_init_layout_x): Move definitions up. Incorporate scm_sys_inherit_magic_x into scm_sys_init_layout_x. * libguile/goops.h: Remove scm_sys_init_layout_x declaration.
2015-01-23goops.c no longer knows about <class> slot allocationAndy Wingo2-36/+13
* libguile/goops.c (scm_class_of): Access "redefined" slot by name in the case where we need to change the class of an instance. (scm_sys_goops_early_init): Move up capture of class-precedence-list so SCM_SUBCLASSP can use it. * libguile/goops.h (SCM_CLASS_CLASS_LAYOUT, scm_si_redefined) (scm_si_direct_supers, scm_si_direct_slots, scm_si_direct_subclasses) (scm_si_direct_methods, scm_si_cpl scm_si_slots) (scm_si_getters_n_setters, SCM_N_CLASS_SLOTS, SCM_OBJ_CLASS_REDEF): Remove. Now C code has no special knowledge about the layout of GOOPS classes. (SCM_SUBCLASSP): Use scm_class_precedence_list to get CPL. (SCM_INST, SCM_ACCESSORS_OF): Remove unused macros that were undocumented and nonsensical.
2015-01-23Reimplement inherit-applicable! in SchemeAndy Wingo1-36/+7
* libguile/goops.c: Move captured keywords and symbols up to the top. (scm_i_inherit_applicable): Dispatch to Scheme. (scm_sys_goops_early_init): Capture inherit-applicable!. * module/oop/goops.scm (inherit-applicable!): Scheme implementation.
2015-01-23Reimplement %allocate-instance in SchemeAndy Wingo2-33/+14
* libguile/goops.c (scm_sys_clear_fields_x): New function. (scm_sys_allocate_instance): Remove. It was available to C but not to Scheme and it's really internal. * libguile/goops.h: Remove scm_sys_allocate_instance. * module/oop/goops.scm (%allocate-instance): Implement in Scheme, using allocate-struct and %clear-fields!. (make, shallow-clone, deep-clone, allocate-instance): Adapt to %allocate-instance not taking an initargs argument.
2015-01-23Re-use the vtable "size" field for GOOPS nfieldsAndy Wingo2-5/+3
* module/oop/goops.scm (fold-<class>-slots): The first "reserved" slot is actually for instance sizes, used by the "simple struct" mechanism. Reuse this field for GOOPS's "nfields". (make-standard-class, <class>, initialize): Adapt order of field initializations. * libguile/goops.h (SCM_CLASS_CLASS_LAYOUT, SCM_N_CLASS_SLOTS) * libguile/goops.c (scm_sys_allocate_instance): Adapt.
2015-01-23Move <class> initialization to SchemeAndy Wingo3-31/+16
* libguile/goops.c (scm_sys_make_root_class): Just make the vtable-vtable, and leave initialization to Scheme. * libguile/struct.c (scm_i_make_vtable_vtable): Change to take a full list of fields, not just the extra fields. (scm_init_struct): Adapt to scm_i_make_vtable_vtable change. * module/oop/goops.scm (<class>): Compute layout for <class>, and initialize <class> from here.
2015-01-23Deprecate scm_get_keywordAndy Wingo4-56/+15
* libguile/deprecated.c (scm_get_keyword): Deprecate. * libguile/deprecated.h: * libguile/goops.c: * libguile/goops.h:
2015-01-23Rewrite %initialize-object in SchemeAndy Wingo2-69/+0
* libguile/goops.h: * libguile/goops.c (scm_sys_initialize_object): Remove C interface. This function was only really useful as part of a GOOPS initialize method but was not exported from the goops module. * module/oop/goops.scm (get-keyword, %initialize-object): Implement in Scheme.
2015-01-23Minor goops.c tidyingAndy Wingo1-7/+5
* libguile/goops.c: Reorder static variables. Remove unused sym_procedure.
2015-01-23Remove scm_c_extend_primitive_genericAndy Wingo2-68/+1
* libguile/goops.h (scm_c_extend_primitive_generic): Remove public interface. This was introduced in 2003 with the "extended" generics but never documented, unused as far as I can tell, and is better accessed from Scheme. * libguile/goops.c: Remove support for scm_c_extend_primitive_generic. Simplify capture of change-class.
2015-01-23No more concept of "pure generics"Andy Wingo2-19/+1
* libguile/goops.h (SCM_PUREGENERICP, SCM_VALIDATE_PUREGENERIC) (SCM_VTABLE_FLAG_GOOPS_PURE_GENERIC, SCM_CLASSF_PURE_GENERIC): Remove. * libguile/goops.c (scm_set_primitive_generic_x): Use SCM_GENERICP, not SCM_PUREGENERICP. (scm_sys_bless_pure_generic_vtable_x): Remove; this flag isn't checked. * module/oop/goops.scm: Don't call %bless-pure-generic-vtable!; there's no need.
2015-01-23Remove TEST_CHANGE_CLASSAndy Wingo1-30/+0
* libguile/goops.c (TEST_CHANGE_CLASS): Remove unused macro and comment.
2015-01-23Remove pure-generic?Andy Wingo2-20/+0
* libguile/goops.h: * libguile/goops.c (scm_pure_generic_p): Remove function only compiled in debug mode.
2015-01-23Goops slot-unbound / slot-missing cleanupsAndy Wingo1-6/+0
* libguile/goops.c: Remove useless slot-unbound / slot-missing captures.
2015-01-23Move slot-ref et al to SchemeAndy Wingo1-206/+50
* libguile/goops.c: * module/oop/goops.scm (slot-ref-using-class, slot-set-using-class!): (slot-bound-using-class?, slot-exists-using-class?, slot-set!): (slot-bound?, slot-exists?): Move implementation to Scheme.
2015-01-23Port method and generic accessors to SchemeAndy Wingo1-73/+31
* libguile/goops.c: * module/oop/goops.scm (generic-function-methods) (method-generic-function, method-specializers, method-procedure): Port to Scheme.
2015-01-23<class> accessors implemented in SchemeAndy Wingo1-57/+47
* libguile/goops.c (scm_class_p): New internal helper, exported to goops.scm. (scm_class_name, scm_class_direct_supers, scm_class_direct_slots): (scm_class_direct_subclasses, scm_class_direct_methods): (scm_class_precedence_list, scm_class_slots): Dispatch to Scheme. (scm_sys_goops_early_init): Capture <class> accessors. * module/oop/goops.scm (define-class-accessor): New helper. (class-name, class-direct-supers, class-direct-slots): (class-direct-subclasses, class-direct-methods) (class-precedence-list, class-slots): Define in Scheme. (compute-std-cpl, compute-cpl): Move lower.
2015-01-23Remove GOOPS random stateAndy Wingo1-3/+0
* libguile/goops.c: Remove GOOPS random state, now that there are no more hashsets.
2015-01-23More goops.c cleanups, and fix a security issueAndy Wingo1-49/+37
* 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-23Remove unused union scm_t_debug_infoAndy Wingo1-13/+1
* libguile/debug.h (union scm_t_debug_info): Remove unused type declaration.
2015-01-23More unused code removal in GOOPSAndy Wingo1-1/+0
* libguile/goops.c: Remove unused sym_memoize_method_x.
2015-01-23Remove private var_no_applicable_method captureAndy Wingo1-4/+0
* libguile/goops.c (var_no_applicable_method): Remove unused capture. (sym_no_applicable_method): Remove unused symbol.