toStringWithVM method
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;
}