Exemplo n.º 1
0
        protected ObjectValue(Env env, QuercusClass quercusClass)
        {
            this(env);

            _quercusClass = quercusClass;
            _className    = quercusClass.getName();
        }
 /**
  * Evaluates the new() method call.
  */
 public Value callNew(Env env,
                      QuercusClass qClass,
                      Value qThis,
                      Value [] args)
 {
     return(callMethod(env, qClass, qThis, args));
 }
Exemplo n.º 3
0
        /**
         * Evaluates the expression.
         *
         * @param env the calling environment.
         *
         * @return the expression value.
         */
        public override Value eval(Env env)
        {
            Value qThis = env.getThis();

            QuercusClass cls = qThis.getQuercusClass();

            if (cls == null)
            {
                env.error(L.l("no calling class found"), getLocation());

                return(NullValue.NULL);
            }

            StringValue methodName = _methodName.evalStringValue(env);
            int         hash       = methodName.hashCodeCaseInsensitive();

            Value [] values = evalArgs(env, _args);

            env.pushCall(this, cls, values);

            try {
                env.checkTimeout();

                return(cls.callMethod(env, qThis, methodName, hash, values));
            } finally {
                env.popCall();
            }
        }
 public override Value callMethodRef(Env env,
                                     QuercusClass qClass,
                                     Value qThis,
                                     Value a1, Value a2, Value a3, Value a4)
 {
     return(callMethod(env, qClass, qThis, a1, a2, a3, a4).copyReturn());
 }
 abstract override public Value callMethodRef(Env env,
                                              QuercusClass qClass,
                                              Value qThis,
                                              Value a1,
                                              Value a2,
                                              Value a3,
                                              Value a4);
        /**
         * Evaluates the expression.
         *
         * @param env the calling environment.
         *
         * @return the expression value.
         */
        public Value eval(Env env)
        {
            // php/09d2
            QuercusClass cls = _className.evalQuercusClass(env);

            return(cls.getConstant(env, _name));
        }
        /**
         * Evaluates the expression.
         *
         * @param env the calling environment.
         *
         * @return the expression value.
         */
        public Value eval(Env env)
        {
            Value qThis = env.getThis();

            QuercusClass cls = qThis.getQuercusClass();

            if (cls == null)
            {
                env.error(L.l("no calling class found"), getLocation());

                return(NullValue.NULL);
            }

            Value [] values = evalArgs(env, _args);

            env.pushCall(this, cls, values);

            try {
                env.checkTimeout();

                return(cls.callMethod(env, qThis, _methodName, _hash, values));
            } finally {
                env.popCall();
            }
        }
Exemplo n.º 8
0
        public override Value callMethodRef(Env env, QuercusClass qClass, Value qThis,
                                            Value [] argValues)
        {
            /*
             * Value []args;
             *
             * if (_defaultArgs.length <= argValues.length) {
             * args = argValues;
             * }
             * else {
             * args = new Value[_defaultArgs.length];
             *
             * System.arraycopy(argValues, 0, args, 0, argValues.length);
             *
             * for (int i = argValues.length; i < args.length; i++) {
             *  if (_defaultArgs[i] != null)
             *    args[i] = _defaultArgs[i].eval(env);
             *  else
             *    args[i] = NullValue.NULL;
             * }
             * }
             */

            if (argValues.length < _requiredArgs)
            {
                env.warning("required argument missing");
            }

            return(callMethodRefImpl(env, qClass, qThis, argValues));
        }
Exemplo n.º 9
0
        private void addInterface(Env env, ArrayValue array, string name)
        {
            QuercusClass cls = env.findClass(name);

            array.put(StringValue.create(name),
                      env.wrapJava(new ReflectionClass(cls)));
        }
Exemplo n.º 10
0
 public override Value callMethod(Env env,
                                  QuercusClass qClass,
                                  Value qThis,
                                  Value a1, Value a2, Value a3, Value a4, Value a5)
 {
     return(callMethodRef(env, qClass, qThis, a1, a2, a3, a4, a5).toValue());
 }
