toStringWithVM method

String toStringWithVM([
  1. Machine? vm
])

Implementation

String toStringWithVM([Machine? vm]) {
  String text;
  switch (op) {
    case LineOp.assignA:
      text = "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)}";
      break;
    case LineOp.assignImplicit:
      text = "_ := ${rhsA?.toStringWithVM(vm)}";
      break;
    case LineOp.aPlusB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} + ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aMinusB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} - ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aTimesB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} * ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aDividedByB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} / ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aModB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} % ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aPowB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} ^ ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aEqualB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} == ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aNotEqualB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} != ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aGreaterThanB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} > ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aGreatOrEqualB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} >= ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aLessThanB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} < ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aLessOrEqualB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} <= ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aAndB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} and ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aOrB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} or ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.aIsaB:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)} isa ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.bindAssignA:
      text =
          "${rhsA?.toStringWithVM(vm)} := ${rhsB?.toStringWithVM(vm)}; ${rhsA?.toStringWithVM(vm)}.outerVars=";
      break;
    case LineOp.copyA:
      text =
          "${lhs?.toStringWithVM(vm)} := copy of ${rhsA?.toStringWithVM(vm)}";
      break;
    case LineOp.newA:
      text = "${lhs?.toStringWithVM(vm)} := new ${rhsA?.toStringWithVM(vm)}";
      break;
    case LineOp.notA:
      text = "${lhs?.toStringWithVM(vm)} := not ${rhsA?.toStringWithVM(vm)}";
      break;
    case LineOp.gotoA:
      text = "goto ${rhsA?.toStringWithVM(vm)}";
      break;
    case LineOp.gotoAifB:
      text =
          "goto ${rhsA?.toStringWithVM(vm)} if ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.gotoAifTrulyB:
      text =
          "goto ${rhsA?.toStringWithVM(vm)} if truly ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.gotoAifNotB:
      text =
          "goto ${rhsA?.toStringWithVM(vm)} if not ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.pushParam:
      text = "push param ${rhsA?.toStringWithVM(vm)}";
      break;
    case LineOp.callFunctionA:
      text =
          "${lhs?.toStringWithVM(vm)} := call ${rhsA?.toStringWithVM(vm)} with ${rhsB?.toStringWithVM(vm)} args";
      break;
    case LineOp.callIntrinsicA:
      text = "intrinsic ${Intrinsic.getByID(rhsA!.intValue())}";
      break;
    case LineOp.returnA:
      text =
          "${lhs?.toStringWithVM(vm)} := ${rhsA?.toStringWithVM(vm)}; return";
      break;
    case LineOp.elemBofA:
      text =
          "${lhs?.toStringWithVM(vm)} = ${rhsA?.toStringWithVM(vm)}[${rhsB?.toStringWithVM(vm)}]";
      break;
    case LineOp.elemBofIterA:
      text =
          "${lhs?.toStringWithVM(vm)} = ${rhsA?.toStringWithVM(vm)} iter ${rhsB?.toStringWithVM(vm)}";
      break;
    case LineOp.lengthOfA:
      text = "${lhs?.toStringWithVM(vm)} = len(${rhsA?.toStringWithVM(vm)})";
      break;
    default:
      text = "unknown opcode: $op";
  }

  if (location != null) text = "$text\t// $location";
  return text;
}