diff --git a/basis/compiler/cfg/checker/authors.txt b/basis/compiler/cfg/checker/authors.txt new file mode 100644 index 0000000000..d4f5d6b3ae --- /dev/null +++ b/basis/compiler/cfg/checker/authors.txt @@ -0,0 +1 @@ +Slava Pestov \ No newline at end of file diff --git a/basis/compiler/cfg/checker/checker.factor b/basis/compiler/cfg/checker/checker.factor new file mode 100644 index 0000000000..c14b7d0ae0 --- /dev/null +++ b/basis/compiler/cfg/checker/checker.factor @@ -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 ; \ No newline at end of file