|
@@ -2019,7 +2019,7 @@ public final class BaseTacGen implements TacGenInterface {
|
|
|
*/
|
|
|
protected void genPopParams(Node func) throws Exception {
|
|
|
int reg = 0;
|
|
|
- String destino, atribuido;
|
|
|
+ String destino, atribuido, id;
|
|
|
/**
|
|
|
* Se for method declara e atribui o endereco a variavel
|
|
|
*/
|
|
@@ -2029,7 +2029,8 @@ public final class BaseTacGen implements TacGenInterface {
|
|
|
// destino = clearPointer(atribuido, gerarVariavel(receive.childrens().G(0)));
|
|
|
destino = gerarVariavel(receive.childrens().get(0));
|
|
|
// copy_pointer?
|
|
|
- Copy(Api.clearID(destino), __popParam().G("_return"), false);
|
|
|
+// Copy(Api.clearID(destino), __popParam().G("_return"), false);
|
|
|
+ __popParam(Api.clearID(destino));
|
|
|
}
|
|
|
|
|
|
for (Node argument : func.find("arguments").childrens()) {
|
|
@@ -2043,13 +2044,15 @@ public final class BaseTacGen implements TacGenInterface {
|
|
|
// System.out.println("PopArg:" + arg);
|
|
|
// destino = clearPointer(atribuido, gerarVariavel(arg));
|
|
|
// copy_pointer?
|
|
|
- Copy(Api.clearID(gerarVariavel(arg)), __popParam().G("_return"), false);
|
|
|
+// id = Api.clearID(gerarVariavel(arg));
|
|
|
+// Copy(id, __popParam(id).G("_return"), false);
|
|
|
+ __popParam(Api.clearID(gerarVariavel(arg)));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- protected Instruction __popParam() throws Exception {
|
|
|
- String varname = gerarVariavel("T");
|
|
|
+ protected Instruction __popParam(String varname) throws Exception {
|
|
|
+// String varname = gerarVariavel("T");
|
|
|
Instruction r = new Instruction()
|
|
|
.S("type", "pop_param")
|
|
|
.S("format", "pop_param")
|
|
@@ -2214,7 +2217,8 @@ public final class BaseTacGen implements TacGenInterface {
|
|
|
varGenMap.put(varname, alias);
|
|
|
// vn = var.G("scope");
|
|
|
|
|
|
- int size = Tipos.Size(var.G("type")), b = 1;
|
|
|
+ int size = Tipos.Size(var.G("type")), elementCount = 1;
|
|
|
+ var.set("size", size);
|
|
|
|
|
|
// System.out.println("gerarVariavelSetVAR:" + var);
|
|
|
// Se for um array considera os filhos como index
|
|
@@ -2226,22 +2230,20 @@ public final class BaseTacGen implements TacGenInterface {
|
|
|
// + "\n" + node
|
|
|
// + "\nVARIABLE:\n" + var
|
|
|
// );
|
|
|
- b *= (node.eq("constant", "true")
|
|
|
- ? node.getInt("valueConstant")
|
|
|
+ elementCount *= (node.eq("constant", "true")
|
|
|
+ ? node.getInt("default.value")
|
|
|
: node.getInt("value"));
|
|
|
}
|
|
|
}
|
|
|
- size *= b;
|
|
|
-
|
|
|
- var.set("size", size);
|
|
|
+// size *= elementCount;
|
|
|
|
|
|
-// System.out.println("gerarVariave[" + prefix + "|" + id + "]:" + var);
|
|
|
if (!var.eq("constant", "true") || !var.in("type", new String[]{"int", "char", "bool"})) {
|
|
|
|
|
|
- (prefix.equals("G") ? code.GData() : code.Block().Data()).Add(alias, var);
|
|
|
+ (prefix.equals("G") ? code.GData() : code.Block().Data())
|
|
|
+ .Add(alias, var, elementCount);
|
|
|
} else {
|
|
|
// System.out.println("var:" + var);
|
|
|
- alias = var.G("valueConstant");
|
|
|
+ alias = var.G("default.value");
|
|
|
}
|
|
|
}
|
|
|
return alias;
|