@@ -235,9 +235,15 @@ void PseudoCFunction::AppendComparison(const string& comparison, const HighLevel
235235 const auto leftExpr = instr.GetLeftExpr ();
236236 const auto rightExpr = instr.GetRightExpr ();
237237
238- GetExprTextInternal (leftExpr, emitter, settings, precedence, false , signedHint);
238+ if (leftExpr.operation == HLIL_SPLIT)
239+ AppendDefaultSplitExpr (leftExpr, emitter, settings, precedence);
240+ else
241+ GetExprTextInternal (leftExpr, emitter, settings, precedence, false , signedHint);
239242 emitter.Append (OperationToken, comparison);
240- GetExprTextInternal (rightExpr, emitter, settings, precedence, false , signedHint);
243+ if (rightExpr.operation == HLIL_SPLIT)
244+ AppendDefaultSplitExpr (rightExpr, emitter, settings, precedence);
245+ else
246+ GetExprTextInternal (rightExpr, emitter, settings, precedence, false , signedHint);
241247}
242248
243249
@@ -436,6 +442,25 @@ PseudoCFunction::FieldDisplayType PseudoCFunction::GetFieldDisplayType(
436442}
437443
438444
445+ void PseudoCFunction::AppendDefaultSplitExpr (const BinaryNinja::HighLevelILInstruction& instr,
446+ BinaryNinja::HighLevelILTokenEmitter& tokens, DisassemblySettings* settings, BNOperatorPrecedence precedence)
447+ {
448+ const auto high = instr.GetHighExpr <HLIL_SPLIT>();
449+ const auto low = instr.GetLowExpr <HLIL_SPLIT>();
450+ if (precedence == EqualityOperatorPrecedence)
451+ tokens.AppendOpenParen ();
452+ tokens.AppendOpenParen ();
453+ GetExprTextInternal (high, tokens, settings, precedence);
454+ tokens.Append (OperationToken, " << " );
455+ tokens.Append (IntegerToken, std::to_string (low.size * 8 ));
456+ tokens.AppendCloseParen ();
457+ tokens.Append (OperationToken, " | " );
458+ GetExprTextInternal (low, tokens, settings, precedence);
459+ if (precedence == EqualityOperatorPrecedence)
460+ tokens.AppendCloseParen ();
461+ }
462+
463+
439464void PseudoCFunction::AppendFieldTextTokens (const HighLevelILInstruction& var, uint64_t offset,
440465 size_t memberIndex, size_t size, HighLevelILTokenEmitter& tokens, bool deref, bool displayDeref)
441466{
@@ -1330,19 +1355,10 @@ void PseudoCFunction::GetExprTextInternal(const HighLevelILInstruction& instr, H
13301355 }
13311356 else if (srcExpr.operation == HLIL_SPLIT)
13321357 {
1333- const auto high = srcExpr.GetHighExpr <HLIL_SPLIT>();
1334- const auto low = srcExpr.GetLowExpr <HLIL_SPLIT>();
13351358 GetExprTextInternal (destExpr, tokens, settings, precedence);
13361359 tokens.Append (OperationToken, " = " );
1337- tokens.AppendOpenParen ();
1338- GetExprTextInternal (high, tokens, settings, precedence);
1339- tokens.Append (OperationToken, " << " );
1340- tokens.Append (IntegerToken, std::to_string (low.size * 8 ));
1341- tokens.AppendCloseParen ();
1342- tokens.Append (OperationToken, " | " );
1343- GetExprTextInternal (low, tokens, settings, precedence);
1360+ AppendDefaultSplitExpr (srcExpr, tokens, settings, precedence);
13441361 tokens.AppendSemicolon ();
1345- tokens.NewLine ();
13461362 return ;
13471363 }
13481364 else
0 commit comments