translator: heap usage optimization
This commit is contained in:
@@ -548,9 +548,8 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
|
|||||||
codeBuilder.allocStaticVar(store)
|
codeBuilder.allocStaticVar(store)
|
||||||
store.pointer++
|
store.pointer++
|
||||||
|
|
||||||
val result = codeBuilder.getNewVariable(function.type)
|
val result = codeBuilder.getNewVariable(function.type, pointer = 1)
|
||||||
result.pointer++
|
codeBuilder.allocStackVar(result)
|
||||||
codeBuilder.allocStaticVar(result)
|
|
||||||
result.pointer++
|
result.pointer++
|
||||||
|
|
||||||
codeBuilder.storeVariable(result, store)
|
codeBuilder.storeVariable(result, store)
|
||||||
@@ -823,7 +822,7 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
|
|||||||
codeBuilder.addComment("start variable assignment")
|
codeBuilder.addComment("start variable assignment")
|
||||||
if (secondOp.type is LLVMNullType) {
|
if (secondOp.type is LLVMNullType) {
|
||||||
val result = codeBuilder.getNewVariable(firstOp.type!!, firstOp.pointer)
|
val result = codeBuilder.getNewVariable(firstOp.type!!, firstOp.pointer)
|
||||||
codeBuilder.allocStaticVar(result)
|
codeBuilder.allocStackVar(result)
|
||||||
result.pointer++
|
result.pointer++
|
||||||
|
|
||||||
codeBuilder.storeNull(result)
|
codeBuilder.storeNull(result)
|
||||||
@@ -1025,8 +1024,12 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
|
|||||||
when (assignExpression) {
|
when (assignExpression) {
|
||||||
is LLVMVariable -> {
|
is LLVMVariable -> {
|
||||||
if (assignExpression.pointer < 2) {
|
if (assignExpression.pointer < 2) {
|
||||||
|
if (assignExpression.type is LLVMReferenceType) {
|
||||||
|
throw UnexpectedException(element.text)
|
||||||
|
}
|
||||||
|
|
||||||
val allocVar = variableManager.receiveVariable(identifier, assignExpression.type, LLVMRegisterScope(), pointer = 0)
|
val allocVar = variableManager.receiveVariable(identifier, assignExpression.type, LLVMRegisterScope(), pointer = 0)
|
||||||
codeBuilder.allocStaticVar(allocVar)
|
codeBuilder.allocStackVar(allocVar)
|
||||||
allocVar.pointer++
|
allocVar.pointer++
|
||||||
allocVar.kotlinName = identifier
|
allocVar.kotlinName = identifier
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user