public Operand buildModule(ModuleNode moduleNode) { Colon3Node cpath = moduleNode.getCPath(); RubySymbol moduleName = cpath.getName(); Operand container = getContainerFromCPath(cpath); IRModuleBody body = new IRModuleBody(manager, scope, moduleName, moduleNode.getLine(), moduleNode.getScope()); Variable moduleVar = addResultInstr(new DefineModuleInstr(createTemporaryVariable(), body, container)); Variable processBodyResult = addResultInstr(new ProcessModuleBodyInstr(createTemporaryVariable(), moduleVar, NullBlock.INSTANCE)); newIRBuilder(manager, body).buildModuleOrClassBody(moduleNode.getBodyNode(), moduleNode.getLine(), moduleNode.getEndLine()); return processBodyResult; }
public Operand buildModule(ModuleNode moduleNode) { Colon3Node cpath = moduleNode.getCPath(); RubySymbol moduleName = cpath.getName(); Operand container = getContainerFromCPath(cpath); IRModuleBody body = new IRModuleBody(manager, scope, moduleName, moduleNode.getLine(), moduleNode.getScope()); Variable moduleVar = addResultInstr(new DefineModuleInstr(createTemporaryVariable(), body, container)); Variable processBodyResult = addResultInstr(new ProcessModuleBodyInstr(createTemporaryVariable(), moduleVar, NullBlock.INSTANCE)); newIRBuilder(manager, body).buildModuleOrClassBody(moduleNode.getBodyNode(), moduleNode.getLine(), moduleNode.getEndLine()); return processBodyResult; }
public Operand buildSClass(SClassNode sclassNode) { Operand receiver = build(sclassNode.getReceiverNode()); // FIXME: metaclass name should be a bytelist IRModuleBody body = new IRMetaClassBody(manager, scope, manager.getMetaClassName(), sclassNode.getLine(), sclassNode.getScope()); Variable sClassVar = addResultInstr(new DefineMetaClassInstr(createTemporaryVariable(), receiver, body)); // sclass bodies inherit the block of their containing method Variable processBodyResult = addResultInstr(new ProcessModuleBodyInstr(createTemporaryVariable(), sClassVar, scope.getYieldClosureVariable())); newIRBuilder(manager, body).buildModuleOrClassBody(sclassNode.getBodyNode(), sclassNode.getLine(), sclassNode.getEndLine()); return processBodyResult; }
public Operand buildSClass(SClassNode sclassNode) { Operand receiver = build(sclassNode.getReceiverNode()); // FIXME: metaclass name should be a bytelist IRModuleBody body = new IRMetaClassBody(manager, scope, manager.getMetaClassName(), sclassNode.getLine(), sclassNode.getScope()); Variable sClassVar = addResultInstr(new DefineMetaClassInstr(createTemporaryVariable(), receiver, body)); // sclass bodies inherit the block of their containing method Variable processBodyResult = addResultInstr(new ProcessModuleBodyInstr(createTemporaryVariable(), sClassVar, scope.getYieldClosureVariable())); newIRBuilder(manager, body).buildModuleOrClassBody(sclassNode.getBodyNode(), sclassNode.getLine(), sclassNode.getEndLine()); return processBodyResult; }
/** * Build a new class and add it to the current scope (s). */ public Operand buildClass(ClassNode classNode) { Node superNode = classNode.getSuperNode(); Colon3Node cpath = classNode.getCPath(); Operand superClass = (superNode == null) ? null : build(superNode); RubySymbol className = cpath.getName(); Operand container = getContainerFromCPath(cpath); IRClassBody body = new IRClassBody(manager, scope, className, classNode.getLine(), classNode.getScope()); Variable classVar = addResultInstr(new DefineClassInstr(createTemporaryVariable(), body, container, superClass)); Variable processBodyResult = addResultInstr(new ProcessModuleBodyInstr(createTemporaryVariable(), classVar, NullBlock.INSTANCE)); newIRBuilder(manager, body).buildModuleOrClassBody(classNode.getBodyNode(), classNode.getLine(), classNode.getEndLine()); return processBodyResult; }
/** * Build a new class and add it to the current scope (s). */ public Operand buildClass(ClassNode classNode) { Node superNode = classNode.getSuperNode(); Colon3Node cpath = classNode.getCPath(); Operand superClass = (superNode == null) ? null : build(superNode); RubySymbol className = cpath.getName(); Operand container = getContainerFromCPath(cpath); IRClassBody body = new IRClassBody(manager, scope, className, classNode.getLine(), classNode.getScope()); Variable classVar = addResultInstr(new DefineClassInstr(createTemporaryVariable(), body, container, superClass)); Variable processBodyResult = addResultInstr(new ProcessModuleBodyInstr(createTemporaryVariable(), classVar, NullBlock.INSTANCE)); newIRBuilder(manager, body).buildModuleOrClassBody(classNode.getBodyNode(), classNode.getLine(), classNode.getEndLine()); return processBodyResult; }