Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.dynjs.runtime.interp;
  
  import static me.qmx.jitescript.util.CodegenUtils.*;
  
  import java.util.Arrays;
  import java.util.List;
  
 
 
     public InvokeDynamicInterpretingVisitor(BlockManager blockManager) {
         super(blockManager);
     }
 
     @Override
     public void visit(ExecutionContext contextAssignmentExpression exprboolean strict) {
         expr.getLhs().accept(contextthisstrict);
         Object lhs = pop();
         if (!(lhs instanceof Reference)) {
             throw new ThrowException(contextcontext.createReferenceError(expr.getLhs() + " is not a reference"));
         }
 
         Reference lhsRef = (Referencelhs;
         
 
         expr.getRhs().accept(contextthisstrict);
         Object rhs = getValue(contextpop());
 
         if (lhsRef.isUnresolvableReference() && strict) {
             throw new ThrowException(contextcontext.createReferenceError(lhsRef.getReferencedName() + " is not defined"));
         }
 
         try {
             DynJSBootstrapper.getInvokeHandler().set(lhsRefcontextlhsRef.getReferencedName(), rhs);
         } catch (ThrowException e) {
             throw e;
         } catch (Throwable e) {
             throw new ThrowException(contexte);
         }
         push(rhs);
 
         // lhsRef.putValue(context, rhs);
         // invokedynamic("dyn:setProperty", sig(void.class, Reference.class, ExecutionContext.class, String.class, Object.class), DynJSBootstrapper.HANDLE,
         // DynJSBootstrapper.ARGS);
     }
 
     @Override
     public void visit(ExecutionContext contextFunctionCallExpression exprboolean strict) {
         expr.getMemberExpression().accept(contextthisstrict);
         Object ref = pop();
         Object function = getValue(contextref);
 
         List<ExpressionargExprs = expr.getArgumentExpressions();
 
         Object[] args = new Object[argExprs.size()];
         int i = 0;
 
         for (Expression each : argExprs) {
             each.accept(contextthisstrict);
             Object value = getValue(context,pop());
             args[i] = value;
             ++i;
         }
 
         Object thisValue = null;
 
         if (ref instanceof Reference) {
             if (((Referenceref).isPropertyReference()) {
                 thisValue = ((Referenceref).getBase();
             } else {
                 thisValue = ((EnvironmentRecord) ((Referenceref).getBase()).implicitThisValue();
             }
         }
 
         if (thisValue == null) {
             thisValue = .;
         }
 
         if (ref instanceof Reference) {
             function = new DereferencedReference((Referencereffunction);
         }
 
         try {
             push(DynJSBootstrapper.getInvokeHandler().call(functioncontextthisValueargs));
         } catch (ThrowException e) {
            throw e;
        } catch (NoSuchMethodError e) {
            throw new ThrowException(contextcontext.createTypeError("not callable"));
        } catch (Throwable e) {
            throw new ThrowException(contexte);
        }
    }
    @Override
    public void visit(ExecutionContext contextNewOperatorExpression exprboolean strict) {
        expr.getExpr().accept(contextthisstrict);
        Object memberExpr = getValue(contextpop());
        Object[] args = new Object[expr.getArgumentExpressions().size()];
        int i = 0;
        for (Expression each : expr.getArgumentExpressions()) {
            each.accept(contextthisstrict);
            args[i] = getValue(contextpop());
            ++i;
        }
        try {
            push( DynJSBootstrapper.getInvokeHandler().construct(memberExprcontextargs) );
        } catch (NoSuchMethodError e) {
            throw new ThrowException(contextcontext.createTypeError("cannot construct with: " + memberExpr));
        } catch (ThrowException e) {
            throw e;
        } catch (Throwable e) {
            throw new ThrowException(contexte);
        }
        return;
    }
    protected Object getValue(ExecutionContext contextObject obj) {
        if (obj instanceof Reference) {
            String name = ((Referenceobj).getReferencedName();
            try {
                Object result = DynJSBootstrapper.getInvokeHandler().get(objcontextname);
                return result;
            } catch (ThrowException e) {
                throw e;
            } catch (NoSuchMethodError e) {
                throw new ThrowException(contextcontext.createReferenceError("unable to reference: " + name));
            } catch (Throwable e) {
                throw new ThrowException(contexte);
            }
        } else {
            return obj;
        }
    }
New to GrepCode? Check out our FAQ X