Macro expansion errors are now wrapped
parent
78503a1b9c
commit
8290624733
|
@ -82,3 +82,8 @@ TUPLE: unknown-primitive-error ;
|
||||||
|
|
||||||
: unknown-primitive-error ( -- * )
|
: unknown-primitive-error ( -- * )
|
||||||
\ unknown-primitive-error inference-warning ;
|
\ 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
|
M: unknown-primitive-error summary
|
||||||
drop
|
drop
|
||||||
"Cannot determine stack effect statically" ;
|
"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
|
IN: stack-checker.transforms.tests
|
||||||
USING: sequences stack-checker.transforms tools.test math kernel
|
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 ;
|
classes classes.tuple ;
|
||||||
|
|
||||||
: compose-n-quot ( word n -- quot' ) <repetition> >quotation ;
|
: compose-n-quot ( word n -- quot' ) <repetition> >quotation ;
|
||||||
|
@ -71,3 +71,10 @@ DEFER: curry-folding-test ( quot -- )
|
||||||
|
|
||||||
[ f ] [ 1.0 member?-test ] unit-test
|
[ 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 ]
|
[ dup infer-word apply-word/effect ]
|
||||||
} cond ;
|
} 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 -- )
|
:: ((apply-transform)) ( word quot values stack rstate -- )
|
||||||
rstate recursive-state
|
rstate recursive-state
|
||||||
[ stack quot with-datastack first ] with-variable
|
[ word stack quot call-transformer ] with-variable
|
||||||
[
|
[
|
||||||
word inlined-dependency depends-on
|
word inlined-dependency depends-on
|
||||||
values [ length meta-d shorten-by ] [ #drop, ] bi
|
values [ length meta-d shorten-by ] [ #drop, ] bi
|
||||||
|
|
Loading…
Reference in New Issue