diff --git a/src/tile/ast/expr/PrimaryExpression.java b/src/tile/ast/expr/PrimaryExpression.java index bfa14ef..be3b86c 100644 --- a/src/tile/ast/expr/PrimaryExpression.java +++ b/src/tile/ast/expr/PrimaryExpression.java @@ -95,6 +95,13 @@ private String generateTasmForPrimitive(String generatedCode) { return generatedCode; } + String generateTasmForArray(String generatedCode) { + // we need to deref it to reach to the actual listing values on heap (gc_block->value which is the first component of gc_block) IMPORTANT NOTE: this only for passing tile arrays to c functions that gets c arrays as parameter. + generatedCode += " load " + identifierTasmIdx + "\n"; + // generatedCode += " deref ; deref array\n"; // NO NEED IT NORMALLY + return generatedCode; + } + private T getKeyByValue(Map map, E value) { for (Entry entry : map.entrySet()) { if (Objects.equals(value, entry.getValue())) { @@ -119,6 +126,8 @@ public String generateTasm(String generatedCode) { generatedCode = generateTasmForPrimitive(generatedCode); } else if (TypeResolver.isStringType(type)) { generatedCode = generateTasmForString(generatedCode); + } else if (TypeResolver.isArrayType(type)) { + generatedCode = generateTasmForArray(generatedCode); } else { generatedCode += " load " + identifierTasmIdx + "\n"; } diff --git a/src/tile/ast/stmt/VariableAssignment.java b/src/tile/ast/stmt/VariableAssignment.java index 0f61939..536ffa7 100644 --- a/src/tile/ast/stmt/VariableAssignment.java +++ b/src/tile/ast/stmt/VariableAssignment.java @@ -58,10 +58,8 @@ else if (typeInfo.var_type.equals("float") && typeInfo.expr_type.equals("int")) generatedCode += "store " + tasmIdx + " ; " + typeInfo.var_type + " " + varId + "\n"; } else { generatedCode += " load " + tasmIdx + "\n"; - generatedCode += " deref ; dereferance\n"; generatedCode = indicies.get(0).generateTasm(generatedCode); generatedCode += " push " + typeInfo.info_array.element_size + "\n"; - generatedCode += " mult\n"; generatedCode += " hset\n"; }