package org.jruby.ir.operands;

import org.jruby.*;
import org.jruby.ir.IRVisitor;
import org.jruby.ir.transformations.inlining.CloneInfo;
import org.jruby.parser.StaticScope;
import org.jruby.runtime.Block;
import org.jruby.runtime.DynamicScope;
import org.jruby.runtime.JavaSites;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.runtime.builtin.InstanceVariables;
import org.jruby.runtime.builtin.InternalVariables;
import org.jruby.runtime.builtin.Variable;

import java.util.List;

For argument processing. If an opt arg does not exist we will return this so instrs can reason about non-existent arguments. Since this value can be temporarily stored in a binding, we need it to be an IRubyObject as well. But since it can never really participate in any operation, all calls throw a runtime exception.
/** * For argument processing. If an opt arg does not exist we will return * this so instrs can reason about non-existent arguments. * * Since this value can be temporarily stored in a binding, we need it to be an IRubyObject as well. * But since it can never really participate in any operation, all calls throw a runtime exception. */
public class UndefinedValue extends Operand implements IRubyObject { public static final UndefinedValue UNDEFINED = new UndefinedValue(); private UndefinedValue() { super(); } @Override public OperandType getOperandType() { return OperandType.UNDEFINED_VALUE; } @Override public void addUsedVariables(List<org.jruby.ir.operands.Variable> l) { /* Nothing to do */ } @Override public Operand cloneForInlining(CloneInfo ii) { return this; } @Override public boolean canCopyPropagate() { return true; } @Override public Object retrieve(ThreadContext context, IRubyObject self, StaticScope currScope, DynamicScope currDynScope, Object[] temp) { return this; } private RuntimeException undefinedOperation() { return new RuntimeException("IR compiler/interpreter bug: org.jruby.ir.operands.UndefinedValue should not be used as a valid value during execution."); } @Deprecated public IRubyObject callSuper(ThreadContext context, IRubyObject[] args, Block block) { throw undefinedOperation(); } public IRubyObject callMethod(ThreadContext context, String name) { throw undefinedOperation(); } public IRubyObject callMethod(ThreadContext context, String name, IRubyObject arg) { throw undefinedOperation(); } public IRubyObject callMethod(ThreadContext context, String name, IRubyObject[] args) { throw undefinedOperation(); } public IRubyObject callMethod(ThreadContext context, String name, IRubyObject[] args, Block block) { throw undefinedOperation(); } @Deprecated public IRubyObject callMethod(ThreadContext context, int methodIndex, String name) { throw undefinedOperation(); } @Deprecated public IRubyObject callMethod(ThreadContext context, int methodIndex, String name, IRubyObject arg) { throw undefinedOperation(); } public IRubyObject checkCallMethod(ThreadContext context, String name) { throw undefinedOperation(); } public IRubyObject checkCallMethod(ThreadContext context, JavaSites.CheckedSites sites) { throw undefinedOperation(); } public boolean isNil() { throw undefinedOperation(); }
Returns:
/** * * @return */
public boolean isTrue() { throw undefinedOperation(); }
RubyMethod isTaint.
Returns:boolean
/** * RubyMethod isTaint. * @return boolean */
public boolean isTaint() { throw undefinedOperation(); }
RubyMethod setTaint.
Params:
  • b –
/** * RubyMethod setTaint. * @param b */
public void setTaint(boolean b) { throw undefinedOperation(); }
Infect this object using the taint of another object
Params:
  • obj –
Returns:
/** * Infect this object using the taint of another object * @param obj * @return */
public IRubyObject infectBy(IRubyObject obj) { throw undefinedOperation(); }
RubyMethod isFrozen.
Returns:boolean
/** * RubyMethod isFrozen. * @return boolean */
public boolean isFrozen() { throw undefinedOperation(); }
RubyMethod setFrozen.
Params:
  • b –
/** * RubyMethod setFrozen. * @param b */
public void setFrozen(boolean b) { throw undefinedOperation(); }
RubyMethod isUntrusted.
Returns:boolean
/** * RubyMethod isUntrusted. * @return boolean */
public boolean isUntrusted() { throw undefinedOperation(); }
RubyMethod setUntrusted.
Params:
  • b –
/** * RubyMethod setUntrusted. * @param b */
public void setUntrusted(boolean b) { throw undefinedOperation(); }
Returns:
/** * * @return */
public boolean isImmediate() { throw undefinedOperation(); } @Override public boolean isSpecialConst() { throw undefinedOperation(); }
RubyMethod getRubyClass.
Returns:
/** * RubyMethod getRubyClass. * @return */
public RubyClass getMetaClass() { throw undefinedOperation(); }
RubyMethod getSingletonClass.
Returns:RubyClass
/** * RubyMethod getSingletonClass. * @return RubyClass */
public RubyClass getSingletonClass() { throw undefinedOperation(); }
RubyMethod getType.
Returns:RubyClass
/** * RubyMethod getType. * @return RubyClass */
public RubyClass getType() { throw undefinedOperation(); }
RubyMethod respondsTo.
Params:
  • string –
Returns:boolean
/** * RubyMethod respondsTo. * @param string * @return boolean */
public boolean respondsTo(String string) { throw undefinedOperation(); }
RubyMethod respondsTo.
Params:
  • string –
Returns:boolean
/** * RubyMethod respondsTo. * @param string * @return boolean */
public boolean respondsToMissing(String string) { throw undefinedOperation(); }
RubyMethod respondsTo.
Params:
  • string –
Returns:boolean
/** * RubyMethod respondsTo. * @param string * @return boolean */
public boolean respondsToMissing(String string, boolean priv) { throw undefinedOperation(); }
RubyMethod getRuntime.
Returns:
/** * RubyMethod getRuntime. * @return */
public Ruby getRuntime() { throw undefinedOperation(); }
RubyMethod getJavaClass.
Returns:Class
/** * RubyMethod getJavaClass. * @return Class */
public Class getJavaClass() { throw undefinedOperation(); }
Convert the object into a symbol name if possible.
Returns:String the symbol name
/** * Convert the object into a symbol name if possible. * * @return String the symbol name */
public String asJavaString() { throw undefinedOperation(); }
rb_obj_as_string
Returns:
/** rb_obj_as_string * @return */
public RubyString asString() { throw undefinedOperation(); }
Methods which perform to_xxx if the object has such a method
Returns:
/** * Methods which perform to_xxx if the object has such a method * @return */
public RubyArray convertToArray() { throw undefinedOperation(); }
Returns:
/** * * @return */
public RubyHash convertToHash() { throw undefinedOperation(); }
Returns:
/** * * @return */
public RubyFloat convertToFloat() { throw undefinedOperation(); }
Returns:
/** * * @return */
public RubyInteger convertToInteger() { throw undefinedOperation(); }
Returns:
/** * * @return */
@Deprecated public RubyInteger convertToInteger(int convertMethodIndex, String convertMethod) { throw undefinedOperation(); }
Returns:
/** * * @return */
public RubyInteger convertToInteger(String convertMethod) { throw undefinedOperation(); }
Returns:
/** * * @return */
public RubyString convertToString() { throw undefinedOperation(); }
Returns:
/** * * @return */
public IRubyObject anyToString() { throw undefinedOperation(); }
Returns:
/** * * @return */
public IRubyObject checkStringType() { throw undefinedOperation(); }
Returns:
/** * * @return */
public IRubyObject checkArrayType() { throw undefinedOperation(); }
Convert the object to the specified Java class, if possible.
Params:
  • cls – The target type to which the object should be converted.
/** * Convert the object to the specified Java class, if possible. * * @param cls The target type to which the object should be converted. */
public Object toJava(Class cls) { throw undefinedOperation(); }
RubyMethod dup.
Returns:
/** * RubyMethod dup. * @return */
public IRubyObject dup() { throw undefinedOperation(); }
RubyMethod inspect.
Returns:String
/** * RubyMethod inspect. * @return String */
public IRubyObject inspect() { throw undefinedOperation(); }
RubyMethod rbClone.
Returns:IRubyObject
/** * RubyMethod rbClone. * @return IRubyObject */
public IRubyObject rbClone() { throw undefinedOperation(); }
Returns:true if an object is Ruby Module instance (note that it will return false for Ruby Classes). If is_a? semantics is required, use (someObject instanceof RubyModule) instead.
/** * @return true if an object is Ruby Module instance (note that it will return false for Ruby Classes). * If is_a? semantics is required, use <code>(someObject instanceof RubyModule)</code> instead. */
public boolean isModule() { throw undefinedOperation(); }
Returns:true if an object is Ruby Class instance (note that it will return false for Ruby singleton classes). If is_a? semantics is required, use (someObject instanceof RubyClass/MetaClass) instead.
/** * @return true if an object is Ruby Class instance (note that it will return false for Ruby singleton classes). * If is_a? semantics is required, use <code>(someObject instanceof RubyClass/MetaClass)</code> instead. */
public boolean isClass() { throw undefinedOperation(); }
Our version of Data_Wrap_Struct. This method will just set a private pointer to the object provided. This pointer is transient and will not be accessible from Ruby.
Params:
  • obj – the object to wrap
/** * Our version of Data_Wrap_Struct. * * This method will just set a private pointer to the object provided. This pointer is transient * and will not be accessible from Ruby. * * @param obj the object to wrap */
public void dataWrapStruct(Object obj) { throw undefinedOperation(); }
Our version of Data_Get_Struct. Returns a wrapped data value if there is one, otherwise returns null.
Returns:the object wrapped.
/** * Our version of Data_Get_Struct. * * Returns a wrapped data value if there is one, otherwise returns null. * * @return the object wrapped. */
public Object dataGetStruct() { throw undefinedOperation(); }
Returns:
/** * * @return */
public IRubyObject id() { throw undefinedOperation(); } public IRubyObject op_equal(ThreadContext context, IRubyObject other) { throw undefinedOperation(); } public IRubyObject op_eqq(ThreadContext context, IRubyObject other) { throw undefinedOperation(); } public boolean eql(IRubyObject other) { throw undefinedOperation(); } public void addFinalizer(IRubyObject finalizer) { throw undefinedOperation(); } public void removeFinalizers() { throw undefinedOperation(); } // // COMMON VARIABLE METHODS //
Returns true if object has any variables, defined as:
  • instance variables
  • class variables
  • constants
  • internal variables, such as those used when marshalling Ranges and Exceptions
Returns:true if object has any variables, else false
/** * Returns true if object has any variables, defined as: * <ul> * <li> instance variables * <li> class variables * <li> constants * <li> internal variables, such as those used when marshalling Ranges and Exceptions * </ul> * @return true if object has any variables, else false */
public boolean hasVariables() { throw undefinedOperation(); }
Returns:the count of all variables (ivar/cvar/constant/internal)
/** * @return the count of all variables (ivar/cvar/constant/internal) */
public int getVariableCount() { throw undefinedOperation(); }
Sets object's variables to those in the supplied list, removing/replacing any previously defined variables. Applies to all variable types (ivar/cvar/constant/internal).
Params:
  • variables – the variables to be set for object
/** * Sets object's variables to those in the supplied list, * removing/replacing any previously defined variables. Applies * to all variable types (ivar/cvar/constant/internal). * * @param variables the variables to be set for object */
@Deprecated public void syncVariables(List<Variable<Object>> variables) { throw undefinedOperation(); }
Sets object's variables to those in the supplied object, removing/replacing any previously defined variables of the same name. Applies to all variable types (ivar/cvar/constant/internal).
Params:
  • source – the source object containing the variables to sync
/** * Sets object's variables to those in the supplied object, * removing/replacing any previously defined variables of the same name. * Applies to all variable types (ivar/cvar/constant/internal). * * @param source the source object containing the variables to sync */
public void syncVariables(IRubyObject source) { throw undefinedOperation(); }
Returns:a list of all variables (ivar/cvar/constant/internal)
/** * @return a list of all variables (ivar/cvar/constant/internal) */
public List<Variable<Object>> getVariableList() { throw undefinedOperation(); } // // INSTANCE VARIABLE METHODS // public InstanceVariables getInstanceVariables() { throw undefinedOperation(); } // // INTERNAL VARIABLE METHODS // public InternalVariables getInternalVariables() { throw undefinedOperation(); }
Returns:a list of all variable names (ivar/cvar/constant/internal)
/** * @return a list of all variable names (ivar/cvar/constant/internal) */
public List<String> getVariableNameList() { throw undefinedOperation(); } public void copySpecialInstanceVariables(IRubyObject clone) { throw undefinedOperation(); } public Object getVariable(int index) { throw undefinedOperation(); } public void setVariable(int index, Object value) { throw undefinedOperation(); } @Override public String toString() { return "%undefined"; } @Override public void visit(IRVisitor visitor) { visitor.UndefinedValue(this); } @Deprecated public Object dataGetStructChecked() { throw undefinedOperation(); } }