From e3a68e235cd077c35654f79013ad54da46d72fee Mon Sep 17 00:00:00 2001 From: Tim Chevalier Date: Wed, 4 May 2011 11:28:13 -0700 Subject: Bring back "pred" syntax for writing predicates for check This commit reinstates the requirement that the predicate in a "check" must be a manifest call to a special kind of function declared with the new "pred" keyword instead of "fn". Preds must have a boolean return type and can only call other preds; they can't have any effects (as enforced by the typechecker). The arguments to a predicate in a check expression must be slot variables or literals. --- src/comp/front/ast.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/comp/front/ast.rs') diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs index cc7569e1..574ebd4a 100644 --- a/src/comp/front/ast.rs +++ b/src/comp/front/ast.rs @@ -346,7 +346,13 @@ type constr = spanned[constr_]; type arg = rec(mode mode, @ty ty, ident ident, def_id id); type fn_decl = rec(vec[arg] inputs, - @ty output); + @ty output, + purity purity); +tag purity { + pure_fn; // declared with "pred" + impure_fn; // declared with "fn" +} + type _fn = rec(fn_decl decl, proto proto, block body); -- cgit v1.2.3