Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
Public Member Functions | List of all members
miasm2.core.cpu.metamn Class Reference
+ Inheritance diagram for miasm2.core.cpu.metamn:
+ Collaboration diagram for miasm2.core.cpu.metamn:

Public Member Functions

def __new__
 

Detailed Description

Definition at line 853 of file cpu.py.

Member Function Documentation

def miasm2.core.cpu.metamn.__new__ (   mcs,
  name,
  bases,
  dct 
)

Definition at line 855 of file cpu.py.

856  def __new__(mcs, name, bases, dct):
857  if name == "cls_mn" or name.startswith('mn_'):
858  return type.__new__(mcs, name, bases, dct)
859  alias = dct.get('alias', False)
860 
861  fields = bases[0].mod_fields(dct['fields'])
862  if not 'name' in dct:
863  dct["name"] = bases[0].getmn(name)
864  if 'args' in dct:
865  # special case for permuted arguments
866  o = []
867  p = []
868  for i, a in enumerate(dct['args']):
869  o.append((i, a))
870  if a in fields:
871  p.append((fields.index(a), a))
872  p.sort()
873  p = [x[1] for x in p]
874  p = [dct['args'].index(x) for x in p]
875  dct['args_permut'] = perm_inv(p)
876  # order fields
877  f_ordered = [x for x in enumerate(fields)]
878  f_ordered.sort(key=lambda x: (x[1].prio, x[0]))
879  candidates = bases[0].gen_modes(mcs, name, bases, dct, fields)
880  for i, fc in f_ordered:
881  if isinstance(fc, bs_divert):
882  candidates = fc.divert(i, candidates)
883  for cls, name, bases, dct, fields in candidates:
884  ndct = dict(dct)
885  fields = [f for f in fields if f]
886  ndct['fields'] = fields
887  ndct['mn_len'] = sum([x.l for x in fields])
888  c = type.__new__(cls, name, bases, ndct)
889  c.alias = alias
890  c.check_mnemo(fields)
891  c.num = bases[0].num
892  bases[0].num += 1
893  bases[0].all_mn.append(c)
894  mode = dct['mode']
895  bases[0].all_mn_mode[mode].append(c)
896  bases[0].all_mn_name[c.name].append(c)
897  i = c()
898  i.init_class()
899  bases[0].all_mn_inst[c].append(i)
900  add_candidate(bases, c)
901  # gen byte lookup
902  off = 0
903  o = ""
904  for f in i.fields_order:
905  if not isinstance(f, bsi):
906  raise ValueError('f is not bsi')
907  if f.l == 0:
908  continue
909  o += f.strbits
910  return c
911 
def perm_inv
Definition: cpu.py:684
def add_candidate
Definition: cpu.py:835
tuple c
Definition: ir2C.py:23

+ Here is the call graph for this function:


The documentation for this class was generated from the following file: