[ "IN: classes.tuple.tests TUPLE: initial-slot { x initial-class initial: 3 } ;" eval( -- ) ]
[ error>> T{ bad-initial-value f "x" 3 initial-class } = ] must-fail-with
+
+[ "IN: classes.tuple.tests USE: math TUPLE: foo < foo ;" eval( -- ) ] [ error>> bad-superclass? ] must-fail-with
+
+[ "IN: classes.tuple.tests USE: math TUPLE: foo < + ;" eval( -- ) ] [ error>> bad-superclass? ] must-fail-with
] [ 2drop f ] if
] [ 2drop f ] if ; inline
-GENERIC: final-class? ( class -- ? )
+GENERIC: final-class? ( object -- ? )
M: tuple-class final-class? "final" word-prop ;
M: class final-class? drop t ;
+M: object final-class? drop f ;
+
<PRIVATE
: tuple-predicate-quot/1 ( class -- quot )
bi-curry* bi and ;
: check-superclass ( superclass -- )
- dup final-class? [ bad-superclass ] when drop ;
+ dup final-class? [ bad-superclass ] when
+ dup class? [ bad-superclass ] unless drop ;
GENERIC# (define-tuple-class) 2 ( class superclass slots -- )