From fddc3fb6b8bdd7382afba5b96874dac22bd2c43f Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Mon, 29 Oct 2007 18:42:33 +0000 Subject: [PATCH] Added support for simple input statements to the usage checker --- transformations/RainUsageCheck.hs | 7 ++++++- transformations/RainUsageCheckTest.hs | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/transformations/RainUsageCheck.hs b/transformations/RainUsageCheck.hs index 6ee446b..b174459 100644 --- a/transformations/RainUsageCheck.hs +++ b/transformations/RainUsageCheck.hs @@ -94,7 +94,12 @@ getVarProc (A.Output _ chanVar outItems) = (processVarUsed chanVar) `unionVars` getVarOutputItem :: A.OutputItem -> Vars getVarOutputItem (A.OutExpression _ e) = getVarExp e getVarOutputItem (A.OutCounted _ ce ae) = (getVarExp ce) `unionVars` (getVarExp ae) ---TODO input etc (all other processes that directly write to/read from variables) +getVarProc (A.Input _ chanVar (A.InputSimple _ iis)) = (processVarUsed chanVar) `unionVars` (mapUnionVars getVarInputItem iis) + where + getVarInputItem :: A.InputItem -> Vars + getVarInputItem (A.InCounted _ cv av) = writtenVars [variableToVar cv,variableToVar av] + getVarInputItem (A.InVariable _ v) = writtenVars [variableToVar v] +--TODO process calls getVarProc _ = emptyVars {- diff --git a/transformations/RainUsageCheckTest.hs b/transformations/RainUsageCheckTest.hs index f5107b8..3b72f35 100644 --- a/transformations/RainUsageCheckTest.hs +++ b/transformations/RainUsageCheckTest.hs @@ -87,6 +87,12 @@ testGetVarProc = TestList (map doTest tests) ,(402,[tvA,tvB],[],[],[tvC],A.Output emptyMeta vC [A.OutCounted emptyMeta (A.ExprVariable emptyMeta vA) (A.ExprVariable emptyMeta vB)]) + -- Test simple inputs: + ,(500,[],[tvB],[tvB],[tvC],A.Input emptyMeta vC (A.InputSimple emptyMeta [A.InVariable emptyMeta vB])) + ,(501,[],[tvA,tvB],[tvA,tvB],[tvC],A.Input emptyMeta vC + (A.InputSimple emptyMeta [A.InVariable emptyMeta vB,A.InVariable emptyMeta vA])) + ,(502,[],[tvA,tvB],[tvA,tvB],[tvC],A.Input emptyMeta vC + (A.InputSimple emptyMeta [A.InCounted emptyMeta vA vB])) ] doTest :: (Int,[Var],[Var],[Var],[Var],A.Process) -> Test doTest (index,mr,mw,dw,u,proc) = TestCase $ assertEqual ("testGetVarProc-" ++ (show index)) (vars mr mw dw u) (getVarProc proc)