private CliAbstractTable createTableObject(CliTypeTable tableType) throws IOException {
		switch (tableType) {
			case Module:
				return new CliTableModule(reader, this, tableType);

			case TypeRef:
				return new CliTableTypeRef(reader, this, tableType);

			case TypeDef:
				return new CliTableTypeDef(reader, this, tableType);

			case Field:
				return new CliTableField(reader, this, tableType);

			case MethodDef:
				return new CliTableMethodDef(reader, this, tableType);

			case Param:
				return new CliTableParam(reader, this, tableType);

			case InterfaceImpl:
				return new CliTableInterfaceImpl(reader, this, tableType);

			case MemberRef:
				return new CliTableMemberRef(reader, this, tableType);

			case Constant:
				return new CliTableConstant(reader, this, tableType);

			case CustomAttribute:
				return new CliTableCustomAttribute(reader, this, tableType);

			case FieldMarshal:
				return new CliTableFieldMarshall(reader, this, tableType);

			case DeclSecurity:
				return new CliTableDeclSecurity(reader, this, tableType);

			case ClassLayout:
				return new CliTableClassLayout(reader, this, tableType);

			case FieldLayout:
				return new CliTableFieldLayout(reader, this, tableType);

			case StandAloneSig:
				return new CliTableStandAloneSig(reader, this, tableType);

			case EventMap:
				return new CliTableEventMap(reader, this, tableType);

			case Event:
				return new CliTableEvent(reader, this, tableType);

			case PropertyMap:
				return new CliTablePropertyMap(reader, this, tableType);

			case Property:
				return new CliTableProperty(reader, this, tableType);

			case MethodSemantics:
				return new CliTableMethodSemantics(reader, this, tableType);

			case MethodImpl:
				return new CliTableMethodImpl(reader, this, tableType);

			case ModuleRef:
				return new CliTableModuleRef(reader, this, tableType);

			case TypeSpec:
				return new CliTableTypeSpec(reader, this, tableType);

			case ImplMap:
				return new CliTableImplMap(reader, this, tableType);

			case FieldRVA:
				return new CliTableFieldRVA(reader, this, tableType);

			case Assembly:
				return new CliTableAssembly(reader, this, tableType);

			case AssemblyProcessor:
				return new CliTableAssemblyProcessor(reader, this, tableType);

			case AssemblyOS:
				return new CliTableAssemblyOS(reader, this, tableType);

			case AssemblyRef:
				return new CliTableAssemblyRef(reader, this, tableType);

			case AssemblyRefProcessor:
				return new CliTableAssemblyRefProcessor(reader, this, tableType);

			case AssemblyRefOS:
				return new CliTableAssemblyRefOS(reader, this, tableType);

			case File:
				return new CliTableFile(reader, this, tableType);

			case ExportedType:
				return new CliTableExportedType(reader, this, tableType);

			case ManifestResource:
				return new CliTableManifestResource(reader, this, tableType);

			case NestedClass:
				return new CliTableNestedClass(reader, this, tableType);

			case GenericParam:
				return new CliTableGenericParam(reader, this, tableType);

			case MethodSpec:
				return new CliTableMethodSpec(reader, this, tableType);

			case GenericParamConstraint:
				return new CliTableGenericParamConstraint(reader, this, tableType);

			default:
				Msg.warn(this,
					"Parsing table type \"" + tableType.toString() + "\" is not supported.");
				return null;
		}
	}
Creates a new {@link CliAbstractTable} from the table at the current reader index
with the given table type.

@param tableType The type of table to create.
@return A new table with the given type.  Could be null if we don't support the table type.
@throws IOException if there was an issue reading the new table.
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/cli/streams/CliStreamMetadata.java