compiler.cfg.checker: new vocabulary for checking CFG invariants

db4
Slava Pestov 2009-05-25 19:16:58 -05:00
parent a2b982e247
commit dead771b3f
2 changed files with 25 additions and 0 deletions

View File

@ -0,0 +1 @@
Slava Pestov

View File

@ -0,0 +1,24 @@
! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel compiler.cfg.instructions compiler.cfg.rpo sequences
combinators.short-circuit accessors ;
IN: compiler.cfg.checker
ERROR: last-insn-not-a-jump insn ;
: check-basic-block ( bb -- )
peek dup {
[ ##branch? ]
[ ##conditional-branch? ]
[ ##compare-imm-branch? ]
[ ##return? ]
[ ##callback-return? ]
[ ##jump? ]
[ ##call? ]
[ ##dispatch-label? ]
} 1|| [ drop ] [ last-insn-not-a-jump ] if ;
: check-cfg ( cfg -- )
entry>> reverse-post-order [
instructions>> check-basic-block
] each ;