13 init (register
: Char) do self.register
= register
17 redef fun to_s
do return "r{register}"
19 redef fun ==(o
) do return o
isa RegisterVar and register
== o
.register
20 redef fun hash
do return 128 + register
.hash
26 init (offset
: Int) do self.offset
= offset
30 redef fun ==(o
) do return o
isa StackVar and offset
== o
.offset
31 redef fun hash
do return 512 + offset
.hash
37 init (index
: Int) do self.index
= index
41 # need Object::AnalysisManager
42 #redef fun to_s is abstract
44 redef fun ==(o
) do return o
isa MemVar and index
== o
.index
45 redef fun hash
do return 1024 + index
.hash
48 redef class AInstruction
49 fun def_var
: nullable Var is abstract
50 fun src_var
: nullable Var is abstract
53 redef class ABinaryInstruction
54 fun mem_var
: nullable Var do return n_operand
.to_var
57 redef class ALoadInstruction
58 redef fun def_var
do return new RegisterVar(register
)
59 redef fun src_var
do return n_operand
.to_var
62 redef class AStoreInstruction
63 redef fun def_var
do return n_operand
.to_var
64 redef fun src_var
do return new RegisterVar(register
)
67 redef class AInputInstruction
68 redef fun def_var
do return n_operand
.to_var
71 redef class ARegisterSuffixed
72 fun reg_var
: Var do return new RegisterVar(register
)
75 redef class AArithmeticInstruction
79 fun to_var
: nullable Var is abstract
82 redef class AImmediateOperand
83 redef fun to_var
do return null
86 redef class AAnyOperand
87 fun addressing_mode
: String do return n_id
.text
90 if addressing_mode
== "i" then
91 else if addressing_mode
== "d" then
92 return new MemVar(n_value
.to_i
)
93 else if addressing_mode
== "n" then
94 else if addressing_mode
== "s" then
95 return new StackVar(n_value
.to_i
)
96 else if addressing_mode
== "sf" then
97 else if addressing_mode
== "x" then
98 else if addressing_mode
== "sx" then
99 else if addressing_mode
== "sxf" then