Implemented (most of the needed) support for AllocMobile in the C and C++ backends
This commit is contained in:
parent
31642036b7
commit
dd86b240b5
|
@ -184,6 +184,7 @@ cgenOps = GenOps {
|
||||||
genActual = cgenActual,
|
genActual = cgenActual,
|
||||||
genActuals = cgenActuals,
|
genActuals = cgenActuals,
|
||||||
genAlt = cgenAlt,
|
genAlt = cgenAlt,
|
||||||
|
genAllocMobile = cgenAllocMobile,
|
||||||
genArrayLiteralElems = cgenArrayLiteralElems,
|
genArrayLiteralElems = cgenArrayLiteralElems,
|
||||||
genArraySize = cgenArraySize,
|
genArraySize = cgenArraySize,
|
||||||
genArraySizesLiteral = cgenArraySizesLiteral,
|
genArraySizesLiteral = cgenArraySizesLiteral,
|
||||||
|
@ -1843,3 +1844,11 @@ cgenAssert ops m e
|
||||||
--}}}
|
--}}}
|
||||||
--}}}
|
--}}}
|
||||||
|
|
||||||
|
--{{{ mobiles
|
||||||
|
cgenAllocMobile :: GenOps -> Meta -> A.Type -> Maybe A.Expression -> CGen()
|
||||||
|
cgenAllocMobile ops m (A.Mobile t) Nothing = tell ["malloc("] >> call genBytesIn ops t (Left False) >> tell [")"]
|
||||||
|
--TODO add a pass, just for C, that pulls out the initialisation expressions for mobiles
|
||||||
|
-- into a subsequent assignment
|
||||||
|
cgenAllocMobile ops _ _ _ = call genMissing ops "Mobile allocation with initialising-expression"
|
||||||
|
|
||||||
|
--}}}
|
||||||
|
|
|
@ -98,6 +98,7 @@ cppgenOps = cgenOps {
|
||||||
declareInit = cppdeclareInit,
|
declareInit = cppdeclareInit,
|
||||||
genActual = cppgenActual,
|
genActual = cppgenActual,
|
||||||
genActuals = cppgenActuals,
|
genActuals = cppgenActuals,
|
||||||
|
genAllocMobile = cppgenAllocMobile,
|
||||||
genAlt = cppgenAlt,
|
genAlt = cppgenAlt,
|
||||||
genArraySizesLiteral = cppgenArraySizesLiteral,
|
genArraySizesLiteral = cppgenArraySizesLiteral,
|
||||||
genArrayStoreName = cppgenArrayStoreName,
|
genArrayStoreName = cppgenArrayStoreName,
|
||||||
|
@ -1106,3 +1107,11 @@ cppgenRetypeSizes ops m destT destN srcT srcV
|
||||||
-- Not array; just check the size is 1.
|
-- Not array; just check the size is 1.
|
||||||
_ -> checkSize
|
_ -> checkSize
|
||||||
|
|
||||||
|
|
||||||
|
cppgenAllocMobile :: GenOps -> Meta -> A.Type -> Maybe A.Expression -> CGen ()
|
||||||
|
cppgenAllocMobile ops m (A.Mobile t) me
|
||||||
|
= do tell ["new "]
|
||||||
|
call genType ops t
|
||||||
|
case me of
|
||||||
|
Just e -> tell ["("] >> call genExpression ops e >> tell [")"]
|
||||||
|
Nothing -> return ()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user