A simple representation of pp stacks and lexical pads for the B::CC compiler.
All locals and function arguments get type annotated, for all B::CC ops which
can be optimized.
For lexical pads (i.e. my or better our variables) we currently can force the type of
variables according to a magic naming scheme in load_pad in B::CC.
my $<name>_i; IV integer
my $<name>_ir; IV integer in a pseudo register
my $<name>_d; NV double
Future ideas are <B>type qualifiersB> as attributes
B<num>, B<int>, B<register>, B<temp>, B<unsigned>, B<ro>
such as in
our int $i : unsigned : ro;
our num $d;
Type attributes for sub definitions are not speced yet.
Ctypes attributes and objects should also be recognized, such as
c_int and c_double.
<B>my vs ourB>: Note that only <B>ourB> attributes are resolved at <B>compile-timeB>,
<B>myB> attributes are resolved at <B>run-timeB>. So the compiler will only see
type attributes for our variables.
See load_pad in B::CC and types.
TODO: Represent on this stack not only PADs,SV,IV,PV,NV,BOOL,Special
and a SV const, but also GV,CV,RV,AV,HV, esp. AELEM and HELEM.