Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Allow inspection of role parameters
  • Loading branch information
sorear committed Nov 9, 2010
1 parent 4b41ecf commit ac003e7
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/CSharpBackend.pm
Expand Up @@ -22,9 +22,6 @@ my $VERBOSE = $ENV{NIECZA_CSHARP_VERBOSE};
# Class : DynMetaObject
# Class : (opt) HOW

# deliberately omitted for now: the run_once optimization & lazy static pad
# generation & indexification

our $unit;
our $nid = 0;
our @decls;
Expand Down Expand Up @@ -459,11 +456,20 @@ sub codegen_sub {
CgOp::fetch(CgOp::scopedlex($b)));
}
}
if ($_->signature) {
for my $p (@{ $_->signature->params }) {
next unless $p->slot;
push @build, CgOp::varhash_setindex($p->slot,
CgOp::letvar('!pa'), CgOp::scopedlex($p->slot));
}
}
$ops = CgOp::prog(@enter, CgOp::sink($code->cgop($_)),
CgOp::letn("!mo", CgOp::rawnew('clr:DynMetaObject',
CgOp::clr_string($obj->name)),
"!to", CgOp::rawnew('clr:DynObject', CgOp::letvar('!mo')),
"!pa", CgOp::varhash_new(),
@build,
CgOp::scopedlex('*params', CgOp::letvar('!pa')),
CgOp::setfield('slots', CgOp::letvar('!to'),
CgOp::null('clr:object[]')),
CgOp::setfield('typeObject', CgOp::letvar('!mo'),
Expand Down
1 change: 1 addition & 0 deletions src/Metamodel.pm
Expand Up @@ -1073,6 +1073,7 @@ sub Op::PackageDef::begin {
if ($pclass eq 'Metamodel::ParametricRole') {
$unit->deref($obj)->builder($body->xref);
$body->parametric_role_hack($obj);
$body->add_my_name('*params', noinit => 1);
$body->create_static_pad;
}
$opensubs[-1]->add_my_sub($self->bodyvar, $body);
Expand Down

0 comments on commit ac003e7

Please sign in to comment.