mirror of
https://github.com/DMaroo/GhidRust.git
synced 2025-09-10 04:53:36 +02:00
Add decompilation logic for array indexing
* Add parens while casting * Simplifies newline insertion and ";" insertion
This commit is contained in:
@@ -127,15 +127,17 @@ public class CVisitor implements CParserVisitor {
|
|||||||
sb.append(ret[2 * i + 1]);
|
sb.append(ret[2 * i + 1]);
|
||||||
}
|
}
|
||||||
sb.append(";");
|
sb.append(";");
|
||||||
|
if (i != ret.length / 2 - 1) {
|
||||||
sb.append("\n");
|
sb.append("\n");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object visit(ASTDeclarationList node, Object data) {
|
public Object visit(ASTDeclarationList node, Object data) {
|
||||||
StringBuilder sb = indent(new StringBuilder(""));
|
StringBuilder sb = indent(new StringBuilder(""));
|
||||||
return sb.toString() + defaultSpacedVisit(node, data, sb.toString(), false);
|
return sb.toString() + defaultSpacedVisit(node, data, "\n" + sb.toString(), false) + "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object visit(ASTDeclarationSpecifiers node, Object data) {
|
public Object visit(ASTDeclarationSpecifiers node, Object data) {
|
||||||
@@ -259,7 +261,7 @@ public class CVisitor implements CParserVisitor {
|
|||||||
|
|
||||||
public Object visit(ASTStatement node, Object data) {
|
public Object visit(ASTStatement node, Object data) {
|
||||||
StringBuilder sb = indent(new StringBuilder(""));
|
StringBuilder sb = indent(new StringBuilder(""));
|
||||||
return sb.toString() + defaultVisit(node, data);
|
return sb.toString() + defaultVisit(node, data) + ";\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object visit(ASTLabeledStatement node, Object data) {
|
public Object visit(ASTLabeledStatement node, Object data) {
|
||||||
@@ -275,7 +277,7 @@ public class CVisitor implements CParserVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Object visit(ASTStatementList node, Object data) {
|
public Object visit(ASTStatementList node, Object data) {
|
||||||
return defaultSpacedVisit(node, data, "\n", true);
|
return defaultVisit(node, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object visit(ASTSelectionStatement node, Object data) {
|
public Object visit(ASTSelectionStatement node, Object data) {
|
||||||
@@ -300,7 +302,7 @@ public class CVisitor implements CParserVisitor {
|
|||||||
|
|
||||||
public Object visit(ASTExpression node, Object data) {
|
public Object visit(ASTExpression node, Object data) {
|
||||||
if (node.jjtGetChild(0) instanceof ASTAssignmentExpression) {
|
if (node.jjtGetChild(0) instanceof ASTAssignmentExpression) {
|
||||||
return defaultSpacedVisit(node, data, " ", false) + ";";
|
return defaultSpacedVisit(node, data, " ", false);
|
||||||
} else {
|
} else {
|
||||||
ASTDeclaration decl = new ASTDeclaration(0);
|
ASTDeclaration decl = new ASTDeclaration(0);
|
||||||
decl.jjtAddChild(node.jjtGetChild(0), 0);
|
decl.jjtAddChild(node.jjtGetChild(0), 0);
|
||||||
@@ -364,11 +366,20 @@ public class CVisitor implements CParserVisitor {
|
|||||||
public Object visit(ASTCastExpression node, Object data) {
|
public Object visit(ASTCastExpression node, Object data) {
|
||||||
StringBuilder sb = new StringBuilder("");
|
StringBuilder sb = new StringBuilder("");
|
||||||
if (node.jjtGetNumChildren() > 1) {
|
if (node.jjtGetNumChildren() > 1) {
|
||||||
|
sb.append("(");
|
||||||
|
|
||||||
|
sb.append("(");
|
||||||
sb.append(node.jjtGetChild(1).jjtAccept(this, data));
|
sb.append(node.jjtGetChild(1).jjtAccept(this, data));
|
||||||
|
sb.append(")");
|
||||||
|
|
||||||
sb.append(" as ");
|
sb.append(" as ");
|
||||||
}
|
|
||||||
sb.append(node.jjtGetChild(0).jjtAccept(this, data));
|
sb.append(node.jjtGetChild(0).jjtAccept(this, data));
|
||||||
|
|
||||||
|
sb.append(")");
|
||||||
|
} else {
|
||||||
|
sb.append(node.jjtGetChild(0).jjtAccept(this, data));
|
||||||
|
}
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,15 +395,18 @@ public class CVisitor implements CParserVisitor {
|
|||||||
StringBuilder sb = new StringBuilder("");
|
StringBuilder sb = new StringBuilder("");
|
||||||
sb.append(node.jjtGetChild(0).jjtAccept(this, data));
|
sb.append(node.jjtGetChild(0).jjtAccept(this, data));
|
||||||
|
|
||||||
if (node.choice == 2) {
|
if (node.choice == 1) {
|
||||||
|
sb.append("[");
|
||||||
|
sb.append(node.jjtGetChild(1).jjtAccept(this, data));
|
||||||
|
sb.append("]");
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
} else if (node.choice == 2) {
|
||||||
/* Function call */
|
/* Function call */
|
||||||
sb.append("(");
|
sb.append("(");
|
||||||
|
sb.append(node.jjtGetChild(1).jjtAccept(this, data));
|
||||||
for (int i = 1; i < node.jjtGetNumChildren(); i++) {
|
|
||||||
sb.append(node.jjtGetChild(i).jjtAccept(this, data));
|
|
||||||
}
|
|
||||||
|
|
||||||
sb.append(")");
|
sb.append(")");
|
||||||
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user