@Override
	protected void parseInternal() throws MDException {
		callIndex.parse();
		thunkType = dmang.getAndIncrement();
		switch (thunkType) { // TODO 20171113: Need tests for all of these.
			case 'A': // UINFO: near 'this', near 'call', near 'vfptr'
				myThisModel = ThisModel.NEAR;
				myCallModel = CallModel.NEAR;
				myVfptrModel = VfptrModel.NEAR;
				// nameModifier += "{flat}}' }'"; //"{flat}" is valid for 32-bit,
				// but not others
				// nameModifier += "__near this, __near call, __near vfptr}}' }'";
				break;
			case 'B': // UINFO: near 'this', far 'call', near 'vfptr'
				myThisModel = ThisModel.NEAR;
				myCallModel = CallModel.FAR;
				myVfptrModel = VfptrModel.NEAR;
				// nameModifier += "__near this, __far call, __near vfptr}}' }'";
				break;
			case 'C': // UINFO: far 'this', near 'call', near 'vfptr'
				myThisModel = ThisModel.FAR;
				myCallModel = CallModel.NEAR;
				myVfptrModel = VfptrModel.NEAR;
				// nameModifier += "__far this, __near call, __near vfptr}}' }'";
				break;
			case 'D': // UINFO: far 'this', far 'call', near 'vfptr'
				myThisModel = ThisModel.FAR;
				myCallModel = CallModel.FAR;
				myVfptrModel = VfptrModel.NEAR;
				// nameModifier += "__far this, __far call, __near vfptr}}' }'";
				break;
			case 'E': // UINFO: near 'this', near 'call', far 'vfptr'
				myThisModel = ThisModel.NEAR;
				myCallModel = CallModel.NEAR;
				myVfptrModel = VfptrModel.FAR;
				// nameModifier += "__near this, __near call, __far vfptr}}' }'";
				break;
			case 'F': // UINFO: near 'this', far 'call', far 'vfptr'
				myThisModel = ThisModel.NEAR;
				myCallModel = CallModel.FAR;
				myVfptrModel = VfptrModel.FAR;
				// nameModifier += "__near this, __far call, __far vfptr}}' }'";
				break;
			case 'G': // UINFO: far 'this', near 'call', far 'vfptr'
				myThisModel = ThisModel.FAR;
				myCallModel = CallModel.NEAR;
				myVfptrModel = VfptrModel.FAR;
				// nameModifier += "__far this, __near call, __far vfptr}}' }'";
				break;
			case 'H': // UINFO: far 'this', far 'call', far 'vfptr'
				myThisModel = ThisModel.FAR;
				myCallModel = CallModel.FAR;
				myVfptrModel = VfptrModel.FAR;
				// nameModifier += "__far this, __far call, __far vfptr}}' }'";
				break;
			case 'I': // UINFO: near 'this', near 'call', based 'vfptr'
				myThisModel = ThisModel.NEAR;
				myCallModel = CallModel.NEAR;
				myVfptrModel = VfptrModel.BASED;
				basedType.parse(); // TODO: check this
				// nameModifier += "__near this, __near call, " + basedType + "
				// vfptr}}' }'";
				break;
			case 'J': // UINFO: near 'this', far 'call', based 'vfptr'
				myThisModel = ThisModel.NEAR;
				myCallModel = CallModel.FAR;
				myVfptrModel = VfptrModel.BASED;
				basedType.parse(); // TODO: check this
				// nameModifier += "__near this, __far call, " + basedType + "
				// vfptr}}' }'";
				break;
			case 'K': // UINFO: far 'this', near 'call', based 'vfptr'
				myThisModel = ThisModel.FAR;
				myCallModel = CallModel.NEAR;
				myVfptrModel = VfptrModel.BASED;
				basedType.parse(); // TODO: check this
				// nameModifier += "__far this, __near call, " + basedType + "
				// vfptr}}' }'";
				break;
			case 'L': // UINFO: far 'this', far 'call', based 'vfptr'
				myThisModel = ThisModel.FAR;
				myCallModel = CallModel.FAR;
				myVfptrModel = VfptrModel.BASED;
				basedType.parse(); // TODO: check this
				// nameModifier += "__far this, __far call, " + basedType + "
				// vfptr}}' }'";
				break;
			default:
				throw new MDException("VCall ($B), unexpected thunkType: " + thunkType);
		}
		// TODO evaluate whether parseInternal() or parse.
		super.parseInternal();
	}
This class represents a virtual call (Microsoft C++ mangling parlance)
 derivative of MDTypeInfo.
Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/typeinfo/MDVCall.java