While working with the NCurses module I ran into some strange behavior that I've distilled in the repl as:
> my $c = ' '.ord
32
> $c.WHAT
(Int)
> my int32 $n = ' '.ord
32
> $n.WHAT
Bytecode validation error at offset 128, instruction 20:
operand type 32 does not match register type 24 for op getlex_ni in frame <unit>
> my int32 $m = 32
32
> $m.WHAT
Bytecode validation error at offset 128, instruction 20:
operand type 32 does not match register type 24 for op getlex_ni in frame <unit>
> my int32 $j = int32( 32 )
Cannot invoke this object (REPR: P6int; int32)
in block <unit> at <unknown file> line 1
The problem is that wborder is defined with a signature of (NCurses::WINDOW, int32, int32, int32, int32, int32, int32, int32, int32 --> int32) but none of my attempts to come up with an int32 version of 32 have worked yet. I'm sure I'm missing something but I've no idea what.
32
. For example,my uint $a;
ends up with the same error. ➋ "Cannot invoke this object" error. This looks like a mistake you're making. You're invoking a call on an object that isn't callable. It applies to any such object. For example,X()
ends up with a similar result becauseX
is anException
, and exceptions aren't callables. ➌ The number32
. ➍ Discussion ofNcurses
andwborder
. I hear you're suggesting they're connected but I don't see the connection. – Ideogramint32
with a value of32
. For a variable, it'smy int32 $foo = 32;
. Aiui this binds$foo
so it corresponds to the integer32
using an in-memory representation that's the underlying platform's Cint32_t
(signed integer) type. – IdeogramEVAL
? I think it would likely be helpful to core devs if you could let them know in this ticket: A straight EVAL bug involving accessing some types of natives from surrounding scope. If you are, well, it looks like that ticket explains your problem. – Ideogram