Eliminate InstructionFormat.members.

This field is no longer needed. We can use imm_members to get the names
of immediate fields, and num_value_operands to access values.
This commit is contained in:
Jakob Stoklund Olesen
2017-03-10 10:04:30 -08:00
parent af3fa6b83d
commit da693f72e2

View File

@@ -56,7 +56,6 @@ class InstructionFormat(object):
self.multiple_results = kwargs.get('multiple_results', False) self.multiple_results = kwargs.get('multiple_results', False)
self.has_value_list = kwargs.get('value_list', False) self.has_value_list = kwargs.get('value_list', False)
self.boxed_storage = kwargs.get('boxed_storage', False) self.boxed_storage = kwargs.get('boxed_storage', False)
self.members = list() # type: List[str]
# Struct member names for the immediate operands. All other instruction # Struct member names for the immediate operands. All other instruction
# operands are values or variable argument lists. They are all handled # operands are values or variable argument lists. They are all handled
@@ -101,6 +100,8 @@ class InstructionFormat(object):
pair. The member names correspond to members in the Rust pair. The member names correspond to members in the Rust
`InstructionData` data structure. `InstructionData` data structure.
Update the fields `num_value_operands`, `imm_kinds`, and `imm_members`.
Yields the operand kinds. Yields the operand kinds.
""" """
for arg in kinds: for arg in kinds:
@@ -120,25 +121,25 @@ class InstructionFormat(object):
self.imm_kinds.append(k) self.imm_kinds.append(k)
self.imm_members.append(member) self.imm_members.append(member)
self.members.append(member)
yield k yield k
def __str__(self): def __str__(self):
# type: () -> str # type: () -> str
args = ', '.join('{}: {}'.format(m, k) if m else str(k) args = ', '.join('{}: {}'.format(m, k)
for m, k in zip(self.members, self.kinds)) for m, k in zip(self.imm_members, self.imm_kinds))
return '{}({})'.format(self.name, args) return '{}({}, values={})'.format(
self.name, args, self.num_value_operands)
def __getattr__(self, attr): def __getattr__(self, attr):
# type: (str) -> FormatField # type: (str) -> FormatField
""" """
Make instruction format members available as attributes. Make immediate instruction format members available as attributes.
Each non-value format member becomes a corresponding `FormatField` Each non-value format member becomes a corresponding `FormatField`
attribute. attribute.
""" """
try: try:
i = self.members.index(attr) i = self.imm_members.index(attr)
except ValueError: except ValueError:
raise AttributeError( raise AttributeError(
'{} is neither a {} member or a ' '{} is neither a {} member or a '
@@ -192,7 +193,7 @@ class FormatField(object):
data type. data type.
:param format: Parent `InstructionFormat`. :param format: Parent `InstructionFormat`.
:param operand: Operand number in parent. :param operand: Immediate operand number in parent.
:param name: Member name in `InstructionData` variant. :param name: Member name in `InstructionData` variant.
""" """