Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Implement rw accessors for native attributes.
  • Loading branch information
jnthn committed Feb 7, 2015
1 parent 3c56352 commit 32ad78f
Showing 1 changed file with 20 additions and 22 deletions.
42 changes: 20 additions & 22 deletions src/core/Attribute.pm
Expand Up @@ -25,55 +25,53 @@ my class Attribute { # declared in BOOTSTRAP
$meth := nqp::p6bool(nqp::iseq_i($attr_type, 0))
??
method (Mu \fles:) is rw {
nqp::getattr(
nqp::decont(fles),
$dcpkg,
$name)
nqp::getattr(nqp::decont(fles), $dcpkg, $name)
}
!!
nqp::die("Cannot create rw-accessors for natively typed attribute '$name'");
nqp::p6bool(nqp::iseq_i($attr_type, 1))
??
method (Mu \fles:) is rw {
nqp::getattrref_i(nqp::decont(fles), $dcpkg, $name)
}
!!
nqp::p6bool(nqp::iseq_i($attr_type, 2))
??
method (Mu \fles:) is rw {
nqp::getattrref_n(nqp::decont(fles), $dcpkg, $name)
}
!!
method (Mu \fles:) is rw {
nqp::getattrref_s(nqp::decont(fles), $dcpkg, $name)
}
} else {
# ro accessor
$meth := nqp::p6bool(nqp::iseq_i($attr_type, 0))
??
method (Mu \fles:) {
nqp::getattr(
nqp::decont(fles),
$dcpkg,
$name)
nqp::getattr(nqp::decont(fles), $dcpkg, $name)
}
!!
nqp::p6bool(nqp::iseq_i($attr_type, 1))
??
method (Mu \fles:) {
nqp::p6box_i(
nqp::getattr_i(
nqp::decont(fles),
$dcpkg,
$name)
nqp::getattr_i(nqp::decont(fles), $dcpkg, $name)
);
}
!!
nqp::p6bool(nqp::iseq_i($attr_type, 2))
??
method (Mu \fles:) {
nqp::p6box_n(
nqp::getattr_n(
nqp::decont(fles),
$dcpkg,
$name)
nqp::getattr_n(nqp::decont(fles), $dcpkg, $name)
);
}
!!
method (Mu \fles:) {
nqp::p6box_s(
nqp::getattr_s(
nqp::decont(fles),
$dcpkg,
$name)
nqp::getattr_s(nqp::decont(fles), $dcpkg, $name)
);
}

}
$meth.set_name($meth_name);
$package.HOW.add_method($package, $meth_name, $meth);
Expand Down

0 comments on commit 32ad78f

Please sign in to comment.