| 1044 | |
| 1045 | |
| 1046 | void 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 | { |
no test coverage detected