From 53a549dc47e13143da7a23b04bc7854cf18aaa6c Mon Sep 17 00:00:00 2001 From: Stefan O'Rear Date: Wed, 6 Oct 2010 02:10:24 -0700 Subject: [PATCH] Hack importation of classes into working --- lib/Threads.pm6 | 2 +- src/Metamodel.pm | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/Threads.pm6 b/lib/Threads.pm6 index f467a92c..6da7d933 100644 --- a/lib/Threads.pm6 +++ b/lib/Threads.pm6 @@ -29,7 +29,7 @@ my class Thread is export { } method join() { - Q:CgOp { (rnull (rawcall (unbox System.Threading.Thread (@ {self})) Join:m,Void)) } + Q:CgOp { (rnull (rawcall (unbox clr:System.Threading.Thread (@ {self})) Join:m,Void)) } } method sleep($time) { diff --git a/src/Metamodel.pm b/src/Metamodel.pm index 9a981b13..36180fb2 100644 --- a/src/Metamodel.pm +++ b/src/Metamodel.pm @@ -500,7 +500,7 @@ our $unit; path => [ @{ $ptr->path }, $name ]); $ptr = $self->deref($ptr) if !blessed($ptr); if ($ptr->isa('Metamodel::Stash::Graft')) { - $ptr = $self->get_stash(@{ $ptr->path }); + $ptr = $self->get_stash(@{ $ptr->to }); } elsif ($ptr->isa('Metamodel::Stash')) { } else { die "$name is a non-subpackage"; @@ -599,11 +599,11 @@ our $unit; for my $fk (sort keys %{ $sf->zyg }) { my $fo = $sf->zyg->{$fk}; my $lo = $sl->zyg->{$fk}; - if (!$lo) { + if (!$lo && !blessed($fo)) { $sl->bind_name($fk, $fo); next; } - if (blessed($fo) && blessed($lo)) { + if (blessed($fo) && (!$lo || blessed($lo))) { $rec->(@path, $fk); } elsif (!blessed($fo) && !blessed($lo) && $fo->[0] eq $lo->[0] && $fo->[1] == $lo->[1]) { @@ -730,13 +730,18 @@ sub Op::Use::begin { # XXX I am not sure how need binding should work for my $en (sort keys %{ $exp->zyg }) { + my $uname = $en; my $ref = $exp->zyg->{$en}; my $ex = blessed($ref) ? $ref : $unit->deref($ref); my $lex; if ($ex->isa('Metamodel::Stash')) { + $uname =~ s/:://; $lex = Metamodel::Lexical::Stash->new(path => $ex->path); + } elsif ($ex->isa('Metamodel::Package')) { + next; # XXX this is hacked elsewhere } elsif ($ex->isa('Metamodel::Stash::Graft')) { - $lex = Metamodel::Lexical::Stash->new(path => $ex->path); + $uname =~ s/:://; + $lex = Metamodel::Lexical::Stash->new(path => $ex->to); } elsif ($ex->isa('Metamodel::StaticSub')) { $lex = Metamodel::Lexical::SubImport->new(ref => $ref); } elsif ($ex->isa('Metamodel::ExportedVar')) { @@ -745,7 +750,7 @@ sub Op::Use::begin { die "unhandled export type " . ref($ex); } - $opensubs[-1]->lexicals->{$en} = $lex; + $opensubs[-1]->lexicals->{$uname} = $lex; } }