From d46d063f5f3a0dcf11f5924eb2135b2f29c55ca9 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 1 Sep 2009 04:02:44 -0500 Subject: [PATCH] inheriting from itself would hang a tuple definition. only breaks if tuple is being redefined --- core/classes/tuple/parser/parser-tests.factor | 5 +++++ core/classes/tuple/parser/parser.factor | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/classes/tuple/parser/parser-tests.factor b/core/classes/tuple/parser/parser-tests.factor index 4ee31936a9..0121e217b9 100644 --- a/core/classes/tuple/parser/parser-tests.factor +++ b/core/classes/tuple/parser/parser-tests.factor @@ -142,3 +142,8 @@ TUPLE: parsing-corner-case x ; " x 3 }" } "\n" join eval( -- tuple ) ] [ error>> unexpected-eof? ] must-fail-with + +TUPLE: bad-inheritance-tuple ; +[ + "IN: classes.tuple.parser.tests TUPLE: bad-inheritance-tuple < bad-inheritance-tuple ;" eval( -- ) +] [ error>> bad-inheritance? ] must-fail-with diff --git a/core/classes/tuple/parser/parser.factor b/core/classes/tuple/parser/parser.factor index 7ba850f744..61267a464f 100644 --- a/core/classes/tuple/parser/parser.factor +++ b/core/classes/tuple/parser/parser.factor @@ -56,11 +56,18 @@ ERROR: invalid-slot-name name ; : parse-tuple-slots ( -- ) ";" parse-tuple-slots-delim ; +ERROR: bad-inheritance class superclass ; + +: check-self-inheritance ( class1 class2 -- class1 class2 ) + 2dup = [ bad-inheritance ] when ; + : parse-tuple-definition ( -- class superclass slots ) CREATE-CLASS - scan { + scan 2dup = [ ] when { { ";" [ tuple f ] } - { "<" [ scan-word [ parse-tuple-slots ] { } make ] } + { "<" [ + scan-word check-self-inheritance [ parse-tuple-slots ] { } make + ] } [ tuple swap [ parse-slot-name [ parse-tuple-slots ] when ] { } make ] } case dup check-duplicate-slots