| 145 | |
| 146 | |
| 147 | static void PrintILExpr(const MediumLevelILInstruction& instr, size_t indent) |
| 148 | { |
| 149 | PrintIndent(indent); |
| 150 | PrintOperation(instr.operation); |
| 151 | printf("\n"); |
| 152 | |
| 153 | indent++; |
| 154 | |
| 155 | for (auto& operand : instr.GetOperands()) |
| 156 | { |
| 157 | switch (operand.GetType()) |
| 158 | { |
| 159 | case IntegerMediumLevelOperand: |
| 160 | PrintIndent(indent); |
| 161 | printf("int 0x%" PRIx64 "\n", operand.GetInteger()); |
| 162 | break; |
| 163 | |
| 164 | case IndexMediumLevelOperand: |
| 165 | PrintIndent(indent); |
| 166 | printf("index %" PRIdPTR "\n", operand.GetIndex()); |
| 167 | break; |
| 168 | |
| 169 | case ExprMediumLevelOperand: |
| 170 | PrintILExpr(operand.GetExpr(), indent); |
| 171 | break; |
| 172 | |
| 173 | case VariableMediumLevelOperand: |
| 174 | PrintIndent(indent); |
| 175 | printf("var "); |
| 176 | PrintVariable(instr.function, operand.GetVariable()); |
| 177 | printf("\n"); |
| 178 | break; |
| 179 | |
| 180 | case SSAVariableMediumLevelOperand: |
| 181 | PrintIndent(indent); |
| 182 | printf("ssa var "); |
| 183 | PrintVariable(instr.function, operand.GetSSAVariable().var); |
| 184 | printf("#%" PRIdPTR "\n", operand.GetSSAVariable().version); |
| 185 | break; |
| 186 | |
| 187 | case IndexListMediumLevelOperand: |
| 188 | PrintIndent(indent); |
| 189 | printf("index list "); |
| 190 | for (auto i : operand.GetIndexList()) |
| 191 | printf("%" PRIdPTR " ", i); |
| 192 | printf("\n"); |
| 193 | break; |
| 194 | |
| 195 | case VariableListMediumLevelOperand: |
| 196 | PrintIndent(indent); |
| 197 | printf("var list "); |
| 198 | for (auto i : operand.GetVariableList()) |
| 199 | { |
| 200 | PrintVariable(instr.function, i); |
| 201 | printf(" "); |
| 202 | } |
| 203 | printf("\n"); |
| 204 | break; |
no test coverage detected