]> gitweb.factorcode.org Git - factor.git/commitdiff
forward/backward constructors instead of auto-constructors
authorDoug Coleman <erg@jobim.local>
Thu, 11 Jun 2009 19:31:04 +0000 (14:31 -0500)
committerDoug Coleman <erg@jobim.local>
Thu, 11 Jun 2009 19:31:04 +0000 (14:31 -0500)
basis/constructors/constructors-tests.factor
basis/constructors/constructors.factor

index ae7fd0409c7fd69e03e6a8064a2e5e0bfc079411..59ecb8ff77c6554581a57d7a6abe1106b505cdd6 100644 (file)
@@ -69,11 +69,18 @@ CONSTRUCTOR: inherit2 ( a -- obj ) ;
 
 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
index a2c8d7637dd136256d72b094f035d400faa60b15..b4091a1234ea251fa22497c8da88bfaa74ed52e4 100644 (file)
@@ -48,9 +48,10 @@ MACRO:: slots>constructor ( class slots -- quot )
     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 )
@@ -60,7 +61,7 @@ MACRO:: slots>constructor ( class slots -- quot )
     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