Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.dynjs.runtime;
  
  
  public class Reference {
  
      private JSObject globalObject;
      private Object base;
      private String referencedName;
     private boolean strict;
 
     public Reference(JSObject globalObjectString referencedNameObject baseboolean strict) {
         this. = globalObject;
         this. = referencedName;
         this. = base;
         this. = strict;
     }
 
     public Object getBase() {
         return this.;
     }
 
     public String getReferencedName() {
         return this.;
     }
 
     public boolean isStrictReference() {
         return this.;
     }
 
     public boolean hasPrimitiveBase() {
         return (this. instanceof String) || (this. instanceof Number) || (this. instanceof Boolean);
     }
 
     public boolean isPropertyReference() {
         //return (this.base instanceof JSObject) || hasPrimitiveBase();
         return ( ! ( this. instanceof EnvironmentRecord ) );
     }
 
     public boolean isUnresolvableReference() {
         return this. == .;
     }
 
     public Object getValue(ExecutionContext context) {
         // 8.7.1
         Object value = null;
         if (isUnresolvableReference()) {
             throw new ThrowException(contextcontext.createReferenceError( + " is not defined"));
         }
         
         if (isPropertyReference()) {
             if (!hasPrimitiveBase()) {
                 value = ((JSObjectthis.).get(contextthis.);
             } else {
                 value = primitiveGet(context, Types.toObject(contextthis.), this.);
             }
         } else {
             value = ((EnvironmentRecordthis.).getBindingValue(contextthis.this.);
         }
         
         return value;
     }
 
     protected Object primitiveGet(ExecutionContext contextJSObject oString name) {
         // 8.7.1 primitive [[Get]]
         Object d = o.getProperty(contextname);
         if (d == .) {
             return .;
         }
 
         PropertyDescriptor desc = (PropertyDescriptord;
         if (desc.isDataDescriptor()) {
             Object value = desc.getValue();
             if ( value == null ) {
                 value = .;
             }
             return value;
         }
 
         Object getter = desc.get("Get");
 
         if (getter == .) {
             return .;
         }
 
         return context.call((JSFunctiongettero);
     }
 
     public void putValue(ExecutionContext contextObject value) {
         // 8.7.2
         if (isUnresolvableReference()) {
             if (isStrictReference()) {
                 throw new ThrowException(contextcontext.createReferenceError( + " is not defined"));
             } else {
                 this..put(contextthis.valuefalse);
             }
         } else if (isPropertyReference()) {
             if (!hasPrimitiveBase()) {
                 ((JSObjectthis.).put(contextthis.valuethis.);
            } else {
                // TODO: handle primitives
            }
        } else {
            ((EnvironmentRecordthis.).setMutableBinding(contextthis.valuethis.);
        }
    }
    public boolean isValidForPrePostIncrementDecrement() {
        if (isStrictReference() && getBase() instanceof EnvironmentRecord) {
            if (this..equals("eval") || this..equals("arguments")) {
                return false;
            }
        }
        return true;
    }
    public String toString() {
        return "[Reference: name=" + this. + "; base=" + this. + " (" + this..getClass().getName() + ")]";
    }
New to GrepCode? Check out our FAQ X