diff --git a/lib/SAFE.setting b/lib/SAFE.setting index 43db55b9..e857a92f 100644 --- a/lib/SAFE.setting +++ b/lib/SAFE.setting @@ -352,9 +352,7 @@ my class Parcel is Cool { } } -# Maybe this should be a constant, but constants are currently forced to -# scalar-nature (TODO) -sub Nil() { Q:CgOp { (newrwlistvar (@ (box Parcel (fvarlist_new)))) } } +constant Nil = Q:CgOp { (newrwlistvar (@ (box Parcel (fvarlist_new)))) }; my class List is Cool { has @!items; diff --git a/src/CgOp.pm b/src/CgOp.pm index e3b06678..fb9090e8 100644 --- a/src/CgOp.pm +++ b/src/CgOp.pm @@ -104,7 +104,7 @@ use warnings; sub noop { prog() } sub rnull { - prog($_[0], null('var')); + prog($_[0], scopedlex('Nil')); } sub getattr { diff --git a/src/Op.pm b/src/Op.pm index 645d758e..8941e4a8 100644 --- a/src/Op.pm +++ b/src/Op.pm @@ -89,8 +89,7 @@ use CgOp; sub code { my ($self, $body) = @_; my @ch = map { $_->cgop($body) } @{ $self->children }; - # XXX should be Nil or something - my $end = @ch ? pop(@ch) : CgOp::scopedlex('Any'); + my $end = @ch ? pop(@ch) : CgOp::scopedlex('Nil'); CgOp::prog((map { CgOp::sink($_) } @ch), $end); } @@ -461,11 +460,10 @@ use CgOp; CgOp::unbox('bool', CgOp::fetch( CgOp::methodcall($self->check->cgop($body), "Bool"))), - # XXX use Nil ($self->true ? $self->true->cgop($body) : - CgOp::null('var')), + CgOp::scopedlex('Nil')), ($self->false ? $self->false->cgop($body) : - CgOp::null('var'))); + CgOp::scopedlex('Nil'))); } __PACKAGE__->meta->make_immutable; @@ -500,7 +498,7 @@ use CgOp; CgOp::ehspan(2, undef, 0, "redo$id", "next$id", "last$id"), CgOp::ehspan(3, undef, 0, "redo$id", "next$id", "redo$id"))), CgOp::label("last$id"), - CgOp::null('var')); + CgOp::scopedlex('Nil')); } __PACKAGE__->meta->make_immutable; @@ -555,7 +553,7 @@ use CgOp; CgOp::unbox('bool', CgOp::fetch( CgOp::methodcall(CgOp::scopedlex($self->condvar), "Bool"))), - CgOp::scopedlex('Any'), #Nil + CgOp::scopedlex('Nil'), CgOp::prog( CgOp::assign(CgOp::scopedlex($self->condvar), CgOp::box('Bool', CgOp::bool(1))), @@ -706,7 +704,7 @@ use CgOp; sub code { my ($self, $body) = @_; - CgOp::null('var'); + CgOp::scopedlex('Nil'); } __PACKAGE__->meta->make_immutable; @@ -723,7 +721,7 @@ use CgOp; sub code { my ($self, $body) = @_; - CgOp::null('var'); + CgOp::scopedlex('Nil'); } __PACKAGE__->meta->make_immutable; @@ -927,7 +925,7 @@ use CgOp; has unit => (isa => 'Str', is => 'ro', required => 1); - sub code { CgOp::null('var') } + sub code { CgOp::scopedlex('Nil') } __PACKAGE__->meta->make_immutable; no Moose; diff --git a/v6/TODO b/v6/TODO index b2c2bca2..7175574d 100644 --- a/v6/TODO +++ b/v6/TODO @@ -1,6 +1,5 @@ ~ -() being Nil circumfix:<[ ]> Cursor.add_categorical Cursor.alpha @@ -40,6 +39,7 @@ token { :my $var = expr; $var } token { $param-role-var } DONE: +() being Nil Bool.Numeric &chars defined($thing)