Make stack-checker throw proper errors for primitives that do not have static stack effects
parent
fc4686eaee
commit
580cbe75c6
|
@ -30,8 +30,6 @@ ERROR: unbalanced-recursion-error < inference-error word height ;
|
|||
|
||||
ERROR: inconsistent-recursive-call-error < inference-error word ;
|
||||
|
||||
ERROR: unknown-primitive-error < inference-error ;
|
||||
|
||||
ERROR: transform-expansion-error < inference-error error continuation word ;
|
||||
|
||||
ERROR: bad-declaration-error < inference-error declaration ;
|
|
@ -50,9 +50,6 @@ M: inconsistent-recursive-call-error summary
|
|||
"The recursive word "
|
||||
" calls itself with a different set of quotation parameters than were input" surround ;
|
||||
|
||||
M: unknown-primitive-error summary
|
||||
drop "The do-primitive word cannot be called from here" ;
|
||||
|
||||
M: transform-expansion-error summary
|
||||
word>> name>> "Macro expansion of " " threw an error" surround ;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ words.private definitions assocs summary compiler.units
|
|||
system.private combinators combinators.short-circuit locals
|
||||
locals.backend locals.types combinators.private
|
||||
stack-checker.values generic.single generic.single.private
|
||||
alien.libraries tools.dispatch.private tools.profiler.private
|
||||
alien.libraries tools.dispatch.private tools.profiler.private vm
|
||||
stack-checker.alien
|
||||
stack-checker.state
|
||||
stack-checker.errors
|
||||
|
@ -221,8 +221,6 @@ M: bad-executable summary
|
|||
dup '[ _ infer-call-effect ] "special" set-word-prop
|
||||
] each
|
||||
|
||||
\ do-primitive [ unknown-primitive-error ] "special" set-word-prop
|
||||
|
||||
\ if [ infer-if ] "special" set-word-prop
|
||||
\ dispatch [ infer-dispatch ] "special" set-word-prop
|
||||
|
||||
|
@ -231,6 +229,22 @@ M: bad-executable summary
|
|||
\ alien-assembly [ infer-alien-assembly ] "special" set-word-prop
|
||||
\ alien-callback [ infer-alien-callback ] "special" set-word-prop
|
||||
|
||||
{
|
||||
do-primitive
|
||||
mega-cache-miss
|
||||
mega-cache-lookup
|
||||
inline-cache-miss
|
||||
inline-cache-miss-tail
|
||||
unwind-native-frames
|
||||
set-datastack
|
||||
set-callstack
|
||||
set-retainstack
|
||||
unwind-native-frames
|
||||
lazy-jit-compile
|
||||
c-to-factor
|
||||
call-clear
|
||||
} [ dup '[ _ do-not-compile ] "special" set-word-prop ] each
|
||||
|
||||
: infer-special ( word -- )
|
||||
[ current-word set ] [ "special" word-prop call( -- ) ] bi ;
|
||||
|
||||
|
@ -722,3 +736,9 @@ M: bad-executable summary
|
|||
\ (identity-hashcode) { object } { fixnum } define-primitive
|
||||
|
||||
\ compute-identity-hashcode { object } { } define-primitive
|
||||
|
||||
\ (exit) { integer } { } define-primitive
|
||||
|
||||
\ vm-ptr { } { alien } define-primitive
|
||||
|
||||
\ quot-compiled? { quotation } { object } define-primitive
|
||||
|
|
|
@ -7,7 +7,7 @@ sorting assocs definitions prettyprint io inspector
|
|||
classes.tuple classes.union classes.predicate debugger
|
||||
threads.private io.streams.string io.timeouts io.thread
|
||||
sequences.private destructors combinators eval locals.backend
|
||||
system compiler.units shuffle ;
|
||||
system compiler.units shuffle vocabs ;
|
||||
IN: stack-checker.tests
|
||||
|
||||
[ 1234 infer ] must-fail
|
||||
|
@ -392,5 +392,13 @@ DEFER: eee'
|
|||
[ [ call-effect ] infer ] [ T{ unknown-macro-input f call-effect } = ] must-fail-with
|
||||
[ [ execute-effect ] infer ] [ T{ unknown-macro-input f execute-effect } = ] must-fail-with
|
||||
|
||||
[ \ set-datastack def>> infer ] [ T{ unknown-primitive-error } = ] must-fail-with
|
||||
[ \ set-datastack def>> infer ] [ T{ do-not-compile f do-primitive } = ] must-fail-with
|
||||
[ ] [ [ \ set-datastack def>> infer ] try ] unit-test
|
||||
|
||||
! Make sure all primitives are covered
|
||||
[ { } ] [
|
||||
all-words [ primitive? ] filter
|
||||
[ "default-output-classes" word-prop not ] filter
|
||||
[ "special" word-prop not ] filter
|
||||
[ "shuffle" word-prop not ] filter
|
||||
] unit-test
|
||||
|
|
Loading…
Reference in New Issue