Macro expansion errors are now wrapped
parent
78503a1b9c
commit
8290624733
|
@ -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 ;
|
|
@ -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 ;
|
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue