Skip to content

Commit

Permalink
my-variables default to Any but with Mu constraint
Browse files Browse the repository at this point in the history
  • Loading branch information
sorear committed Jun 25, 2011
1 parent 4d8c2a8 commit 9fa31a8
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 6 deletions.
10 changes: 5 additions & 5 deletions lib/CLRBackend.cs
Expand Up @@ -3595,10 +3595,10 @@ class NamProcessor {
};
handlers["_newoftype"] = delegate(NamProcessor th, object[] z) {
return CpsOp.MethodCall(Tokens.Kernel_NewTypedScalar,
CpsOp.GetSField((FieldInfo)z[1])); };
(CpsOp)z[1]); };
thandlers["newblankrwscalar"] = delegate(CpsOp[] z) {
return CpsOp.MethodCall(Tokens.Kernel_NewTypedScalar,
CpsOp.GetSField(Tokens.Kernel_AnyMO)); };
CpsOp.Null(Tokens.STable)); };
thandlers["newtypedscalar"] = Methody(null, Tokens.Kernel_NewTypedScalar);
// XXX - wrong order - problem?
thandlers["fvarlist_item"] = delegate(CpsOp[] z) {
Expand Down Expand Up @@ -4126,9 +4126,9 @@ class NamProcessor {
if ((f & LexSimple.NOINIT) != 0) continue;

object bit;
FieldInfo tc = ls.type == null ?
Tokens.Kernel_AnyMO :
ls.type.Resolve<Package>().metaObject;
CpsOp tc = ls.type == null ?
CpsOp.Null(Tokens.STable) :
CpsOp.GetSField(ls.type.Resolve<Package>().metaObject);
if ((f & (LexSimple.HASH | LexSimple.LIST)) != 0) {
string s = ((f & LexSimple.HASH) != 0) ?
"newhash" : "newarray";
Expand Down
3 changes: 2 additions & 1 deletion src/OptBeta.pm6
Expand Up @@ -77,7 +77,8 @@ sub beta_optimize($body, $symbol, $cbody, @inpos) {
my $to = $d.noinit ?? CgOp.null('var') !!
$d.hash ?? CgOp.newblankhash !!
$d.list ?? CgOp.newblanklist !!
CgOp.newtypedscalar(CgOp.class_ref("mo", $d.typeconstraint ?? @($d.typeconstraint) !! "Any"));
$d.typeconstraint ?? CgOp.newtypedscalar(CgOp.class_ref("mo", @($d.typeconstraint))) !!
CgOp.newblankrwscalar();
push @scope, $dn, $nm;
push @let, [$nm, ::Op::CgOp.new(op => $to)];
}
Expand Down
24 changes: 24 additions & 0 deletions test2.pl
Expand Up @@ -101,6 +101,30 @@
eval @frags.join;
}

{
lives_ok { my $x; $x = Mu },
"can assign Mu to default-typed variable (noninline)";
lives_ok { if 1 { my $x; $x = Mu } },
"can assign Mu to default-typed variable (inline)";
dies_ok { my Any $x; $x = Mu },
"cannot assign Mu to Any-typed variable (noninline)";
dies_ok { if 1 { my Any $x; $x = Mu } },
"cannot assign Mu to Any-typed variable (inline)";
ok { my $x; $x }.() === Any,
"default-typed variable receives Any (noninline)";
ok { if 1 { my $x; $x } }.() === Any,
"default-typed variable receives Any (inline)";

lives_ok { my @x; push @x, Mu }, "can push Mu";
lives_ok { my @x; push @x, 5; @x[0] = Mu }, "push creates Mu-ready vars";
lives_ok { my @x; unshift @x, Mu }, "can unshift Mu";
lives_ok { my @x; unshift @x, 5; @x[0] = Mu }, "unshift creates Mu-ready vars";
lives_ok { my $x; $x[0] = Mu }, "array creation autoviv supports Mu";
lives_ok { my @x; @x[0] = Mu }, "element creation autoviv supports Mu";
lives_ok { my $x; $x<a> = Mu }, "hash creation autoviv supports Mu";
lives_ok { my %x; %x<a> = Mu }, "hash element creation autoviv supports Mu";
}

#is $?ORIG.substr(0,5), '# vim', '$?ORIG works';

# {
Expand Down

0 comments on commit 9fa31a8

Please sign in to comment.