Exemplo n.º 11
0
        public static Value class_parents(Env env,
                                          Value obj,
                                          @Optional bool autoload)
        {
            QuercusClass cls;

            if (obj.isObject())
            {
                cls = ((ObjectValue)obj.toObject(env)).getQuercusClass();
            }
            else
            {
                cls = env.findClass(obj.ToString(), autoload, true, true);
            }

            if (cls != null)
            {
                ArrayValue array = new ArrayValueImpl();

                QuercusClass parent = cls;

                while ((parent = parent.getParent()) != null)
                {
                    string name = parent.getName();

                    array.put(name, name);
                }

                return(array);
            }
            else
            {
                return(BooleanValue.FALSE);
            }
        }
Exemplo n.º 12
0
        public void close()
        {
            QuercusClass cls = _wrapper.getQuercusClass();

            if (cls != null)
            {
                StringValue funName;

                if (_env.isUnicodeSemantics())
                {
                    funName = STREAM_CLOSE_U;
                }
                else
                {
                    funName = STREAM_CLOSE;
                }

                AbstractFunction fun = cls.findFunction(funName);

                if (fun == null)
                {
                    //_env.warning(L.l("{0}::{1} @is not implemented", cls.getName(), funName));

                    return;
                }

                _wrapper.callMethod(_env, funName);
            }
        }
        /**
         * Evaluates the method with the given variable arguments.
         */
        public override Value callMethod(Env env, QuercusClass qClass, Value qThis,
                                         Value [] args)
        {
            switch (args.length)
            {
            case 0:
                return(callMethod(env, qClass, qThis,
                                  _args[0].eval(env),
                                  _args[1].eval(env),
                                  _args[2].eval(env)));

            case 1:
                return(callMethod(env, qClass, qThis,
                                  args[0],
                                  _args[1].eval(env),
                                  _args[2].eval(env)));

            case 2:
                return(callMethod(env, qClass, qThis,
                                  args[0],
                                  args[1],
                                  _args[2].eval(env)));

            case 3:
            default:
                return(callMethod(env, qClass, qThis,
                                  args[0],
                                  args[1],
                                  args[2]));
            }
        }
 public override Value callMethod(Env env, QuercusClass qClass, Value qThis)
 {
     return(callMethod(env, qClass, qThis,
                       _args[0].eval(env),
                       _args[1].eval(env),
                       _args[2].eval(env)));
 }
Exemplo n.º 15
0
            public int hashCode()
            {
                int hash = 37;

                ClassDef def = _defRef.get();

                QuercusClass parent = null;

                if (_parentRef != null)
                {
                    parent = _parentRef.get();
                }

                if (def != null)
                {
                    hash = 65521 * hash + def.hashCode();
                }

                if (parent != null)
                {
                    hash = 65521 * hash + parent.hashCode();
                }

                return(hash);
            }
        /**
         * Evaluates the expression.
         *
         * @param env the calling environment.
         *
         * @return the expression value.
         */
        public Value eval(Env env)
        {
            QuercusClass cl = env.findClass(_className);

            if (cl == null)
            {
                throw env.createErrorException(L.l("{0} @is an unknown class",
                                                   _className));
            }

            StringValue nameV = _nameV;

            AbstractFunction fun = cl.getFunction(nameV);

            Value [] values = evalArgs(env, _args);

            Value qThis = env.getThis();

            env.pushCall(this, qThis, values);

            try {
                env.checkTimeout();

                return(cl.callMethod(env, qThis, nameV, nameV.hashCode(), values));
            } finally {
                env.popCall();
            }
        }
        /**
         * Evaluates the expression.
         *
         * @param env the calling environment.
         *
         * @return the expression value.
         */
        public Value eval(Env env)
        {
            QuercusClass cl = env.findClass(_className);

            if (cl == null)
            {
                env.error(L.l("no matching class {0}", _className), getLocation());
            }

            Value [] values = evalArgs(env, _args);

            Value oldThis = env.getThis();

            // php/09qe
            Value qThis = oldThis;

            env.pushCall(this, cl, values);

            try {
                env.checkTimeout();

                return(cl.callConstructor(env, qThis, values));
            } finally {
                env.popCall();
                env.setThis(oldThis);
            }
        }
Exemplo n.º 18
0
 public override Value callMethod(Env env,
                                  QuercusClass qClass,
                                  Value qThis,
                                  Value a1)
 {
     return(callMethodRef(env, qClass, qThis, a1).toValue());
 }
