Implemented the code for ClearMobile in the C and C++ backends

This commit is contained in:
Neil Brown 2007-10-24 20:54:37 +00:00
parent dfee567ffc
commit 83f654a273
2 changed files with 26 additions and 0 deletions

View File

@ -197,6 +197,7 @@ cgenOps = GenOps {
genBytesIn = cgenBytesIn, genBytesIn = cgenBytesIn,
genCase = cgenCase, genCase = cgenCase,
genCheckedConversion = cgenCheckedConversion, genCheckedConversion = cgenCheckedConversion,
genClearMobile = cgenClearMobile,
genConversion = cgenConversion, genConversion = cgenConversion,
genConversionSymbol = cgenConversionSymbol, genConversionSymbol = cgenConversionSymbol,
genDecl = cgenDecl, genDecl = cgenDecl,
@ -1855,4 +1856,16 @@ cgenAllocMobile ops m (A.Mobile t) Nothing = tell ["malloc("] >> call genBytesIn
-- into a subsequent assignment -- into a subsequent assignment
cgenAllocMobile ops _ _ _ = call genMissing ops "Mobile allocation with initialising-expression" cgenAllocMobile ops _ _ _ = call genMissing ops "Mobile allocation with initialising-expression"
cgenClearMobile :: GenOps -> Meta -> A.Variable -> CGen ()
cgenClearMobile ops _ v
= do tell ["if("]
genVar
tell ["!=NULL){free("]
genVar
tell [");"]
genVar
tell ["=NULL;}"]
where
genVar = call genVariable ops v
--}}} --}}}

View File

@ -103,6 +103,7 @@ cppgenOps = cgenOps {
genArraySizesLiteral = cppgenArraySizesLiteral, genArraySizesLiteral = cppgenArraySizesLiteral,
genArrayStoreName = cppgenArrayStoreName, genArrayStoreName = cppgenArrayStoreName,
genArraySubscript = cppgenArraySubscript, genArraySubscript = cppgenArraySubscript,
genClearMobile = cppgenClearMobile,
genDeclType = cppgenDeclType, genDeclType = cppgenDeclType,
genDeclaration = cppgenDeclaration, genDeclaration = cppgenDeclaration,
genDirectedVariable = cppgenDirectedVariable, genDirectedVariable = cppgenDirectedVariable,
@ -1115,3 +1116,15 @@ cppgenAllocMobile ops m (A.Mobile t) me
case me of case me of
Just e -> tell ["("] >> call genExpression ops e >> tell [")"] Just e -> tell ["("] >> call genExpression ops e >> tell [")"]
Nothing -> return () Nothing -> return ()
cppgenClearMobile :: GenOps -> Meta -> A.Variable -> CGen ()
cppgenClearMobile ops _ v
= do tell ["if("]
genVar
tell ["!=NULL){delete "]
genVar
tell [";"]
genVar
tell ["=NULL;}"]
where
genVar = call genVariable ops v