TUPLE: inherit3 hp max-hp ;
TUPLE: inherit4 < inherit3 ;
+TUPLE: inherit5 < inherit3 ;
CONSTRUCTOR: inherit3 ( -- obj )
dup max-hp>> >>hp ;
-AUTO-CONSTRUCTOR: inherit4 ( -- obj )
+BACKWARD-CONSTRUCTOR: inherit4 ( -- obj )
10 >>max-hp ;
[ 10 ] [ <inherit4> hp>> ] unit-test
+
+FORWARD-CONSTRUCTOR: inherit5 ( -- obj )
+ 5 >>hp
+ 10 >>max-hp ;
+
+[ 5 ] [ <inherit5> hp>> ] unit-test
class lookup-initializer
'[ @ _ execute( obj -- obj ) ] effect define-declared ;
-:: define-auto-constructor ( constructor-word class effect def -- )
+:: define-auto-constructor ( constructor-word class effect def reverse? -- )
constructor-word class effect def (define-constructor)
- class superclasses [ lookup-initializer ] map sift reverse
+ class superclasses [ lookup-initializer ] map sift
+ reverse? [ reverse ] when
'[ @ _ [ execute( obj -- obj ) ] each ] effect define-declared ;
: scan-constructor ( -- class word )
scan-constructor complete-effect parse-definition ;
SYNTAX: CONSTRUCTOR: parse-constructor define-constructor ;
-
-SYNTAX: AUTO-CONSTRUCTOR: parse-constructor define-auto-constructor ;
+SYNTAX: FORWARD-CONSTRUCTOR: parse-constructor f define-auto-constructor ;
+SYNTAX: BACKWARD-CONSTRUCTOR: parse-constructor t define-auto-constructor ;
"initializers" create-vocab drop