Definition at line 853 of file cpu.py.
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)
861 fields = bases[0].mod_fields(dct[
'fields'])
862 if not 'name' in dct:
863 dct[
"name"] = bases[0].getmn(name)
868 for i, a
in enumerate(dct[
'args']):
871 p.append((fields.index(a), a))
873 p = [x[1]
for x
in p]
874 p = [dct[
'args'].index(x)
for x
in p]
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:
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)
890 c.check_mnemo(fields)
893 bases[0].all_mn.append(c)
895 bases[0].all_mn_mode[mode].append(c)
896 bases[0].all_mn_name[c.name].append(c)
899 bases[0].all_mn_inst[c].append(i)
904 for f
in i.fields_order:
905 if not isinstance(f, bsi):
906 raise ValueError(
'f is not bsi')