-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
1 parent
cdd764c
commit 149bdf9
Showing
2 changed files
with
14 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,19 +34,21 @@ public abstract class IsANode extends RubyNode { | |
|
||
public IsANode(RubyContext context, SourceSection sourceSection) { | ||
super(context, sourceSection); | ||
metaClassNode = MetaClassNodeGen.create(context, sourceSection, null); | ||
} | ||
|
||
public abstract boolean executeIsA(Object self, DynamicObject module); | ||
|
||
@Specialization( | ||
limit = "getCacheLimit()", | ||
guards = { "isRubyModule(cachedModule)", | ||
"metaClass(self) == cachedMetaClass", "module == cachedModule" }, | ||
guards = { | ||
"isRubyModule(cachedModule)", | ||
"getMetaClass(self) == cachedMetaClass", | ||
"module == cachedModule" | ||
}, | ||
assumptions = "getUnmodifiedAssumption(cachedModule)") | ||
public boolean isACached(Object self, | ||
DynamicObject module, | ||
@Cached("metaClass(self)") DynamicObject cachedMetaClass, | ||
@Cached("getMetaClass(self)") DynamicObject cachedMetaClass, | ||
@Cached("module") DynamicObject cachedModule, | ||
@Cached("isA(cachedMetaClass, cachedModule)") boolean result) { | ||
return result; | ||
|
@@ -58,12 +60,11 @@ public Assumption getUnmodifiedAssumption(DynamicObject module) { | |
|
||
@Specialization(guards = "isRubyModule(module)") | ||
public boolean isAUncached(Object self, DynamicObject module) { | ||
return isA(metaClass(self), module); | ||
return isA(getMetaClass(self), module); | ||
} | ||
|
||
@Specialization(guards = "!isRubyModule(module)") | ||
public boolean isATypeError(Object self, DynamicObject module) { | ||
CompilerDirectives.transferToInterpreter(); | ||
throw new RaiseException(coreLibrary().typeError("class or module required", this)); | ||
} | ||
|
||
|
@@ -72,7 +73,12 @@ protected boolean isA(DynamicObject metaClass, DynamicObject module) { | |
return ModuleOperations.assignableTo(metaClass, module); | ||
} | ||
|
||
protected DynamicObject metaClass(Object object) { | ||
protected DynamicObject getMetaClass(Object object) { | ||
if (metaClassNode == null) { | ||
CompilerDirectives.transferToInterpreter(); | ||
metaClassNode = insert(MetaClassNodeGen.create(getContext(), getSourceSection(), null)); | ||
} | ||
|
||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
pitr-ch
Member
|
||
return metaClassNode.executeMetaClass(object); | ||
} | ||
|
||
|
I prefer no empty line here, it's already enough boilerplate IMHO. What do @jruby/truffle think?