@Override
	protected void parseInternal() throws MDException {
		// 20170418 dmang.pushModifierContext();
		cvMod.parse();
		if (cvMod.isFunction()) {
			MDFunctionType ft = new MDFunctionType(dmang);
			// TODO: For following line, consider member function, etc, that have additional
			// properties...// 201602
			ft.setThisPointerCVMod(cvMod.getThisPointerMDCVMod());
			refType = ft;
			// refType.setIsReferencedType();
			refType.parse();
			// 20160819 if (managedProperty == null ) {
			// if (cvMod.isPointerType() || cvMod.isReferenceType()) {
			// //20160819: might need to add more (caret, percent)
			// if (cvMod.isFunctionPointerType() || cvMod.isReferenceType()) {
			// //20160819: might need to add more (caret, percent)
			// ((MDFunctionType) refType).setFromModifier();
			// }
			// 20160819 if (cvMod.isFunctionPointer()) {
			// 20160930: I think the real test is:
			// if (cvMod.isPointerType()) { //20160819
			// setModifierTypeName("*");
			// }
		}
		// else if (cvMod.isFunctionPointer()) {
		// refType = new MDFunctionProperty(dmang, cvMod.getMDCVModifier(),
		// true, true);
		// }
		else { // isData
				// 20170523 attempt
			if (dmang.peek() == 'Y') {
				refType = new MDArrayReferencedType(dmang);
			}
			else {
				refType = parseReferencedType();
			}
			// parseArrayProperty(dmang);
			// //20170516 refType = MDDataTypeParser.parse(dmang, false);
			// if (arrayString != null) { //20170516
			// refType = MDDataTypeParser.parsePrimaryDataType(dmang, false);
			// }
			// else {
			// refType = parseReferencedType(dmang); //20170516
			// }
			// refType.setIsReferencedType();
			refType.parse();
		}
		// 20170418 dmang.popContext();
	}
This class represents a modifier type, whether a pointer, reference, or other
 special modifier type.  This class stands on its own or is extended for one
 of the other types.
Ghidra/Features/MicrosoftDmang/src/main/java/mdemangler/datatype/modifier/MDModifierType.java