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()) {
                 RuntimeHelpers.shortcutAppend(stringbody);
             } else {
                 RuntimeHelpers.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