Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

r27331 - docs/Perl6/Spec

0 views
Skip to first unread message

pugs-c...@feather.perl6.nl

unread,
Jun 30, 2009, 1:18:24 PM6/30/09
to perl6-l...@perl.org
Author: ruoso
Date: 2009-06-30 19:18:24 +0200 (Tue, 30 Jun 2009)
New Revision: 27331

Modified:
docs/Perl6/Spec/S11-modules.pod
Log:
[spec/S11] better to be sorry than not doing. here is my proposed change to the representation of how a module is loaded

Modified: docs/Perl6/Spec/S11-modules.pod
===================================================================
--- docs/Perl6/Spec/S11-modules.pod 2009-06-30 16:50:29 UTC (rev 27330)
+++ docs/Perl6/Spec/S11-modules.pod 2009-06-30 17:18:24 UTC (rev 27331)
@@ -164,8 +164,24 @@

These further break down into:

- BEGIN MY::($_) := load_module(find_module_defining($_)) for <Sense>;
- BEGIN MY.import_alias(Sense, <common @horse>);
+ BEGIN {
+ my $target ::= OUTER;
+ for <Sense> {
+ my $scope = load_module(find_module_defining($_));
+ # install the name of the type
+ $target.install_alias($_, $scope{$_}) if $scope.exists{$_};
+ # get the package declared by the name in that scope,
+ my $package_name = $_ ~ '::';
+ # if there isn't any, then there's just the type...
+ my $loaded_package = $scope{$package_name} or next;
+ # get a copy of the package, to avoid action-at-a-distance
+ # install it in the target scope
+ $target{$package_name} := $loaded_package.copy;
+ # finally give the chance for the module to install
+ # the selected symbols
+ $loaded_package.EXPORTALL($target, <common @horse>);
+ }
+ }

=head2 Loading without importing
X<need>
@@ -188,7 +204,21 @@

is equivalent to:

- BEGIN MY::($_) := load_module(find_module_defining($_)) for <A B C>;
+ BEGIN {
+ my $target ::= OUTER;
+ for <A B C> {
+ my $scope = load_module(find_module_defining($_));
+ # install the name of the type
+ $target.install_alias($_, $scope{$_}) if $scope.exists{$_};
+ # get the package declared by the name in that scope,
+ my $package_name = $_ ~ '::';
+ # if there isn't any, then there's just the type...
+ my $loaded_package = $scope{$package_name} or next;
+ # get a copy of the package, to avoid action-at-a-distance
+ # install it in the target scope
+ $target{$package_name} := $loaded_package.copy;
+ }
+ }

=head2 Importing without loading
X<defines>

0 new messages