in reply to Re: why SvUV() would crop to 32 bits?
in thread why SvUV() would crop to 32 bits?

Or even better, perl provides the UVxf macro, which will be the correct format to print a UV; i.e.
printf(":: x%"UVxf" to ..."

Dave.

Replies are listed 'Best First'.
Re^3: why SvUV() would crop to 32 bits?
by ptizoom (Scribe) on Jan 04, 2015 at 10:42 UTC
    yes thanks...spot on. the macro woz working all the way, but just the format cropping let me down. (although I must have missed it with gdb.)

    so...

    printf(":: x%" UVxf " to ...", SvUV($input), $1);
    does the job.

    and here with a code example showing a few ugly ways to cast back pointers to all sorts...:

    %typemap(in) void (* cb)(void *) , void *data , void (cb)(void *){ //if SvGETMAGIC($input) {}; $1 = INT2PTR($1_ltype, SvUV($input)); printf(":: x%" UVxf " to x%lx\n", SvUV($input), $1); { int ret = SWIG_ConvertFunctionPtr($input, (void**)(& $1), 0); printf(":: to x%lx\n", $1); } if(SvGMAGICAL($input)) mg_get($input); $1 = DPTR2FPTR($1_ltype, SvUV($input)); printf("::DPTR2FPTR x%lx to x%lx\n", SvIV($input), $1); }
    bot::add_idle_callback x7fc3ff9bc040 , x0 :: x7fc3ff9bc040 to x7fc3ff9bc040 :: to x7fc3ff9bc040 ::DPTR2FPTR x7fc3ff9bc040 to x7fc3ff9bc040 :: x0 to x0 :: to x0 ::DPTR2FPTR x0 to x0 ::in c add_idle_callback xff9bc040 , x0

      Tip:

      You can replace

      if(SvGMAGICAL($input)) mg_get($input);
      with
      SvGETMAGIC($input);

      (Just spotted that in a cursory glance. Didn't look at the rest.)