Half-way to fixing problems in Struct.t
authorRyan Jendoubi <ryan.jendoubi@gmail.com>
Thu, 21 Jun 2012 15:40:27 +0000 (16:40 +0100)
committerRyan Jendoubi <ryan.jendoubi@gmail.com>
Thu, 21 Jun 2012 15:40:27 +0000 (16:40 +0100)
commit3cbe06a7655901011006766ee03cd7469a6f03bf
tree75a33077effb71929dcd6ea161bf5bd54822a97e
parent305ab334108a3958d72ad44882cd14b2a9a9eb02
Half-way to fixing problems in Struct.t

Central problem revolves around flags on Perl scalars
retrieved from Ctypes.

For example, Scalar::Util's "looks_like_number" is inadequate
for dealing with situations where someone's stored the
/character string/ "9", and expects it out in the same form.

Also, where e.g. the value of a c_int has been set to '0' by
assigning Perl's "undef", unpacking that data results in a
scalar with an IV of 0, but no IOK flag set, so Perl sees it
as "undef".

Instead of merely saving the input argument in $obj->{_input},
which may easily have its SV flags changed, {_input} will be
a hash, storing both the input argument as soon as possible,
and a key indicating the scalar flag it came in with.

In _hook_out, this can either be restored or changed (e.g.
c_char's output should always be POK, c_int's IOK).

modified:   lib/Ctypes/Type/Field.pm
modified:   lib/Ctypes/Type/Simple.pm
modified:   lib/Ctypes/Type/Struct.pm
modified:   t/types.t
lib/Ctypes/Type/Field.pm
lib/Ctypes/Type/Simple.pm
lib/Ctypes/Type/Struct.pm
t/types.t