MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / CollectSubExprs

Method CollectSubExprs

highlevelilinstruction.cpp:1046–1292  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1044
1045
1046void HighLevelILInstruction::CollectSubExprs(stack<size_t>& toProcess) const
1047{
1048 vector<HighLevelILInstruction> exprs;
1049 switch (operation)
1050 {
1051 case HLIL_BLOCK:
1052 exprs = GetBlockExprs<HLIL_BLOCK>();
1053 for (auto i = exprs.rbegin(); i != exprs.rend(); ++i)
1054 toProcess.push(i->exprIndex);
1055 break;
1056 case HLIL_IF:
1057 if (ast)
1058 {
1059 toProcess.push(GetFalseExpr<HLIL_IF>().exprIndex);
1060 toProcess.push(GetTrueExpr<HLIL_IF>().exprIndex);
1061 }
1062 toProcess.push(GetConditionExpr<HLIL_IF>().exprIndex);
1063 break;
1064 case HLIL_WHILE:
1065 if (ast)
1066 toProcess.push(GetLoopExpr<HLIL_WHILE>().exprIndex);
1067 toProcess.push(GetConditionExpr<HLIL_WHILE>().exprIndex);
1068 break;
1069 case HLIL_WHILE_SSA:
1070 if (ast)
1071 toProcess.push(GetLoopExpr<HLIL_WHILE_SSA>().exprIndex);
1072 toProcess.push(GetConditionExpr<HLIL_WHILE_SSA>().exprIndex);
1073 toProcess.push(GetConditionPhiExpr<HLIL_WHILE_SSA>().exprIndex);
1074 break;
1075 case HLIL_DO_WHILE:
1076 toProcess.push(GetConditionExpr<HLIL_DO_WHILE>().exprIndex);
1077 if (ast)
1078 toProcess.push(GetLoopExpr<HLIL_DO_WHILE>().exprIndex);
1079 break;
1080 case HLIL_DO_WHILE_SSA:
1081 toProcess.push(GetConditionExpr<HLIL_DO_WHILE_SSA>().exprIndex);
1082 toProcess.push(GetConditionPhiExpr<HLIL_DO_WHILE_SSA>().exprIndex);
1083 if (ast)
1084 toProcess.push(GetLoopExpr<HLIL_DO_WHILE_SSA>().exprIndex);
1085 break;
1086 case HLIL_FOR:
1087 if (ast)
1088 toProcess.push(GetLoopExpr<HLIL_FOR>().exprIndex);
1089 toProcess.push(GetUpdateExpr<HLIL_FOR>().exprIndex);
1090 toProcess.push(GetConditionExpr<HLIL_FOR>().exprIndex);
1091 toProcess.push(GetInitExpr<HLIL_FOR>().exprIndex);
1092 break;
1093 case HLIL_FOR_SSA:
1094 if (ast)
1095 toProcess.push(GetLoopExpr<HLIL_FOR_SSA>().exprIndex);
1096 toProcess.push(GetUpdateExpr<HLIL_FOR_SSA>().exprIndex);
1097 toProcess.push(GetConditionExpr<HLIL_FOR_SSA>().exprIndex);
1098 toProcess.push(GetConditionPhiExpr<HLIL_FOR_SSA>().exprIndex);
1099 toProcess.push(GetInitExpr<HLIL_FOR_SSA>().exprIndex);
1100 break;
1101 case HLIL_SWITCH:
1102 if (ast)
1103 {

Callers 1

VisitExprsMethod · 0.80

Calls 5

pushMethod · 0.45
GetSourceExprMethod · 0.45
GetRightExprMethod · 0.45
GetLeftExprMethod · 0.45
GetCarryExprMethod · 0.45

Tested by

no test coverage detected