Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 /*
  * To change this template, choose Tools | Templates
  * and open the template in the editor.
  */
 
 package org.jruby.ast;
 
 import org.jruby.Ruby;

Author(s):
enebo
public class Colon2ConstNode extends Colon2Node {
    private volatile transient IRubyObject cachedValue = null;
    private volatile Object generation = -1;
    private volatile int hash = -1;
    
    public Colon2ConstNode(ISourcePosition positionNode leftNodeString name) {
        super(positionleftNodename);
        assert leftNode != null"Colon2ConstNode cannot have null leftNode";
    }
    @Override
    public IRubyObject interpret(Ruby runtimeThreadContext contextIRubyObject selfBlock aBlock) {
        RubyModule target = RuntimeHelpers.checkIsModule(.interpret(runtimecontextselfaBlock));
        IRubyObject value = getValue(contexttarget);
        return value != null ? value : target.getConstantFromConstMissing();
    }
    @Override
    public RubyString definition(Ruby runtimeThreadContext contextIRubyObject selfBlock aBlock) {
        IRubyObject lastError = context.getErrorInfo();
        try {
            if (RuntimeHelpers.isModuleAndHasConstant(
                    .interpret(runtimecontextselfaBlock), )) {
                return runtime.getDefinedMessage(.);
            }
        } catch (JumpException e) {
            // replace lastError
            context.setErrorInfo(lastError);
        }
        return null;
    }
    public IRubyObject getValue(ThreadContext contextRubyModule target) {
        IRubyObject value = // Store to temp so it does null out on us mid-stream
        return isCached(contexttargetvalue) ? value : reCache(contexttarget);
    }
    private boolean isCached(ThreadContext contextRubyModule targetIRubyObject value) {
        // We could probably also detect if LHS value came out of cache and avoid some of this
        return
                value != null &&
                 == context.runtime.getConstantInvalidator().getData() &&
                 == target.hashCode();
    }
    public IRubyObject reCache(ThreadContext contextRubyModule target) {
        Object newGeneration = context.runtime.getConstantInvalidator().getData();
        IRubyObject value = target.getConstantFromNoConstMissing(false);
         = value;
        if (value != null) {
             = newGeneration;
             = target.hashCode();
        }
        return value;
    }
New to GrepCode? Check out our FAQ X