11from amitools .vamos .error import *
22from amitools .vamos .log import log_mem_alloc
33from amitools .vamos .label import LabelRange , LabelStruct , LabelLib
4- from amitools .vamos .astructs .astruct import AmigaStruct
5- from amitools .vamos .astructs .pointer import BCPLPointerType
64
75
86class Memory :
9- def __init__ (self , addr , size , label , access , struct = None ):
7+ def __init__ (self , addr , size , label , struct = None ):
108 self .addr = addr
119 self .size = size
1210 self .label = label
13- self .access = access
1411 self .struct = struct
1512
1613 def __str__ (self ):
@@ -20,75 +17,6 @@ def __str__(self):
2017 return "[@%06x +%06x %06x]" % (self .addr , self .size , self .addr + self .size )
2118
2219
23- class _StructAccessCompat :
24- """Temporary compatibility adapter for Memory.access.
25-
26- New code should use the typed ``Memory.struct`` object directly.
27- """
28-
29- _field_path_cache = {}
30-
31- def __init__ (self , struct_def , struct ):
32- self ._struct_def = struct_def
33- self .struct = struct
34-
35- def w_s (self , name , val ):
36- field , field_def = self ._get_field_for_name (name )
37- if issubclass (field_def .type , BCPLPointerType ):
38- field .set_ref_addr (val )
39- else :
40- field .set (val )
41-
42- def r_s (self , name ):
43- field , field_def = self ._get_field_for_name (name )
44- if issubclass (field_def .type , BCPLPointerType ):
45- return field .get_ref_addr ()
46- return field .get ()
47-
48- def s_get_addr (self , name ):
49- field , _ = self ._get_field_for_name (name )
50- return field .get_addr ()
51-
52- def get_size (self ):
53- return self .struct .get_byte_size ()
54-
55- @classmethod
56- def _get_cached_field_path (cls , struct_def , name ):
57- cache = cls ._field_path_cache .setdefault (struct_def , {})
58- path = cache .get (name )
59- if path is not None :
60- return path
61- sdef = struct_def .sdef
62- idx_path = []
63- field_def = None
64- for field_name in name .split ("." ):
65- field_def = sdef .find_field_def_by_name (field_name )
66- if not field_def :
67- raise KeyError (struct_def , name )
68- idx_path .append (field_def .index )
69- field_type = field_def .type .get_alias_type ()
70- if issubclass (field_type , AmigaStruct ):
71- sdef = field_type .sdef
72- else :
73- sdef = None
74- path = (tuple (idx_path ), field_def )
75- cache [name ] = path
76- return path
77-
78- def _get_field_for_name (self , name ):
79- struct = self .struct
80- field = None
81- idx_path , field_def = self ._get_cached_field_path (self ._struct_def , name )
82- for idx in idx_path :
83- assert struct is not None
84- field = struct .sfields .get_field_by_index (idx )
85- if isinstance (field , AmigaStruct ):
86- struct = field
87- else :
88- struct = None
89- return field , field_def
90-
91-
9220class MemoryChunk :
9321 def __init__ (self , addr , size ):
9422 self .addr = addr
@@ -126,8 +54,6 @@ def __init__(self, mem, addr=0, size=0, label_mgr=None):
12654 self .addr = addr
12755 self .size = size
12856 self .label_mgr = label_mgr
129- # compat link
130- self .access = mem
13157
13258 self .addrs = {}
13359 self .mem_objs = {}
@@ -397,7 +323,7 @@ def alloc_memory(self, size, label=None, except_on_failure=True):
397323 self .label_mgr .add_label (label_obj )
398324 else :
399325 label_obj = None
400- mem = Memory (addr , size , label_obj , self . mem )
326+ mem = Memory (addr , size , label_obj )
401327 log_mem_alloc .info ("alloc memory: %s" , mem )
402328 self .mem_objs [addr ] = mem
403329 return mem
@@ -420,22 +346,20 @@ def alloc_struct(self, struct, size=None, label=None):
420346 else :
421347 label_obj = None
422348 struct_obj = struct (self .mem , addr )
423- access = _StructAccessCompat (struct , struct_obj )
424- mem = Memory (addr , size , label_obj , access , struct_obj )
349+ mem = Memory (addr , size , label_obj , struct_obj )
425350 log_mem_alloc .info ("alloc struct: %s" , mem )
426351 self .mem_objs [addr ] = mem
427352 return mem
428353
429354 def map_struct (self , addr , struct , label = None ):
430355 size = struct .get_size ()
431356 struct_obj = struct (self .mem , addr )
432- access = _StructAccessCompat (struct , struct_obj )
433357 if label and self .label_mgr :
434358 label_obj = LabelStruct (label , addr , struct )
435359 self .label_mgr .add_label (label_obj )
436360 else :
437361 label_obj = None
438- mem = Memory (addr , size , label_obj , access , struct_obj )
362+ mem = Memory (addr , size , label_obj , struct_obj )
439363 log_mem_alloc .info ("map struct: %s" , mem )
440364 return mem
441365
@@ -462,8 +386,7 @@ def alloc_lib(self, lib_struct, pos_size=0, neg_size=0, fd=None, label=None):
462386 else :
463387 label_obj = None
464388 struct_obj = lib_struct (self .mem , base_addr )
465- access = _StructAccessCompat (lib_struct , struct_obj )
466- mem = Memory (addr , size , label_obj , access , struct_obj )
389+ mem = Memory (addr , size , label_obj , struct_obj )
467390 log_mem_alloc .info ("alloc lib: %s" , mem )
468391 self .mem_objs [addr ] = mem
469392 return mem
@@ -485,7 +408,7 @@ def alloc_cstr(self, cstr, label=None):
485408 else :
486409 label_obj = None
487410 self .mem .w_cstr (addr , cstr )
488- mem = Memory (addr , size , label_obj , self . mem )
411+ mem = Memory (addr , size , label_obj )
489412 log_mem_alloc .info ("alloc c_str: %s" , mem )
490413 self .mem_objs [addr ] = mem
491414 return mem
@@ -507,7 +430,7 @@ def alloc_bstr(self, bstr, label=None):
507430 else :
508431 label_obj = None
509432 self .mem .w_bstr (addr , bstr )
510- mem = Memory (addr , size , label_obj , self . mem )
433+ mem = Memory (addr , size , label_obj )
511434 log_mem_alloc .info ("alloc b_str: %s" , mem )
512435 self .mem_objs [addr ] = mem
513436 return mem
0 commit comments