]> gitweb.factorcode.org Git - factor.git/commitdiff
classes.struct: disable faster equal? for now
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 17 Jan 2022 19:35:05 +0000 (11:35 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 17 Jan 2022 19:35:05 +0000 (11:35 -0800)
It was causing an issue bootstrapping.

basis/classes/struct/struct.factor

index df7896a40426a3f32bef1594aec4b4bafa2b9888..00ed0a6fbb250fa2c38c1ba7693942dc4e221fac 100644 (file)
@@ -162,7 +162,11 @@ M: struct-class writer-quot
 : offset-of ( field struct -- offset )
     struct-slots slot-named offset>> ; inline
 
-! XXX: make this faster
+M: struct equal?
+    2dup [ class-of ] same? [
+        [ struct-slot-values ] same?
+    ] [ 2drop f ] if ; inline
+
 M: struct hashcode*
     nip dup >c-ptr [ struct-slot-values hashcode ] [ drop 0 ] if ; inline
 
@@ -283,10 +287,11 @@ M: struct binary-zero? binary-object uchar <c-direct-array> [ 0 = ] all? ; inlin
     ] [ drop f ] if ;
 
 : (struct-methods) ( class -- )
-    [ define-struct-slot-values-method ]
-    [ define-clone-method ]
-    [ define-equal-method ]
-    tri ;
+    {
+        [ define-struct-slot-values-method ]
+        [ define-clone-method ]
+        ! [ define-equal-method ]
+    } cleave ;
 
 : check-struct-slots ( slots -- )
     [ type>> lookup-c-type drop ] each ;
@@ -361,7 +366,7 @@ M: struct-class reset-class
         [ forget-struct-slot-accessors ]
         [ forget-struct-slot-values-method ]
         [ forget-clone-method ]
-        [ forget-equal-method ]
+        [ forget-equal-method ]
         [ { "c-type" "layout" "struct-size" } remove-word-props ]
         [ call-next-method ]
     } cleave ;