Macro expansion errors are now wrapped

db4
Slava Pestov 2009-04-10 07:08:16 -05:00
parent 78503a1b9c
commit 8290624733
4 changed files with 29 additions and 3 deletions

View File

@ -82,3 +82,8 @@ TUPLE: unknown-primitive-error ;
: unknown-primitive-error ( -- * )
\ unknown-primitive-error inference-warning ;
TUPLE: transform-expansion-error word error ;
: transform-expansion-error ( word error -- * )
\ transform-expansion-error inference-error ;

View File

@ -79,3 +79,12 @@ M: inconsistent-recursive-call-error summary
M: unknown-primitive-error summary
drop
"Cannot determine stack effect statically" ;
M: transform-expansion-error summary
drop
"Compiler transform threw an error" ;
M: transform-expansion-error error.
[ summary print ]
[ "Word: " write word>> . nl ]
[ error>> error. ] tri ;

View File

@ -1,6 +1,6 @@
IN: stack-checker.transforms.tests
USING: sequences stack-checker.transforms tools.test math kernel
quotations stack-checker accessors combinators words arrays
quotations stack-checker stack-checker.errors accessors combinators words arrays
classes classes.tuple ;
: compose-n-quot ( word n -- quot' ) <repetition> >quotation ;
@ -70,4 +70,11 @@ DEFER: curry-folding-test ( quot -- )
: member?-test ( a -- ? ) { 1 2 3 10 7 58 } member? ;
[ f ] [ 1.0 member?-test ] unit-test
[ t ] [ \ member?-test def>> first [ member?-test ] all? ] unit-test
[ t ] [ \ member?-test def>> first [ member?-test ] all? ] unit-test
! Macro expansion should throw its own type of error
: bad-macro ( -- ) ;
\ bad-macro [ "OOPS" throw ] 0 define-transform
[ [ bad-macro ] infer ] [ inference-error? ] must-fail-with

View File

@ -17,9 +17,14 @@ IN: stack-checker.transforms
[ dup infer-word apply-word/effect ]
} cond ;
: call-transformer ( word stack quot -- newquot )
'[ _ _ with-datastack [ length 1 assert= ] [ first ] bi nip ]
[ transform-expansion-error ]
recover ;
:: ((apply-transform)) ( word quot values stack rstate -- )
rstate recursive-state
[ stack quot with-datastack first ] with-variable
[ word stack quot call-transformer ] with-variable
[
word inlined-dependency depends-on
values [ length meta-d shorten-by ] [ #drop, ] bi