Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
implement LEXICAL, OUTERS, and CALLERS
  • Loading branch information
TimToady committed Mar 5, 2015
1 parent cccd6cf commit d3ba345
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions src/core/PseudoStash.pm
Expand Up @@ -63,13 +63,42 @@ my class PseudoStash is EnumMap {
Metamodel::ModuleHOW.new_type(:name('OUTER')),
$stash);
},
'LEXICAL' => sub ($cur) {
my $stash := nqp::clone($cur);
nqp::bindattr_i($stash, PseudoStash, '$!mode', STATIC_CHAIN);
nqp::setwho(
Metamodel::ModuleHOW.new_type(:name('LEXICAL')),
$stash);
},
'OUTERS' => sub ($cur) {
my Mu $ctx := nqp::ctxouterskipthunks(
nqp::getattr(nqp::decont($cur), PseudoStash, '$!ctx'));
my $stash := nqp::create(PseudoStash);
nqp::bindattr($stash, EnumMap, '$!storage', nqp::ctxlexpad($ctx));
nqp::bindattr($stash, PseudoStash, '$!ctx', $ctx);
nqp::bindattr_i($stash, PseudoStash, '$!mode', STATIC_CHAIN);
nqp::setwho(
Metamodel::ModuleHOW.new_type(:name('OUTER')),
$stash);
},
'DYNAMIC' => sub ($cur) {
my $stash := nqp::clone($cur);
nqp::bindattr_i($stash, PseudoStash, '$!mode', DYNAMIC_CHAIN);
nqp::setwho(
Metamodel::ModuleHOW.new_type(:name('DYNAMIC')),
$stash);
},
'CALLERS' => sub ($cur) {
my Mu $ctx := nqp::ctxcallerskipthunks(
nqp::getattr(nqp::decont($cur), PseudoStash, '$!ctx'));
my $stash := nqp::create(PseudoStash);
nqp::bindattr($stash, EnumMap, '$!storage', nqp::ctxlexpad($ctx));
nqp::bindattr($stash, PseudoStash, '$!ctx', $ctx);
nqp::bindattr_i($stash, PseudoStash, '$!mode', DYNAMIC_CHAIN +| REQUIRE_DYNAMIC);
nqp::setwho(
Metamodel::ModuleHOW.new_type(:name('CALLER')),
$stash);
},
'UNIT' => sub ($cur) {
my Mu $ctx := nqp::getattr(nqp::decont($cur), PseudoStash, '$!ctx');
until nqp::existskey(nqp::ctxlexpad($ctx), '!UNIT_MARKER') {
Expand Down

0 comments on commit d3ba345

Please sign in to comment.