Skip to content

Commit 4149752

Browse files
committed
Allow overriding the IL source location that is used by *ILInstruction::CopyTo
1 parent e1ad1aa commit 4149752

File tree

6 files changed

+235
-219
lines changed

6 files changed

+235
-219
lines changed

highlevelilinstruction.cpp

Lines changed: 68 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,162 +1370,165 @@ void HighLevelILInstruction::VisitExprs(const std::function<bool(const HighLevel
13701370
}
13711371

13721372

1373-
ExprId HighLevelILInstruction::CopyTo(HighLevelILFunction* dest) const
1373+
ExprId HighLevelILInstruction::CopyTo(HighLevelILFunction* dest, const ILSourceLocation& sourceLocation) const
13741374
{
1375-
return CopyTo(dest, [&](const HighLevelILInstruction& subExpr) { return subExpr.CopyTo(dest); });
1375+
return CopyTo(dest, [&](const HighLevelILInstruction& subExpr) { return subExpr.CopyTo(dest, sourceLocation); }, sourceLocation);
13761376
}
13771377

13781378

13791379
ExprId HighLevelILInstruction::CopyTo(
1380-
HighLevelILFunction* dest, const std::function<ExprId(const HighLevelILInstruction& subExpr)>& subExprHandler) const
1380+
HighLevelILFunction* dest, const std::function<ExprId(const HighLevelILInstruction& subExpr)>& subExprHandler, const ILSourceLocation& sourceLocation) const
13811381
{
13821382
vector<ExprId> output, params;
1383+
1384+
const auto& loc = sourceLocation.valid ? sourceLocation : ILSourceLocation{*this};
1385+
13831386
switch (operation)
13841387
{
13851388
case HLIL_NOP:
1386-
return dest->Nop(*this);
1389+
return dest->Nop(loc);
13871390
case HLIL_BLOCK:
13881391
for (auto i : GetBlockExprs<HLIL_BLOCK>())
13891392
params.push_back(subExprHandler(i));
1390-
return dest->Block(params, *this);
1393+
return dest->Block(params, loc);
13911394
case HLIL_IF:
13921395
return dest->If(subExprHandler(GetConditionExpr<HLIL_IF>()), subExprHandler(GetTrueExpr<HLIL_IF>()),
1393-
subExprHandler(GetFalseExpr<HLIL_IF>()), *this);
1396+
subExprHandler(GetFalseExpr<HLIL_IF>()), loc);
13941397
case HLIL_WHILE:
13951398
return dest->While(
1396-
subExprHandler(GetConditionExpr<HLIL_WHILE>()), subExprHandler(GetLoopExpr<HLIL_WHILE>()), *this);
1399+
subExprHandler(GetConditionExpr<HLIL_WHILE>()), subExprHandler(GetLoopExpr<HLIL_WHILE>()), loc);
13971400
case HLIL_WHILE_SSA:
13981401
return dest->WhileSSA(subExprHandler(GetConditionPhiExpr<HLIL_WHILE_SSA>()),
1399-
subExprHandler(GetConditionExpr<HLIL_WHILE_SSA>()), subExprHandler(GetLoopExpr<HLIL_WHILE_SSA>()), *this);
1402+
subExprHandler(GetConditionExpr<HLIL_WHILE_SSA>()), subExprHandler(GetLoopExpr<HLIL_WHILE_SSA>()), loc);
14001403
case HLIL_DO_WHILE:
14011404
return dest->DoWhile(
1402-
subExprHandler(GetLoopExpr<HLIL_DO_WHILE>()), subExprHandler(GetConditionExpr<HLIL_DO_WHILE>()), *this);
1405+
subExprHandler(GetLoopExpr<HLIL_DO_WHILE>()), subExprHandler(GetConditionExpr<HLIL_DO_WHILE>()), loc);
14031406
case HLIL_DO_WHILE_SSA:
14041407
return dest->DoWhileSSA(subExprHandler(GetLoopExpr<HLIL_DO_WHILE_SSA>()),
14051408
subExprHandler(GetConditionPhiExpr<HLIL_DO_WHILE_SSA>()),
1406-
subExprHandler(GetConditionExpr<HLIL_DO_WHILE_SSA>()), *this);
1409+
subExprHandler(GetConditionExpr<HLIL_DO_WHILE_SSA>()), loc);
14071410
case HLIL_FOR:
14081411
return dest->For(subExprHandler(GetInitExpr<HLIL_FOR>()), subExprHandler(GetConditionExpr<HLIL_FOR>()),
1409-
subExprHandler(GetUpdateExpr<HLIL_FOR>()), subExprHandler(GetLoopExpr<HLIL_FOR>()), *this);
1412+
subExprHandler(GetUpdateExpr<HLIL_FOR>()), subExprHandler(GetLoopExpr<HLIL_FOR>()), loc);
14101413
case HLIL_FOR_SSA:
14111414
return dest->ForSSA(subExprHandler(GetInitExpr<HLIL_FOR_SSA>()),
14121415
subExprHandler(GetConditionPhiExpr<HLIL_FOR_SSA>()), subExprHandler(GetConditionExpr<HLIL_FOR_SSA>()),
1413-
subExprHandler(GetUpdateExpr<HLIL_FOR_SSA>()), subExprHandler(GetLoopExpr<HLIL_FOR_SSA>()), *this);
1416+
subExprHandler(GetUpdateExpr<HLIL_FOR_SSA>()), subExprHandler(GetLoopExpr<HLIL_FOR_SSA>()), loc);
14141417
case HLIL_SWITCH:
14151418
for (auto i : GetCases<HLIL_SWITCH>())
14161419
params.push_back(subExprHandler(i));
14171420
return dest->Switch(subExprHandler(GetConditionExpr<HLIL_SWITCH>()),
1418-
subExprHandler(GetDefaultExpr<HLIL_SWITCH>()), params, *this);
1421+
subExprHandler(GetDefaultExpr<HLIL_SWITCH>()), params, loc);
14191422
case HLIL_CASE:
14201423
for (auto i : GetValueExprs<HLIL_CASE>())
14211424
params.push_back(subExprHandler(i));
1422-
return dest->Case(params, subExprHandler(GetTrueExpr<HLIL_CASE>()), *this);
1425+
return dest->Case(params, subExprHandler(GetTrueExpr<HLIL_CASE>()), loc);
14231426
case HLIL_BREAK:
1424-
return dest->Break(*this);
1427+
return dest->Break(loc);
14251428
case HLIL_CONTINUE:
1426-
return dest->Continue(*this);
1429+
return dest->Continue(loc);
14271430
case HLIL_GOTO:
1428-
return dest->Goto(GetTarget<HLIL_GOTO>(), *this);
1431+
return dest->Goto(GetTarget<HLIL_GOTO>(), loc);
14291432
case HLIL_LABEL:
1430-
return dest->Label(GetTarget<HLIL_LABEL>(), *this);
1433+
return dest->Label(GetTarget<HLIL_LABEL>(), loc);
14311434
case HLIL_VAR_DECLARE:
1432-
return dest->VarDeclare(GetVariable<HLIL_VAR_DECLARE>(), *this);
1435+
return dest->VarDeclare(GetVariable<HLIL_VAR_DECLARE>(), loc);
14331436
case HLIL_VAR_INIT:
14341437
return dest->VarInit(
1435-
size, GetDestVariable<HLIL_VAR_INIT>(), subExprHandler(GetSourceExpr<HLIL_VAR_INIT>()), *this);
1438+
size, GetDestVariable<HLIL_VAR_INIT>(), subExprHandler(GetSourceExpr<HLIL_VAR_INIT>()), loc);
14361439
case HLIL_VAR_INIT_SSA:
14371440
return dest->VarInitSSA(
1438-
size, GetDestSSAVariable<HLIL_VAR_INIT_SSA>(), subExprHandler(GetSourceExpr<HLIL_VAR_INIT_SSA>()), *this);
1441+
size, GetDestSSAVariable<HLIL_VAR_INIT_SSA>(), subExprHandler(GetSourceExpr<HLIL_VAR_INIT_SSA>()), loc);
14391442
case HLIL_ASSIGN:
14401443
return dest->Assign(
1441-
size, subExprHandler(GetDestExpr<HLIL_ASSIGN>()), subExprHandler(GetSourceExpr<HLIL_ASSIGN>()), *this);
1444+
size, subExprHandler(GetDestExpr<HLIL_ASSIGN>()), subExprHandler(GetSourceExpr<HLIL_ASSIGN>()), loc);
14421445
case HLIL_ASSIGN_UNPACK:
14431446
for (auto i : GetDestExprs<HLIL_ASSIGN_UNPACK>())
14441447
output.push_back(subExprHandler(i));
1445-
return dest->AssignUnpack(output, subExprHandler(GetSourceExpr<HLIL_ASSIGN_UNPACK>()), *this);
1448+
return dest->AssignUnpack(output, subExprHandler(GetSourceExpr<HLIL_ASSIGN_UNPACK>()), loc);
14461449
case HLIL_ASSIGN_MEM_SSA:
14471450
return dest->AssignMemSSA(size, subExprHandler(GetDestExpr<HLIL_ASSIGN_MEM_SSA>()),
14481451
GetDestMemoryVersion<HLIL_ASSIGN_MEM_SSA>(), subExprHandler(GetSourceExpr<HLIL_ASSIGN_MEM_SSA>()),
1449-
GetSourceMemoryVersion<HLIL_ASSIGN_MEM_SSA>(), *this);
1452+
GetSourceMemoryVersion<HLIL_ASSIGN_MEM_SSA>(), loc);
14501453
case HLIL_ASSIGN_UNPACK_MEM_SSA:
14511454
for (auto i : GetDestExprs<HLIL_ASSIGN_UNPACK_MEM_SSA>())
14521455
output.push_back(subExprHandler(i));
14531456
return dest->AssignUnpackMemSSA(output, GetDestMemoryVersion<HLIL_ASSIGN_UNPACK_MEM_SSA>(),
14541457
subExprHandler(GetSourceExpr<HLIL_ASSIGN_UNPACK_MEM_SSA>()),
1455-
GetSourceMemoryVersion<HLIL_ASSIGN_UNPACK_MEM_SSA>(), *this);
1458+
GetSourceMemoryVersion<HLIL_ASSIGN_UNPACK_MEM_SSA>(), loc);
14561459
case HLIL_FORCE_VER:
1457-
return dest->ForceVer(size, GetDestVariable<HLIL_FORCE_VER>(), GetVariable<HLIL_FORCE_VER>(), *this);
1460+
return dest->ForceVer(size, GetDestVariable<HLIL_FORCE_VER>(), GetVariable<HLIL_FORCE_VER>(), loc);
14581461
case HLIL_FORCE_VER_SSA:
1459-
return dest->ForceVerSSA(size, GetDestSSAVariable<HLIL_FORCE_VER_SSA>(), GetSSAVariable<HLIL_FORCE_VER_SSA>(), *this);
1462+
return dest->ForceVerSSA(size, GetDestSSAVariable<HLIL_FORCE_VER_SSA>(), GetSSAVariable<HLIL_FORCE_VER_SSA>(), loc);
14601463
case HLIL_ASSERT:
1461-
return dest->Assert(size, GetVariable<HLIL_ASSERT>(), GetConstraint<HLIL_ASSERT>(), *this);
1464+
return dest->Assert(size, GetVariable<HLIL_ASSERT>(), GetConstraint<HLIL_ASSERT>(), loc);
14621465
case HLIL_ASSERT_SSA:
1463-
return dest->AssertSSA(size, GetSSAVariable<HLIL_ASSERT_SSA>(), GetConstraint<HLIL_ASSERT_SSA>(), *this);
1466+
return dest->AssertSSA(size, GetSSAVariable<HLIL_ASSERT_SSA>(), GetConstraint<HLIL_ASSERT_SSA>(), loc);
14641467
case HLIL_VAR:
1465-
return dest->Var(size, GetVariable<HLIL_VAR>(), *this);
1468+
return dest->Var(size, GetVariable<HLIL_VAR>(), loc);
14661469
case HLIL_VAR_SSA:
1467-
return dest->VarSSA(size, GetSSAVariable<HLIL_VAR_SSA>(), *this);
1470+
return dest->VarSSA(size, GetSSAVariable<HLIL_VAR_SSA>(), loc);
14681471
case HLIL_VAR_PHI:
1469-
return dest->VarPhi(GetDestSSAVariable<HLIL_VAR_PHI>(), GetSourceSSAVariables<HLIL_VAR_PHI>(), *this);
1472+
return dest->VarPhi(GetDestSSAVariable<HLIL_VAR_PHI>(), GetSourceSSAVariables<HLIL_VAR_PHI>(), loc);
14701473
case HLIL_MEM_PHI:
1471-
return dest->MemPhi(GetDestMemoryVersion<HLIL_MEM_PHI>(), GetSourceMemoryVersions<HLIL_MEM_PHI>(), *this);
1474+
return dest->MemPhi(GetDestMemoryVersion<HLIL_MEM_PHI>(), GetSourceMemoryVersions<HLIL_MEM_PHI>(), loc);
14721475
case HLIL_STRUCT_FIELD:
14731476
return dest->StructField(size, subExprHandler(GetSourceExpr<HLIL_STRUCT_FIELD>()),
1474-
GetOffset<HLIL_STRUCT_FIELD>(), GetMemberIndex<HLIL_STRUCT_FIELD>(), *this);
1477+
GetOffset<HLIL_STRUCT_FIELD>(), GetMemberIndex<HLIL_STRUCT_FIELD>(), loc);
14751478
case HLIL_ARRAY_INDEX:
14761479
return dest->ArrayIndex(size, subExprHandler(GetSourceExpr<HLIL_ARRAY_INDEX>()),
1477-
subExprHandler(GetIndexExpr<HLIL_ARRAY_INDEX>()), *this);
1480+
subExprHandler(GetIndexExpr<HLIL_ARRAY_INDEX>()), loc);
14781481
case HLIL_ARRAY_INDEX_SSA:
14791482
return dest->ArrayIndexSSA(size, subExprHandler(GetSourceExpr<HLIL_ARRAY_INDEX_SSA>()),
14801483
GetSourceMemoryVersion<HLIL_ARRAY_INDEX_SSA>(), subExprHandler(GetIndexExpr<HLIL_ARRAY_INDEX_SSA>()),
1481-
*this);
1484+
loc);
14821485
case HLIL_SPLIT:
14831486
return dest->Split(
1484-
size, subExprHandler(GetHighExpr<HLIL_SPLIT>()), subExprHandler(GetLowExpr<HLIL_SPLIT>()), *this);
1487+
size, subExprHandler(GetHighExpr<HLIL_SPLIT>()), subExprHandler(GetLowExpr<HLIL_SPLIT>()), loc);
14851488
case HLIL_DEREF:
1486-
return dest->Deref(size, subExprHandler(GetSourceExpr<HLIL_DEREF>()), *this);
1489+
return dest->Deref(size, subExprHandler(GetSourceExpr<HLIL_DEREF>()), loc);
14871490
case HLIL_DEREF_FIELD:
14881491
return dest->DerefField(size, subExprHandler(GetSourceExpr<HLIL_DEREF_FIELD>()), GetOffset<HLIL_DEREF_FIELD>(),
1489-
GetMemberIndex<HLIL_DEREF_FIELD>(), *this);
1492+
GetMemberIndex<HLIL_DEREF_FIELD>(), loc);
14901493
case HLIL_DEREF_SSA:
14911494
return dest->DerefSSA(
1492-
size, subExprHandler(GetSourceExpr<HLIL_DEREF_SSA>()), GetSourceMemoryVersion<HLIL_DEREF_SSA>(), *this);
1495+
size, subExprHandler(GetSourceExpr<HLIL_DEREF_SSA>()), GetSourceMemoryVersion<HLIL_DEREF_SSA>(), loc);
14931496
case HLIL_DEREF_FIELD_SSA:
14941497
return dest->DerefFieldSSA(size, subExprHandler(GetSourceExpr<HLIL_DEREF_FIELD_SSA>()),
14951498
GetSourceMemoryVersion<HLIL_DEREF_FIELD_SSA>(), GetOffset<HLIL_DEREF_FIELD_SSA>(),
1496-
GetMemberIndex<HLIL_DEREF_FIELD_SSA>(), *this);
1499+
GetMemberIndex<HLIL_DEREF_FIELD_SSA>(), loc);
14971500
case HLIL_ADDRESS_OF:
1498-
return dest->AddressOf(subExprHandler(GetSourceExpr<HLIL_ADDRESS_OF>()), *this);
1501+
return dest->AddressOf(subExprHandler(GetSourceExpr<HLIL_ADDRESS_OF>()), loc);
14991502
case HLIL_CALL:
15001503
for (auto i : GetParameterExprs<HLIL_CALL>())
15011504
params.push_back(subExprHandler(i));
1502-
return dest->Call(subExprHandler(GetDestExpr<HLIL_CALL>()), params, *this);
1505+
return dest->Call(subExprHandler(GetDestExpr<HLIL_CALL>()), params, loc);
15031506
case HLIL_SYSCALL:
15041507
for (auto i : GetParameterExprs<HLIL_SYSCALL>())
15051508
params.push_back(subExprHandler(i));
1506-
return dest->Syscall(params, *this);
1509+
return dest->Syscall(params, loc);
15071510
case HLIL_TAILCALL:
15081511
for (auto i : GetParameterExprs<HLIL_TAILCALL>())
15091512
params.push_back(subExprHandler(i));
1510-
return dest->TailCall(subExprHandler(GetDestExpr<HLIL_TAILCALL>()), params, *this);
1513+
return dest->TailCall(subExprHandler(GetDestExpr<HLIL_TAILCALL>()), params, loc);
15111514
case HLIL_CALL_SSA:
15121515
for (auto i : GetParameterExprs<HLIL_CALL_SSA>())
15131516
params.push_back(subExprHandler(i));
15141517
return dest->CallSSA(subExprHandler(GetDestExpr<HLIL_CALL_SSA>()), params,
1515-
GetDestMemoryVersion<HLIL_CALL_SSA>(), GetSourceMemoryVersion<HLIL_CALL_SSA>(), *this);
1518+
GetDestMemoryVersion<HLIL_CALL_SSA>(), GetSourceMemoryVersion<HLIL_CALL_SSA>(), loc);
15161519
case HLIL_SYSCALL_SSA:
15171520
for (auto i : GetParameterExprs<HLIL_SYSCALL_SSA>())
15181521
params.push_back(subExprHandler(i));
15191522
return dest->SyscallSSA(
1520-
params, GetDestMemoryVersion<HLIL_SYSCALL_SSA>(), GetSourceMemoryVersion<HLIL_SYSCALL_SSA>(), *this);
1523+
params, GetDestMemoryVersion<HLIL_SYSCALL_SSA>(), GetSourceMemoryVersion<HLIL_SYSCALL_SSA>(), loc);
15211524
case HLIL_RET:
15221525
for (auto i : GetSourceExprs<HLIL_RET>())
15231526
params.push_back(subExprHandler(i));
1524-
return dest->Return(params, *this);
1527+
return dest->Return(params, loc);
15251528
case HLIL_NORET:
1526-
return dest->NoReturn(*this);
1529+
return dest->NoReturn(loc);
15271530
case HLIL_UNREACHABLE:
1528-
return dest->Unreachable(*this);
1531+
return dest->Unreachable(loc);
15291532
case HLIL_NEG:
15301533
case HLIL_NOT:
15311534
case HLIL_SX:
@@ -1544,7 +1547,7 @@ ExprId HighLevelILInstruction::CopyTo(
15441547
case HLIL_FLOOR:
15451548
case HLIL_CEIL:
15461549
case HLIL_FTRUNC:
1547-
return dest->AddExprWithLocation(operation, *this, size, subExprHandler(AsOneOperand().GetSourceExpr()));
1550+
return dest->AddExprWithLocation(operation, loc, size, subExprHandler(AsOneOperand().GetSourceExpr()));
15481551
case HLIL_ADD:
15491552
case HLIL_SUB:
15501553
case HLIL_AND:
@@ -1590,44 +1593,44 @@ ExprId HighLevelILInstruction::CopyTo(
15901593
case HLIL_FCMP_GT:
15911594
case HLIL_FCMP_O:
15921595
case HLIL_FCMP_UO:
1593-
return dest->AddExprWithLocation(operation, *this, size, subExprHandler(AsTwoOperand().GetLeftExpr()),
1596+
return dest->AddExprWithLocation(operation, loc, size, subExprHandler(AsTwoOperand().GetLeftExpr()),
15941597
subExprHandler(AsTwoOperand().GetRightExpr()));
15951598
case HLIL_ADC:
15961599
case HLIL_SBB:
15971600
case HLIL_RLC:
15981601
case HLIL_RRC:
1599-
return dest->AddExprWithLocation(operation, *this, size, subExprHandler(AsTwoOperandWithCarry().GetLeftExpr()),
1602+
return dest->AddExprWithLocation(operation, loc, size, subExprHandler(AsTwoOperandWithCarry().GetLeftExpr()),
16001603
subExprHandler(AsTwoOperandWithCarry().GetRightExpr()),
16011604
subExprHandler(AsTwoOperandWithCarry().GetCarryExpr()));
16021605
case HLIL_CONST:
1603-
return dest->Const(size, GetConstant<HLIL_CONST>(), *this);
1606+
return dest->Const(size, GetConstant<HLIL_CONST>(), loc);
16041607
case HLIL_CONST_PTR:
1605-
return dest->ConstPointer(size, GetConstant<HLIL_CONST_PTR>(), *this);
1608+
return dest->ConstPointer(size, GetConstant<HLIL_CONST_PTR>(), loc);
16061609
case HLIL_EXTERN_PTR:
1607-
return dest->ExternPointer(size, GetConstant<HLIL_EXTERN_PTR>(), GetOffset<HLIL_EXTERN_PTR>(), *this);
1610+
return dest->ExternPointer(size, GetConstant<HLIL_EXTERN_PTR>(), GetOffset<HLIL_EXTERN_PTR>(), loc);
16081611
case HLIL_FLOAT_CONST:
1609-
return dest->FloatConstRaw(size, GetConstant<HLIL_FLOAT_CONST>(), *this);
1612+
return dest->FloatConstRaw(size, GetConstant<HLIL_FLOAT_CONST>(), loc);
16101613
case HLIL_IMPORT:
1611-
return dest->ImportedAddress(size, GetConstant<HLIL_IMPORT>(), *this);
1614+
return dest->ImportedAddress(size, GetConstant<HLIL_IMPORT>(), loc);
16121615
case HLIL_CONST_DATA:
1613-
return dest->ConstData(size, GetConstantData<HLIL_CONST_DATA>(), *this);
1616+
return dest->ConstData(size, GetConstantData<HLIL_CONST_DATA>(), loc);
16141617
case HLIL_BP:
1615-
return dest->Breakpoint(*this);
1618+
return dest->Breakpoint(loc);
16161619
case HLIL_TRAP:
1617-
return dest->Trap(GetVector<HLIL_TRAP>(), *this);
1620+
return dest->Trap(GetVector<HLIL_TRAP>(), loc);
16181621
case HLIL_INTRINSIC:
16191622
for (auto i : GetParameterExprs<HLIL_INTRINSIC>())
16201623
params.push_back(subExprHandler(i));
1621-
return dest->Intrinsic(GetIntrinsic<HLIL_INTRINSIC>(), params, *this);
1624+
return dest->Intrinsic(GetIntrinsic<HLIL_INTRINSIC>(), params, loc);
16221625
case HLIL_INTRINSIC_SSA:
16231626
for (auto i : GetParameterExprs<HLIL_INTRINSIC_SSA>())
16241627
params.push_back(subExprHandler(i));
16251628
return dest->IntrinsicSSA(GetIntrinsic<HLIL_INTRINSIC_SSA>(), params,
1626-
GetDestMemoryVersion<HLIL_INTRINSIC_SSA>(), GetSourceMemoryVersion<HLIL_INTRINSIC_SSA>(), *this);
1629+
GetDestMemoryVersion<HLIL_INTRINSIC_SSA>(), GetSourceMemoryVersion<HLIL_INTRINSIC_SSA>(), loc);
16271630
case HLIL_UNDEF:
1628-
return dest->Undefined(*this);
1631+
return dest->Undefined(loc);
16291632
case HLIL_UNIMPL:
1630-
return dest->Unimplemented(*this);
1633+
return dest->Unimplemented(loc);
16311634
default:
16321635
throw HighLevelILInstructionAccessException();
16331636
}

highlevelilinstruction.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <vector>
2626
#ifdef BINARYNINJACORE_LIBRARY
2727
#include "variable.h"
28+
#include "ilsourcelocation.h"
2829
#else
2930
#include "binaryninjaapi.h"
3031
#endif
@@ -487,9 +488,10 @@ namespace BinaryNinja
487488
void VisitExprs(const std::function<bool(const HighLevelILInstruction& expr)>& preFunc,
488489
const std::function<void(const HighLevelILInstruction& expr)>& postFunc) const;
489490

490-
ExprId CopyTo(HighLevelILFunction* dest) const;
491+
ExprId CopyTo(HighLevelILFunction* dest, const ILSourceLocation& sourceLocation = {}) const;
491492
ExprId CopyTo(HighLevelILFunction* dest,
492-
const std::function<ExprId(const HighLevelILInstruction& subExpr)>& subExprHandler) const;
493+
const std::function<ExprId(const HighLevelILInstruction& subExpr)>& subExprHandler,
494+
const ILSourceLocation& sourceLocation = {}) const;
493495

494496
bool operator<(const HighLevelILInstruction& other) const;
495497
bool operator==(const HighLevelILInstruction& other) const;

0 commit comments

Comments
 (0)