Code Review: Protected3

tfpt review “/shelveset:Protected3;REDMOND\tomat”

Small changes in DLR.

Ruby:
Fixes handling of CLR protected and private methods and properties.
Enables generic methods in ClsTypeEmitter.
Removes RubyCallFlag.TryCall - it’s not used anymore.

Notes on visibility:
Ruby visibility is orthogonal to CLR visibility.
Ruby visibility is mutable (can be changed using
Kernel#public/private/protected methods), CLR visibility is not.
A CLR method group can comprise of methods of different CLR
visibility. Ruby visibility applies on the group as a whole.

Ruby-protected members can only be called from a scope whose self
immediate class is a descendant of the method owner.
CLR-protected members can only be called if the receiver is a
descendant of the method owner.

Ruby-private members can only be called with an implicit receiver
(self).
CLR-private members can only be called in PrivateBinding mode
(-X:PrivateBinding command line option), the receiver might be explicit
or implicit.

Tests:
Since protected methods can only be called on a derived class instance
the specs need to be adjusted accordingly.
I’ve fixed generic_spec nad overload_spec and commented out a block in
protected_spec - all the cases there need to be changed to negative
cases (all should fail).
Removed ROWAN_BIN check in
External.LCA_RESTRICTED\Languages\IronRuby\mspec\default.mspec so that
mspec picks up IR_OPTIONS even if ROWAN_BIN is not set.

Tomas

Looks good!

For the protected tests, can you add specs that test that the protected
.NET methods are callable from an instance_eval?

@klass.instance_eval {public_protected_overload(“abc”)}.should
equal_clr_string(“protected overload”)

Don’t worry about protected_spec though, I’ll fix that.

Other than that, test looks good.

JD

…there is no try

After chatting with Tomas, not adding those tests makes sense due to
differences in CLR protected behavior. I misunderstood his explanation
below.

JD

…there is no try