From 38bfac45cd6a3a355e1d143b06e1d7a4cf57868f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Yasinhan=20Ya=C5=9Far?= Date: Thu, 17 Apr 2025 09:33:23 +0300 Subject: [PATCH 1/3] deref and mult operations are built-in in vm --- src/tile/ast/stmt/VariableAssignment.java | 2 -- 1 file changed, 2 deletions(-) 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"; } From 1788a5270dd9b2dd9cb8e1168b78ac0264b2ba24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Yasinhan=20Ya=C5=9Far?= Date: Fri, 18 Apr 2025 01:17:42 +0300 Subject: [PATCH 2/3] array segfaults fixed #28 we need to deref before load to reach to the actual listing values on heap (gc_block->value which is the first component of gc_block) --- src/tile/ast/expr/PrimaryExpression.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/tile/ast/expr/PrimaryExpression.java b/src/tile/ast/expr/PrimaryExpression.java index bfa14ef..6a30181 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) + generatedCode += " load " + identifierTasmIdx + "\n"; + generatedCode += " deref ; deref array\n"; + 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"; } From 9f73ffd43afc27ec75096b0b72e0fd39927002e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Muhammed=20Yasinhan=20Ya=C5=9Far?= Date: Sat, 19 Apr 2025 23:51:22 +0300 Subject: [PATCH 3/3] fixed the deref instruction generating --- src/tile/ast/expr/PrimaryExpression.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tile/ast/expr/PrimaryExpression.java b/src/tile/ast/expr/PrimaryExpression.java index 6a30181..be3b86c 100644 --- a/src/tile/ast/expr/PrimaryExpression.java +++ b/src/tile/ast/expr/PrimaryExpression.java @@ -96,9 +96,9 @@ private String generateTasmForPrimitive(String 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) + // 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"; + // generatedCode += " deref ; deref array\n"; // NO NEED IT NORMALLY return generatedCode; }