Skip to content

Commit

Permalink
Showing 1 changed file with 8 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@
* Declaration context for methods:
* <ul>
* <li>visibility</li>
* <li>default definee (which module to define on)</li>
* <li>default definee / current module (which module to define on)</li>
* </ul>
*/
public class DeclarationContext {
@@ -62,11 +62,15 @@ public static void changeVisibility(Frame frame, Visibility newVisibility) {
final Frame visibilityFrame = lookupVisibility(frame);
final DeclarationContext oldDeclarationContext = RubyArguments.getDeclarationContext(visibilityFrame.getArguments());
if (newVisibility != oldDeclarationContext.visibility) {
final DeclarationContext newDeclarationContext = new DeclarationContext(newVisibility, oldDeclarationContext.defaultDefinee);
RubyArguments.setDeclarationContext(visibilityFrame.getArguments(), newDeclarationContext);
RubyArguments.setDeclarationContext(visibilityFrame.getArguments(), oldDeclarationContext.withVisibility(newVisibility));
}
}

private DeclarationContext withVisibility(Visibility visibility) {
assert visibility != null;
return new DeclarationContext(visibility, defaultDefinee);
}

public DynamicObject getModuleToDefineMethods(VirtualFrame frame, RubyContext context, SingletonClassNode singletonClassNode) {
switch (defaultDefinee) {
case LEXICAL_SCOPE:
@@ -82,7 +86,7 @@ public DynamicObject getModuleToDefineMethods(VirtualFrame frame, RubyContext co
}

public static final DeclarationContext MODULE = new DeclarationContext(Visibility.PUBLIC, DefaultDefinee.LEXICAL_SCOPE);
public static final DeclarationContext METHOD = new DeclarationContext(null, DefaultDefinee.LEXICAL_SCOPE);
public static final DeclarationContext METHOD = new DeclarationContext(Visibility.PUBLIC, DefaultDefinee.LEXICAL_SCOPE);
public static final DeclarationContext BLOCK = new DeclarationContext(null, DefaultDefinee.LEXICAL_SCOPE);
public static final DeclarationContext TOP_LEVEL = new DeclarationContext(Visibility.PRIVATE, DefaultDefinee.LEXICAL_SCOPE);
public static final DeclarationContext INSTANCE_EVAL = new DeclarationContext(Visibility.PUBLIC, DefaultDefinee.SINGLETON_CLASS);

0 comments on commit d6c4933

Please sign in to comment.