Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ast;
 
 import org.jruby.Ruby;
Base class for all D (e.g. Dynamic) node types like DStrNode, DSymbolNode, etc...
public abstract class DNode extends ListNode {
    protected Encoding encoding// If encoding is set then we should obey 1.9 semantics.
    public DNode(ISourcePosition position) {
        this(positionnull);
    }
    public DNode(ISourcePosition positionEncoding encoding) {
        super(position);
        this. = encoding;
    }
    public Encoding getEncoding() {
        return ;
    }
    @Override
    public IRubyObject interpret(Ruby runtimeThreadContext contextIRubyObject selfBlock aBlock) {
        return buildDynamicString(runtimecontextselfaBlock);
    }
    // Enebo: Without massive rethink of AST system I think we are stuck with an if check
    public boolean is19() {
        return  != null;
    }
    public boolean isSameEncoding(StrNode strNode) {
        return strNode.getValue().getEncoding() == ;
    }
    protected RubyString allocateString(Ruby runtime) {
        RubyString string = RubyString.newString(runtimenew ByteList());
        if (is19()) string.setEncoding();
        return string;
    }
    public void appendToString(Ruby runtimeThreadContext contextIRubyObject selfBlock aBlockRubyString stringNode node) {
        if (node instanceof StrNode) {
            StrNode strNode = (StrNode)node;
            if (!is19() || isSameEncoding(strNode)) {
                string.getByteList().append(strNode.getValue());
            } else {
                string.cat19(strNode.getValue(), strNode.getCodeRange());
            }
        } else if (node instanceof EvStrNode) {
            EvStrNode evStrNode = (EvStrNode)node;
            Node bodyNode = evStrNode.getBody();
            if (bodyNode == nullreturn;
            IRubyObject body = bodyNode.interpret(runtimecontextselfaBlock);
            if (is19()) {
                Helpers.shortcutAppend(stringbody);
            } else {
                Helpers.shortcutAppend18(stringbody);
            }
        } else if (is19()) {
            string.append19(node.interpret(runtimecontextselfaBlock));
        } else {
            string.append(node.interpret(runtimecontextselfaBlock));
        }
    }
    public RubyString buildDynamicString(Ruby runtimeThreadContext contextIRubyObject selfBlock aBlock) {
        RubyString string = allocateString(runtime);
        int size = size();
        for (int i = 0; i < sizei++) {
            appendToString(runtimecontextselfaBlockstringget(i));
        }
        return string;
    }
    @Override
    public RubyString definition(Ruby runtimeThreadContext contextIRubyObject selfBlock aBlock) {
        RubyString definition = super.definition(runtimecontextselfaBlock);
        return is19() && definition == null ? runtime.getDefinedMessage(.) : definition;
    }
New to GrepCode? Check out our FAQ X