Exemplo n.º 19
0
 /**
  * Evaluates the method with the given variable arguments.
  */
 public override Value callMethodRef(Env env, QuercusClass qClass, Value qThis,
                                     Value a1)
 {
     return(callMethodRef(env, qClass, qThis,
                          a1,
                          _args[1].eval(env)));
 }
 public override Value callMethodRef(Env env,
                                     QuercusClass qClass,
                                     Value qThis)
 {
     // php/37a2
     return(callMethod(env, qClass, qThis).copyReturn());
 }
 public override Value callMethodRef(Env env,
                                     QuercusClass qClass,
                                     Value qThis,
                                     Value [] args)
 {
     return(callMethod(env, qClass, qThis, args).copyReturn());
 }
        /**
         * Evaluates the function.
         */
        public override Value callMethod(Env env, QuercusClass qClass, Value qThis,
                                         Value [] args)
        {
            if (args.length < _methodTable.length)
            {
                AbstractJavaMethod [] methods = _methodTable[args.length];

                if (methods != null)
                {
                    if (methods.length == 1)
                    {
                        return(methods[0].callMethod(env, qClass, qThis, args));
                    }
                    else
                    {
                        AbstractJavaMethod method
                            = getBestFitJavaMethod(methods, _restMethodTable, args);

                        return(method.callMethod(env, qClass, qThis, args));
                    }
                }
                else
                {
                    if (_restMethodTable.length == 0)
                    {
                        env.warning(L.l(
                                        "'{0}' overloaded method call with {1} arguments "
                                        + "does not match any overloaded method",
                                        getName(),
                                        args.length));

                        return(NullValue.NULL);
                    }

                    AbstractJavaMethod method
                        = getBestFitJavaMethod(methods, _restMethodTable, args);

                    return(method.callMethod(env, qClass, qThis, args));
                }
            }
            else
            {
                if (_restMethodTable.length == 0)
                {
                    env.warning(L.l(
                                    "'{0}' overloaded method call with {1} "
                                    + "arguments has too many arguments", getName(), args.length));

                    return(NullValue.NULL);
                }
                else
                {
                    AbstractJavaMethod method
                        = getBestFitJavaMethod(null, _restMethodTable, args);

                    return(method.callMethod(env, qClass, qThis, args));
                }
            }
        }
Exemplo n.º 23
0
        /**
         * Evaluates the expression.
         *
         * @param env the calling environment.
         *
         * @return the expression value.
         */
        public override Value eval(Env env)
        {
            Value qThis = env.getThis();

            QuercusClass parent = qThis.getQuercusClass().getTraitParent(env, _traitName);

            return(parent.getConstant(env, _name));
        }
 public override Value callMethod(Env env, QuercusClass qClass, Value qThis,
                                  Value a1, Value a2)
 {
     return(callMethod(env, qClass, qThis,
                       a1,
                       a2,
                       _args[2].eval(env)));
 }
Exemplo n.º 25
0
            public override string getComment(Env env)
            {
                QuercusClass cls = getDeclaringClass(env, _cls);

                ClassDef def = cls.getClassDef();

                return(def.getStaticFieldComment(_name));
            }
Exemplo n.º 26
0
            public string getComment(Env env)
            {
                QuercusClass cls = getDeclaringClass(env, _cls);

                ClassDef def = cls.getClassDef();

                return(def.getFieldComment(_nameV));
            }
 /**
  * Evaluates the function as a method call.
  */
 public Value callMethod(Env env,
                         QuercusClass qClass,
                         Value qThis,
                         Value a1, Value a2, Value a3)
 {
     return(callMethod(env, qClass, qThis,
                       new Value[] { a1, a2, a3 }));
 }
 /**
  * Evaluates the function as a method call.
  */
 public Value callMethodRef(Env env,
                            QuercusClass qClass,
                            Value qThis,
                            Value a1, Value a2)
 {
     return(callMethodRef(env, qClass, qThis,
                          new Value[] { a1, a2 }));
 }
 /**
  * Evaluates the function as a method call.
  */
 public Value callMethodRef(Env env,
                            QuercusClass qClass,
                            Value qThis,
                            Value a1, Value a2, Value a3, Value a4, Value a5)
 {
     return(callMethodRef(env, qClass, qThis,
                          new Value[] { a1, a2, a3, a4, a5 }));
 }
Exemplo n.º 30
0
            protected QuercusClass getDeclaringClass(Env env, QuercusClass cls)
            {
                if (_declaringClass == null)
                {
                    _declaringClass = getDeclaringClassImpl(env, cls);
                }

                return(_declaringClass);
            }