diff --git a/lib/NativeCall.pm6 b/lib/NativeCall.pm6 index b0f9a3511cf..e8ef8294022 100644 --- a/lib/NativeCall.pm6 +++ b/lib/NativeCall.pm6 @@ -588,6 +588,21 @@ multi sub postcircumfix:<[ ]>(CArray:D \array, $pos) is export(:DEFAULT, :types) multi sub postcircumfix:<[ ]>(CArray:D \array, *@pos) is export(:DEFAULT, :types) { @pos.map: { array.AT-POS($_) }; } +multi sub postcircumfix:<[ ]>(CArray:D \array, Callable:D $block) is export(:DEFAULT, :types) { + nqp::stmts( + (my $*INDEX = 'Effective index'), + array[$block.pos(array)] + ) +} +multi sub postcircumfix:<[ ]>(CArray:D \array) is export(:DEFAULT, :types) { + array.ZEN-POS +} +multi sub postcircumfix:<[ ]>(CArray:D \array, Whatever:D) is export(:DEFAULT, :types) { + array[^array.elems] +} +multi sub postcircumfix:<[ ]>(CArray:D \array, HyperWhatever:D) is export(:DEFAULT, :types) { + X::NYI.new(feature => 'HyperWhatever in CArray index').throw; +} multi trait_mod:(Routine $r, :$symbol!) is export(:DEFAULT, :traits) { $r does NativeCallSymbol[$symbol]; diff --git a/lib/NativeCall/Types.pm6 b/lib/NativeCall/Types.pm6 index 862ac9d052f..421b528ac19 100644 --- a/lib/NativeCall/Types.pm6 +++ b/lib/NativeCall/Types.pm6 @@ -218,6 +218,8 @@ our class CArray is repr('CArray') is array_type(Pointer) { $what; } + method Str { self.join(' ') } + method elems { nqp::elems(self) } method list {