diff --git a/core/classes/union/union-tests.factor b/core/classes/union/union-tests.factor index 164c51f371..6f927441a4 100644 --- a/core/classes/union/union-tests.factor +++ b/core/classes/union/union-tests.factor @@ -132,3 +132,7 @@ PREDICATE: numba-ova-10 < union{ float integer } [ t ] [ 100.0 numba-ova-10? ] unit-test [ f ] [ 5 numba-ova-10? ] unit-test [ f ] [ 5.75 numba-ova-10? ] unit-test + +! Issue #420 lol +[ "IN: issue-420 UNION: omg omg ;" eval( -- ) ] +[ error>> cannot-reference-self? ] must-fail-with diff --git a/core/classes/union/union.factor b/core/classes/union/union.factor index 13563a1178..2a0afef3a1 100644 --- a/core/classes/union/union.factor +++ b/core/classes/union/union.factor @@ -53,10 +53,15 @@ M: union-class update-class define-union-predicate ; : (define-union-class) ( class members -- ) f swap f union-class make-class-props (define-class) ; +ERROR: cannot-reference-self class members ; + +: check-self-reference ( class members -- class members ) + 2dup member-eq? [ cannot-reference-self ] when ; + PRIVATE> : define-union-class ( class members -- ) - [ (define-union-class) ] + [ check-self-reference (define-union-class) ] [ drop changed-conditionally ] [ drop update-classes ] 2tri ;