diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c index ff963d64c..73c4296a5 100644 --- a/libguile/vm-i-scheme.c +++ b/libguile/vm-i-scheme.c @@ -285,6 +285,12 @@ VM_DEFINE_FUNCTION (126, mod, "mod", 2) /* * GOOPS support */ +VM_DEFINE_FUNCTION (169, class_of, "class-of", 1) +{ + ARGS1 (obj); + RETURN (SCM_INSTANCEP (obj) ? SCM_CLASS_OF (obj) : scm_class_of (obj)); +} + VM_DEFINE_FUNCTION (127, slot_ref, "slot-ref", 2) { size_t slot; diff --git a/module/language/tree-il/compile-glil.scm b/module/language/tree-il/compile-glil.scm index 16212bb55..c708fe65d 100644 --- a/module/language/tree-il/compile-glil.scm +++ b/module/language/tree-il/compile-glil.scm @@ -103,6 +103,7 @@ ((list? . 1) . list?) (list . list) (vector . vector) + ((class-of . 1) . class-of) ((@slot-ref . 2) . slot-ref) ((@slot-set! . 3) . slot-set) ((vector-ref . 2) . vector-ref) diff --git a/module/oop/goops.scm b/module/oop/goops.scm index 00a5d68d3..a9e26b5aa 100644 --- a/module/oop/goops.scm +++ b/module/oop/goops.scm @@ -82,6 +82,12 @@ (eval-when (eval load compile) (%init-goops-builtins)) +(eval-when (eval load compile) + (use-modules ((language tree-il primitives) :select (add-interesting-primitive!))) + (add-interesting-primitive! 'class-of) + (add-interesting-primitive! '@slot-ref) + (add-interesting-primitive! '@slot-set!)) + ;; Then load the rest of GOOPS (use-modules (oop goops util) (oop goops dispatch) @@ -1125,11 +1131,6 @@ ;; the idea is to compile the index into the procedure, for fastest ;; lookup. Also, @slot-ref and @slot-set! have their own bytecodes. -(eval-when (compile) - (use-modules ((language tree-il primitives) :select (add-interesting-primitive!))) - (add-interesting-primitive! '@slot-ref) - (add-interesting-primitive! '@slot-set!)) - (eval-when (eval load compile) (define num-standard-pre-cache 20))