Example #1
0
  @Override
  public RubyNode visitDefnNode(org.jruby.ast.DefnNode node) {
    final SourceSection sourceSection = translate(node.getPosition());

    /*
     * The top-level translator puts methods into Object. We put ours into the self, which is
     * the class being defined.
     */

    final SharedMethodInfo sharedMethodInfo =
        new SharedMethodInfo(
            sourceSection,
            environment.getSharedMethodInfo().getLexicalScope(),
            node.getName(),
            false,
            node.getBodyNode());

    final TranslatorEnvironment newEnvironment =
        new TranslatorEnvironment(
            context,
            environment,
            environment.getParser(),
            environment.getParser().allocateReturnID(),
            true,
            true,
            sharedMethodInfo,
            sharedMethodInfo.getName(),
            false);
    final MethodTranslator methodCompiler =
        new MethodTranslator(currentNode, context, this, newEnvironment, false, false, source);
    final MethodDefinitionNode functionExprNode =
        methodCompiler.compileFunctionNode(
            translate(node.getPosition()),
            node.getName(),
            node.getArgsNode(),
            node.getBodyNode(),
            false);

    return new AddMethodNode(
        context, sourceSection, new SelfNode(context, sourceSection), functionExprNode);
  }
Example #2
0
 @Override
 public String toString() {
   return sharedMethodInfo.toString();
 }