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>