Skip to content

Commit 5e1a863

Browse files
committed
Cast on indexed array assignments in pseudo C/Rust
1 parent a6f64bf commit 5e1a863

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

lang/c/pseudoc.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,6 +1604,21 @@ void PseudoCFunction::GetExprTextInternal(const HighLevelILInstruction& instr, H
16041604
}
16051605
else
16061606
{
1607+
if ((!settings || settings->IsOptionSet(ShowTypeCasts)) && srcExpr.operation == HLIL_ARRAY_INDEX)
1608+
{
1609+
auto arrayIndexExpr = srcExpr.GetSourceExpr<HLIL_ARRAY_INDEX>();
1610+
if (arrayIndexExpr.operation == HLIL_VAR &&
1611+
arrayIndexExpr.GetType()->GetChildType()->GetWidth() < instr.size)
1612+
{
1613+
tokens.Append(TextToken, "*");
1614+
tokens.AppendOpenParen();
1615+
AppendSizeToken(instr.size, false, tokens);
1616+
tokens.Append(TextToken, "*");
1617+
tokens.AppendCloseParen();
1618+
tokens.Append(OperationToken, "&");
1619+
}
1620+
}
1621+
16071622
GetExprTextInternal(srcExpr, tokens, settings, MemberAndFunctionOperatorPrecedence);
16081623
}
16091624

lang/rust/pseudorust.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1670,7 +1670,28 @@ void PseudoRustFunction::GetExprText(const HighLevelILInstruction& instr, HighLe
16701670
}
16711671
else
16721672
{
1673-
GetExprText(srcExpr, tokens, settings, MemberAndFunctionOperatorPrecedence);
1673+
bool castedSrcExpr = false;
1674+
if ((!settings || settings->IsOptionSet(ShowTypeCasts)) && srcExpr.operation == HLIL_ARRAY_INDEX)
1675+
{
1676+
auto arrayIndexExpr = srcExpr.GetSourceExpr<HLIL_ARRAY_INDEX>();
1677+
if (arrayIndexExpr.operation == HLIL_VAR &&
1678+
arrayIndexExpr.GetType()->GetChildType()->GetWidth() < instr.size)
1679+
{
1680+
tokens.Append(TextToken, "*");
1681+
tokens.AppendOpenParen();
1682+
tokens.Append(OperationToken, "&");
1683+
GetExprText(srcExpr, tokens, settings, MemberAndFunctionOperatorPrecedence);
1684+
tokens.Append(KeywordToken, " as ");
1685+
tokens.Append(TextToken, "*");
1686+
tokens.Append(KeywordToken, "mut ");
1687+
AppendSizeToken(instr.size, false, tokens);
1688+
tokens.AppendCloseParen();
1689+
castedSrcExpr = true;
1690+
}
1691+
}
1692+
1693+
if (!castedSrcExpr)
1694+
GetExprText(srcExpr, tokens, settings, MemberAndFunctionOperatorPrecedence);
16741695
}
16751696

16761697
AppendFieldTextTokens(srcExpr, fieldOffset, memberIndex, instr.size, tokens, false);

0 commit comments

Comments
 (0)