Skip to content

Commit

Permalink
Restore @A[Enum] behaviour
Browse files Browse the repository at this point in the history
Apparently this got broken a while ago, and not noticed in tests.
  • Loading branch information
lizmat committed Nov 12, 2016
1 parent fc6d4f3 commit 7d711ee
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 13 deletions.
24 changes: 21 additions & 3 deletions src/core/Array.pm
Expand Up @@ -201,23 +201,41 @@ my class Array { # declared in BOOTSTRAP
proto method new(|) { * }
multi method new(:$shape!) {
nqp::if(
nqp::defined($shape),set-shape(self,$shape),nqp::create(self)
nqp::defined($shape),
set-shape(self,$shape),
nqp::if(
Metamodel::EnumHOW.ACCEPTS($shape.HOW),
set-shape(self,$shape.^elems),
nqp::create(self)
)
)
}
multi method new() {
nqp::create(self)
}
multi method new(\values, :$shape!) {
nqp::if(
nqp::defined($shape),set-shape(self,$shape),nqp::create(self)
nqp::defined($shape),
set-shape(self,$shape),
nqp::if(
Metamodel::EnumHOW.ACCEPTS($shape.HOW),
set-shape(self,$shape.^elems),
nqp::create(self)
)
).STORE(values)
}
multi method new(\values) {
nqp::create(self).STORE(values)
}
multi method new(**@values is raw, :$shape!) {
nqp::if(
nqp::defined($shape),set-shape(self,$shape),nqp::create(self)
nqp::defined($shape),
set-shape(self,$shape),
nqp::if(
Metamodel::EnumHOW.ACCEPTS($shape.HOW),
set-shape(self,$shape.^elems),
nqp::create(self)
)
).STORE(@values)
}
multi method new(**@values is raw) {
Expand Down
10 changes: 3 additions & 7 deletions src/core/ShapedNArray.pm
Expand Up @@ -6,13 +6,9 @@
sub set-shape(\base, \shape) is raw {
nqp::stmts(
(my $shape := nqp::decont(nqp::if(
Metamodel::EnumHOW.ACCEPTS(shape.HOW),
shape.^elems,
nqp::if(
nqp::istype(shape,List),
shape,
shape.list
)
nqp::istype(shape,List),
shape,
shape.list
))),
nqp::if(
(my int $dimensions = $shape.elems), # reifies
Expand Down
24 changes: 21 additions & 3 deletions src/core/TypedArray.pm
Expand Up @@ -5,23 +5,41 @@
proto method new(|) { * }
multi method new(:$shape!) {
set-descriptor(nqp::if(
nqp::defined($shape),set-shape(self,$shape),nqp::create(self)
nqp::defined($shape),
set-shape(self,$shape),
nqp::if(
Metamodel::EnumHOW.ACCEPTS($shape.HOW),
set-shape(self,$shape.^elems),
nqp::create(self)
)
))
}
multi method new() {
set-descriptor(nqp::create(self))
}
multi method new(\values, :$shape!) {
set-descriptor(nqp::if(
nqp::defined($shape),set-shape(self,$shape),nqp::create(self)
nqp::defined($shape),
set-shape(self,$shape),
nqp::if(
Metamodel::EnumHOW.ACCEPTS($shape.HOW),
set-shape(self,$shape.^elems),
nqp::create(self)
)
)).STORE(values)
}
multi method new(\values) {
set-descriptor(nqp::create(self)).STORE(values)
}
multi method new(**@values is raw, :$shape!) {
set-descriptor(nqp::if(
nqp::defined($shape),set-shape(self,$shape),nqp::create(self)
nqp::defined($shape),
set-shape(self,$shape),
nqp::if(
Metamodel::EnumHOW.ACCEPTS($shape.HOW),
set-shape(self,$shape.^elems),
nqp::create(self)
)
)).STORE(@values)
}
multi method new(**@values is raw) {
Expand Down

0 comments on commit 7d711ee

Please sign in to comment.