public Object isDefined(VirtualFrame frame) { return Layouts.STRING.createString( Layouts.CLASS.getInstanceFactory(getContext().getCoreLibrary().getStringClass()), StringOperations.encodeByteList("expression", UTF8Encoding.INSTANCE), StringSupport.CR_7BIT, null); }
public static DynamicObject createRubyClass( RubyContext context, DynamicObject classClass, DynamicObject lexicalParent, DynamicObject superclass, String name, boolean isSingleton, DynamicObject attached) { final ModuleFields model = new ModuleFields(context, lexicalParent, name); final DynamicObject rubyClass = Layouts.CLASS.createClass( Layouts.CLASS.getInstanceFactory(classClass), model, isSingleton, attached, null); assert RubyGuards.isRubyClass(rubyClass) : classClass.getShape().getObjectType().getClass(); assert RubyGuards.isRubyModule(rubyClass) : classClass.getShape().getObjectType().getClass(); model.rubyModuleObject = rubyClass; if (model.lexicalParent == null) { // bootstrap or anonymous module Layouts.MODULE.getFields(rubyClass).name = Layouts.MODULE.getFields(rubyClass).givenBaseName; } else { Layouts.MODULE .getFields(rubyClass) .getAdoptedByLexicalParent(model.lexicalParent, model.givenBaseName, null); } if (superclass != null) { assert RubyGuards.isRubyClass(superclass); assert RubyGuards.isRubyClass(Layouts.MODULE.getFields(rubyClass).rubyModuleObject); Layouts.MODULE.getFields(rubyClass).parentModule = Layouts.MODULE.getFields(superclass).start; Layouts.MODULE .getFields(superclass) .addDependent(Layouts.MODULE.getFields(rubyClass).rubyModuleObject); Layouts.MODULE.getFields(rubyClass).newVersion(); } DynamicObjectFactory factory = Layouts.CLASS.getInstanceFactory(superclass); factory = Layouts.BASIC_OBJECT.setLogicalClass(factory, rubyClass); factory = Layouts.BASIC_OBJECT.setMetaClass(factory, rubyClass); Layouts.CLASS.setInstanceFactoryUnsafe(rubyClass, factory); return rubyClass; }
public static void initialize(DynamicObject rubyClass, DynamicObject superclass) { assert RubyGuards.isRubyClass(superclass); Layouts.MODULE.getFields(rubyClass).parentModule = Layouts.MODULE.getFields(superclass).start; Layouts.MODULE.getFields(superclass).addDependent(rubyClass); Layouts.MODULE.getFields(rubyClass).newVersion(); ensureSingletonConsistency(rubyClass); DynamicObjectFactory factory = Layouts.CLASS.getInstanceFactory(superclass); factory = Layouts.BASIC_OBJECT.setLogicalClass(factory, rubyClass); factory = Layouts.BASIC_OBJECT.setMetaClass(factory, rubyClass); Layouts.CLASS.setInstanceFactoryUnsafe(rubyClass, factory); }
public static DynamicObject createRubyMatchData( DynamicObject rubyClass, DynamicObject source, DynamicObject regexp, Region region, Object[] values, DynamicObject pre, DynamicObject post, DynamicObject global, int begin, int end) { return Layouts.MATCH_DATA.createMatchData( Layouts.CLASS.getInstanceFactory(rubyClass), new MatchDataFields(source, regexp, region, values, pre, post, global, begin, end)); }
/** * This constructor supports initialization and solves boot-order problems and should not normally * be used from outside this class. */ public static DynamicObject createBootClass( DynamicObject classClass, DynamicObject superclass, String name) { assert RubyGuards.isRubyClass(classClass); assert superclass == null || RubyGuards.isRubyClass(superclass); final ModuleFields model = new ModuleFields( Layouts.MODULE.getFields(Layouts.BASIC_OBJECT.getLogicalClass(classClass)).getContext(), null, name); final DynamicObject rubyClass = Layouts.CLASS.createClass( Layouts.CLASS.getInstanceFactory(classClass), model, false, null, null); assert RubyGuards.isRubyClass(rubyClass) : classClass.getShape().getObjectType().getClass(); assert RubyGuards.isRubyModule(rubyClass) : classClass.getShape().getObjectType().getClass(); model.rubyModuleObject = rubyClass; if (model.lexicalParent == null) { // bootstrap or anonymous module Layouts.MODULE.getFields(rubyClass).name = Layouts.MODULE.getFields(rubyClass).givenBaseName; } else { Layouts.MODULE .getFields(rubyClass) .getAdoptedByLexicalParent(model.lexicalParent, model.givenBaseName, null); } if (superclass != null) { assert RubyGuards.isRubyClass(superclass); assert RubyGuards.isRubyClass(Layouts.MODULE.getFields(rubyClass).rubyModuleObject); Layouts.MODULE.getFields(rubyClass).parentModule = Layouts.MODULE.getFields(superclass).start; Layouts.MODULE .getFields(superclass) .addDependent(Layouts.MODULE.getFields(rubyClass).rubyModuleObject); Layouts.MODULE.getFields(rubyClass).newVersion(); } return rubyClass; }
@Specialization public DynamicObject allocate(DynamicObject rubyClass) { return Layouts.SIZED_QUEUE.createSizedQueue( Layouts.CLASS.getInstanceFactory(rubyClass), null); }
protected DynamicObjectFactory getInstanceFactory(DynamicObject rubyClass) { return Layouts.CLASS.getInstanceFactory(rubyClass); }