summaryrefslogtreecommitdiff
path: root/Source/VCGeneration
diff options
context:
space:
mode:
authorGravatar qadeer <unknown>2010-05-03 02:17:18 +0000
committerGravatar qadeer <unknown>2010-05-03 02:17:18 +0000
commite9c25e761ad3a5e31e077f7bb595bfc10618c2bb (patch)
treeda8ce5ec3e6c8c4970eb4ebd17a712d26d968143 /Source/VCGeneration
parent40b4e8225f085369c0f8909a2d116c2cf96fbc1a (diff)
Added another option for lazy inlining based on macro expansion. This option is activated by /lazyInline:2. The original method is activated by /lazyInline:1.
Diffstat (limited to 'Source/VCGeneration')
-rw-r--r--Source/VCGeneration/VC.ssc19
1 files changed, 12 insertions, 7 deletions
diff --git a/Source/VCGeneration/VC.ssc b/Source/VCGeneration/VC.ssc
index a866d047..f169e424 100644
--- a/Source/VCGeneration/VC.ssc
+++ b/Source/VCGeneration/VC.ssc
@@ -35,7 +35,7 @@ namespace VC
this.logFilePath = logFilePath;
implName2LazyInliningInfo = new Dictionary<string!, LazyInliningInfo!>();
base(program);
- if (CommandLineOptions.Clo.LazyInlining)
+ if (CommandLineOptions.Clo.LazyInlining > 0)
{
this.GenerateVCsForLazyInlining(program);
}
@@ -211,22 +211,27 @@ namespace VC
Function! function = (!)info.function;
VCExpr! expr = gen.Function(function, interfaceExprs);
- vcexpr = gen.Implies(expr, vcexpr);
+ if (CommandLineOptions.Clo.LazyInlining == 1) {
+ vcexpr = gen.Implies(expr, vcexpr);
+ } else {
+ assert CommandLineOptions.Clo.LazyInlining == 2;
+ vcexpr = gen.Eq(expr, vcexpr);
+ }
+ List<VCTrigger!> triggers = new List<VCTrigger!>();
List<VCExpr!> exprs = new List<VCExpr!>();
exprs.Add(expr);
VCTrigger! trigger = new VCTrigger(true, exprs);
- List<VCTrigger!> triggers = new List<VCTrigger!>();
triggers.Add(trigger);
-
- interfaceExprVars.Reverse();
+
Expr e = new LiteralExpr(Token.NoToken, BigNum.FromInt(1));
QKeyValue q = new QKeyValue(Token.NoToken, "weight", new List<object!>(new object![] { e }), null);
+ interfaceExprVars.Reverse();
vcexpr = gen.Forall(new List<TypeVariable!>(), interfaceExprVars, triggers,
new VCQuantifierInfos(impl.Name, QuantifierExpr.GetNextSkolemId(), false, q), vcexpr);
- checker.TheoremProver.PushVCExpression(vcexpr);
- info.vcexpr = vcexpr;
+ info.vcexpr = vcexpr;
+ checker.TheoremProver.PushVCExpression(vcexpr);
}
#endregion