]> gitweb.factorcode.org Git - factor.git/commitdiff
macros: check macro effect is real-macro-effect.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 19 Jul 2015 18:16:19 +0000 (11:16 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 19 Jul 2015 18:16:19 +0000 (11:16 -0700)
basis/macros/macros-tests.factor
basis/macros/macros.factor

index 58c1de3dadc9f98938b322fd3d95df325be622c3..f02ea299f7aca2192985c59cfea7117e69ad9a6c 100644 (file)
@@ -20,7 +20,7 @@ unit-test
 
 { f } [ \ see-test macro? ] unit-test
 
-{ } [ "USING: macros stack-checker kernel ; IN: hanging-macro MACRO: c ( quot -- ) infer drop [ ] ;" eval( -- ) ] unit-test
+{ } [ "USING: macros stack-checker kernel ; IN: hanging-macro MACRO: c ( quot -- quot ) infer drop [ ] ;" eval( -- ) ] unit-test
 { } [ "USING: macros kernel ; IN: hanging-macro : a ( -- ) [ a ] c ;" eval( -- ) ] unit-test
 
 { } [ [ "hanging-macro" forget-vocab ] with-compilation-unit ] unit-test
index 31ef0e4037024369876345eed0dae83b20fed775..9b17ba04264f29260f24268d4938c9b343405c19 100644 (file)
@@ -9,13 +9,18 @@ IN: macros
 : real-macro-effect ( effect -- effect' )
     in>> { "quot" } <effect> ;
 
+: check-macro-effect ( word effect -- )
+    [ real-macro-effect ] keep 2dup effect=
+    [ 3drop ] [ bad-stack-effect ] if ;
+
 PRIVATE>
 
 : define-macro ( word definition effect -- )
-    real-macro-effect {
+    {
+        [ nip check-macro-effect ]
         [
             [ '[ _ _ call-effect ] ] keep
-            [ memoize-quot '[ @ call ] ] keep
+            [ memoize-quot ] keep
             define-declared
         ]
         [ drop "macro" set-word-prop ]