@@ -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