本文整理了Java中org.jruby.RubyModule.defineOrGetClassUnder
方法的一些代码示例,展示了RubyModule.defineOrGetClassUnder
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RubyModule.defineOrGetClassUnder
方法的具体详情如下:
包路径:org.jruby.RubyModule
类名称:RubyModule
方法名:defineOrGetClassUnder
[英]this method should be used only by interpreter or compiler
[中]此方法只能由解释器或编译器使用
代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby
public static RubyClass newClassForIR(ThreadContext context, String name, IRubyObject self, RubyModule classContainer, Object superClass, boolean meta) {
if (meta) return classContainer.getMetaClass();
RubyClass sc = null;
if (superClass != null) {
if (!(superClass instanceof RubyClass)) {
throw context.runtime.newTypeError("superclass must be Class (" + superClass + " given)");
}
sc = (RubyClass) superClass;
}
return classContainer.defineOrGetClassUnder(name, sc);
}
代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby
public static RubyClass newClassForIR(ThreadContext context, String name, IRubyObject self, RubyModule classContainer, Object superClass, boolean meta) {
if (meta) return classContainer.getMetaClass();
RubyClass sc = null;
if (superClass != null) {
if (!(superClass instanceof RubyClass)) {
throw context.runtime.newTypeError("superclass must be Class (" + superClass + " given)");
}
sc = (RubyClass) superClass;
}
return classContainer.defineOrGetClassUnder(name, sc);
}
代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby
private RubyModule newClass(ThreadContext context, IRubyObject self, RubyModule classContainer, DynamicScope currDynScope, Object[] temp) {
if (newIRClassBody instanceof IRMetaClassBody) return classContainer.getMetaClass();
RubyClass sc;
if (superClass == context.runtime.getIRManager().getNil()) {
sc = null;
} else {
Object o = superClass.retrieve(context, self, currDynScope, temp);
if (!(o instanceof RubyClass)) {
throw context.runtime.newTypeError("superclass must be Class (" + o + " given)");
}
sc = (RubyClass) o;
}
return classContainer.defineOrGetClassUnder(newIRClassBody.getName(), sc);
}
代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby
private RubyModule newClass(ThreadContext context, IRubyObject self, RubyModule classContainer, DynamicScope currDynScope, Object[] temp) {
if (newIRClassBody instanceof IRMetaClassBody) return classContainer.getMetaClass();
RubyClass sc;
if (superClass == context.runtime.getIRManager().getNil()) {
sc = null;
} else {
Object o = superClass.retrieve(context, self, currDynScope, temp);
if (!(o instanceof RubyClass)) {
throw context.runtime.newTypeError("superclass must be Class (" + o + " given)");
}
sc = (RubyClass) o;
}
return classContainer.defineOrGetClassUnder(newIRClassBody.getName(), sc);
}
代码示例来源:origin: org.jruby/jruby-complete
public static RubyModule newRubyClassFromIR(Ruby runtime, IRScope irClassBody, Object superClass, Object container) {
if (!(container instanceof RubyModule)) {
throw runtime.newTypeError("no outer class/module");
}
RubyModule newRubyClass;
if (irClassBody instanceof IRMetaClassBody) {
newRubyClass = ((RubyModule)container).getMetaClass();
} else {
RubyClass sc;
if (superClass == UndefinedValue.UNDEFINED) {
sc = null;
} else {
RubyClass.checkInheritable((IRubyObject) superClass);
sc = (RubyClass) superClass;
}
newRubyClass = ((RubyModule)container).defineOrGetClassUnder(irClassBody.getId(), sc);
}
irClassBody.getStaticScope().setModule(newRubyClass);
return newRubyClass;
}
代码示例来源:origin: org.jruby/jruby-core
public static RubyModule newRubyClassFromIR(Ruby runtime, IRScope irClassBody, Object superClass, Object container) {
if (!(container instanceof RubyModule)) {
throw runtime.newTypeError("no outer class/module");
}
RubyModule newRubyClass;
if (irClassBody instanceof IRMetaClassBody) {
newRubyClass = ((RubyModule)container).getMetaClass();
} else {
RubyClass sc;
if (superClass == UndefinedValue.UNDEFINED) {
sc = null;
} else {
RubyClass.checkInheritable((IRubyObject) superClass);
sc = (RubyClass) superClass;
}
newRubyClass = ((RubyModule)container).defineOrGetClassUnder(irClassBody.getId(), sc);
}
irClassBody.getStaticScope().setModule(newRubyClass);
return newRubyClass;
}
代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby
@Override
public IRubyObject interpret(Ruby runtime, ThreadContext context, IRubyObject self, Block aBlock) {
RubyModule enclosingClass = cpath.getEnclosingModule(runtime, context, self, aBlock);
// TODO: Figure out how this can happen and possibly remove
if (enclosingClass == null) throw runtime.newTypeError("no outer class/module");
RubyClass superClass = null;
if (superNode != null) {
IRubyObject superObj = superNode.interpret(runtime, context, self, aBlock);
RubyClass.checkInheritable(superObj);
superClass = (RubyClass)superObj;
}
RubyClass clazz = enclosingClass.defineOrGetClassUnder(cpath.getName(), superClass);
scope.setModule(clazz);
IRubyObject classBodyResult = ASTInterpreter.evalClassDefinitionBody(runtime, context, scope, bodyNode, clazz, self, aBlock);
return classBodyResult;
}
}
代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby
@Override
public IRubyObject interpret(Ruby runtime, ThreadContext context, IRubyObject self, Block aBlock) {
RubyModule enclosingClass = cpath.getEnclosingModule(runtime, context, self, aBlock);
// TODO: Figure out how this can happen and possibly remove
if (enclosingClass == null) throw runtime.newTypeError("no outer class/module");
RubyClass superClass = null;
if (superNode != null) {
IRubyObject superObj = superNode.interpret(runtime, context, self, aBlock);
RubyClass.checkInheritable(superObj);
superClass = (RubyClass)superObj;
}
RubyClass clazz = enclosingClass.defineOrGetClassUnder(cpath.getName(), superClass);
scope.setModule(clazz);
IRubyObject classBodyResult = ASTInterpreter.evalClassDefinitionBody(runtime, context, scope, bodyNode, clazz, self, aBlock);
return classBodyResult;
}
}
代码示例来源:origin: org.jruby/jruby-complete
RubyClass cZlibError = mZlib.defineOrGetClassUnder("Error", cStandardError, cStandardError.getAllocator());
mZlib.defineOrGetClassUnder("StreamEnd", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("StreamError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("BufError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("NeedDict", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("MemError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("VersionError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("DataError", cZlibError, cZlibError.getAllocator());
RubyClass cGzFile = mZlib.defineOrGetClassUnder("GzipFile", runtime.getObject(), RubyGzipFile.GZIPFILE_ALLOCATOR);
cGzFile.defineAnnotatedMethods(RubyGzipFile.class);
RubyClass cGzReader = mZlib.defineOrGetClassUnder("GzipReader", cGzFile, JZlibRubyGzipReader.GZIPREADER_ALLOCATOR);
cGzReader.includeModule(runtime.getEnumerable());
cGzReader.defineAnnotatedMethods(JZlibRubyGzipReader.class);
RubyClass cGzWriter = mZlib.defineOrGetClassUnder("GzipWriter", cGzFile, JZlibRubyGzipWriter.GZIPWRITER_ALLOCATOR);
cGzWriter.defineAnnotatedMethods(JZlibRubyGzipWriter.class);
RubyClass cZStream = mZlib.defineOrGetClassUnder("ZStream", runtime.getObject(), ObjectAllocator.NOT_ALLOCATABLE_ALLOCATOR);
cZStream.defineAnnotatedMethods(ZStream.class);
cZStream.undefineMethod("new");
RubyClass cInflate = mZlib.defineOrGetClassUnder("Inflate", cZStream, JZlibInflate.INFLATE_ALLOCATOR);
cInflate.defineAnnotatedMethods(JZlibInflate.class);
RubyClass cDeflate = mZlib.defineOrGetClassUnder("Deflate", cZStream, JZlibDeflate.DEFLATE_ALLOCATOR);
cDeflate.defineAnnotatedMethods(JZlibDeflate.class);
代码示例来源:origin: org.jruby/jruby-core
RubyClass cZlibError = mZlib.defineOrGetClassUnder("Error", cStandardError, cStandardError.getAllocator());
mZlib.defineOrGetClassUnder("StreamEnd", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("StreamError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("BufError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("NeedDict", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("MemError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("VersionError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("DataError", cZlibError, cZlibError.getAllocator());
RubyClass cGzFile = mZlib.defineOrGetClassUnder("GzipFile", runtime.getObject(), RubyGzipFile.GZIPFILE_ALLOCATOR);
cGzFile.defineAnnotatedMethods(RubyGzipFile.class);
RubyClass cGzReader = mZlib.defineOrGetClassUnder("GzipReader", cGzFile, JZlibRubyGzipReader.GZIPREADER_ALLOCATOR);
cGzReader.includeModule(runtime.getEnumerable());
cGzReader.defineAnnotatedMethods(JZlibRubyGzipReader.class);
RubyClass cGzWriter = mZlib.defineOrGetClassUnder("GzipWriter", cGzFile, JZlibRubyGzipWriter.GZIPWRITER_ALLOCATOR);
cGzWriter.defineAnnotatedMethods(JZlibRubyGzipWriter.class);
RubyClass cZStream = mZlib.defineOrGetClassUnder("ZStream", runtime.getObject(), ObjectAllocator.NOT_ALLOCATABLE_ALLOCATOR);
cZStream.defineAnnotatedMethods(ZStream.class);
cZStream.undefineMethod("new");
RubyClass cInflate = mZlib.defineOrGetClassUnder("Inflate", cZStream, JZlibInflate.INFLATE_ALLOCATOR);
cInflate.defineAnnotatedMethods(JZlibInflate.class);
RubyClass cDeflate = mZlib.defineOrGetClassUnder("Deflate", cZStream, JZlibDeflate.DEFLATE_ALLOCATOR);
cDeflate.defineAnnotatedMethods(JZlibDeflate.class);
代码示例来源:origin: org.jruby/jruby-core
public RubyClass defineOrGetClassUnder(String name, RubyClass superClazz, ObjectAllocator allocator) {
// This method is intended only for defining new classes in Ruby code,
// so it uses the allocator of the specified superclass or default to
// the Object allocator. It should NOT be used to define classes that require a native allocator.
Ruby runtime = getRuntime();
IRubyObject classObj = getConstantAtSpecial(name);
RubyClass clazz;
if (classObj != null) {
if (!(classObj instanceof RubyClass)) throw runtime.newTypeError(name + " is not a class");
clazz = (RubyClass)classObj;
if (superClazz != null) {
RubyClass tmp = clazz.getSuperClass();
while (tmp != null && tmp.isIncluded()) tmp = tmp.getSuperClass(); // need to skip IncludedModuleWrappers
if (tmp != null) tmp = tmp.getRealClass();
if (tmp != superClazz) throw runtime.newTypeError(str(runtime, "superclass mismatch for class ", ids(runtime, name)));
// superClazz = null;
}
} else if ((clazz = searchProvidersForClass(name, superClazz)) != null) {
// reopen a java class
} else {
if (superClazz == null) superClazz = runtime.getObject();
if (allocator == null) {
if (isReifiable(runtime, superClazz)) {
if (Options.REIFY_CLASSES.load()) {
allocator = REIFYING_OBJECT_ALLOCATOR;
} else if (Options.REIFY_VARIABLES.load()) {
代码示例来源:origin: org.jruby/jruby-complete
public RubyClass defineOrGetClassUnder(String name, RubyClass superClazz, ObjectAllocator allocator) {
// This method is intended only for defining new classes in Ruby code,
// so it uses the allocator of the specified superclass or default to
// the Object allocator. It should NOT be used to define classes that require a native allocator.
Ruby runtime = getRuntime();
IRubyObject classObj = getConstantAtSpecial(name);
RubyClass clazz;
if (classObj != null) {
if (!(classObj instanceof RubyClass)) throw runtime.newTypeError(name + " is not a class");
clazz = (RubyClass)classObj;
if (superClazz != null) {
RubyClass tmp = clazz.getSuperClass();
while (tmp != null && tmp.isIncluded()) tmp = tmp.getSuperClass(); // need to skip IncludedModuleWrappers
if (tmp != null) tmp = tmp.getRealClass();
if (tmp != superClazz) throw runtime.newTypeError(str(runtime, "superclass mismatch for class ", ids(runtime, name)));
// superClazz = null;
}
} else if ((clazz = searchProvidersForClass(name, superClazz)) != null) {
// reopen a java class
} else {
if (superClazz == null) superClazz = runtime.getObject();
if (allocator == null) {
if (isReifiable(runtime, superClazz)) {
if (Options.REIFY_CLASSES.load()) {
allocator = REIFYING_OBJECT_ALLOCATOR;
} else if (Options.REIFY_VARIABLES.load()) {
内容来源于网络,如有侵权,请联系作者删除!