コード例 #1
0
        /**
         * Creates an assignment using this value as the right hand side.
         */
        public Expr createAssignFrom(QuercusParser parser,
                                     AbstractVarExpr leftHandSide)
        {
            ExprFactory factory = parser.getExprFactory();

            return(factory.createAssign(leftHandSide, this));
        }
コード例 #2
0
        /**
         * Creates an assignment using this value as the right hand side.
         */
        public override Expr createAssignFrom(QuercusParser parser,
                                              AbstractVarExpr leftHandSide)
        {
            ExprFactory factory = parser.getExprFactory();

            return(factory.createAssignRef(leftHandSide, _expr));
        }
コード例 #3
0
        /**
         * Creates a class field $class::foo
         */
        public override Expr createClassConst(QuercusParser parser, Expr name)
        {
            ExprFactory factory = parser.getExprFactory();

            string className = _value.ToString();

            if ("self".equals(className))
            {
                className = parser.getSelfClassName();

                return(factory.createClassConst(className, name));
            }
            else if ("parent".equals(className))
            {
                className = parser.getParentClassName();

                return(factory.createClassConst(className, name));
            }
            else if ("static".equals(className))
            {
                return(factory.createClassVirtualConst(name));
            }
            else
            {
                return(factory.createClassConst(className, name));
            }
        }
コード例 #4
0
        /**
         * Creates the assignment.
         */
        public override Expr createAssignRef(QuercusParser parser,
                                             Expr value)
        {
            // _var.setAssigned();

            return(super.createAssignRef(parser, value));
        }
コード例 #5
0
        /**
         * Creates a class field Foo::${bar}
         */
        public override Expr createClassField(QuercusParser parser, Expr name)
        {
            ExprFactory factory = parser.getExprFactory();

            string className        = _var;
            string specialClassName = getSpecialClassName();

            if ("self".equals(specialClassName))
            {
                className = parser.getSelfClassName();

                return(factory.createClassField(className, name));
            }
            else if ("parent".equals(specialClassName))
            {
                className = parser.getParentClassName();

                return(factory.createClassField(className, name));
            }
            else if ("static".equals(specialClassName))
            {
                return(factory.createClassVirtualField(name));
            }
            else
            {
                return(factory.createClassField(className, name));
            }
        }
コード例 #6
0
        /**
         * Creates the assignment.
         */
        public Expr createAssign(QuercusParser parser, Expr value)

        {
            // php/03j2

            return(new UnarySuppressErrorExpr(parser.getLocation(),
                                              getExpr().createAssign(parser, value)));
        }
コード例 #7
0
        //
        // function call creation
        //

        /**
         * Creates a function call expression
         */
        public override Expr createCall(QuercusParser parser,
                                        Location location,
                                        ArrayList <Expr> args)

        {
            ExprFactory factory = parser.getExprFactory();

            return(factory.createClassMethodCall(location, _className, _varName, args));
        }
コード例 #8
0
        //
        // function call creation
        //

        /**
         * Creates a function call expression
         */
        public override Expr createCall(QuercusParser parser,
                                        Location location,
                                        ArrayList <Expr> args)

        {
            ExprFactory factory = parser.getExprFactory();

            return(factory.createThisMethod(location, _qThis, _nameExpr, args));
        }
コード例 #9
0
        //
        // function call creation
        //

        /**
         * Creates a function call expression
         */
        public Expr createCall(QuercusParser parser,
                               Location location,
                               ArrayList <Expr> args)

        {
            ExprFactory factory = parser.getExprFactory();

            return(factory.createVarFunction(location, this, args));
        }
コード例 #10
0
        /**
         * Executes the script.
         */
        public Value execute(Path path)

        {
            init();

            ReadStream reader = path.openRead();

            QuercusProgram program = QuercusParser.parse(_quercus, null, reader);

            OutputStream os = _out;
            WriteStream out;

            if (os != null)
            {
                OutputStreamStream s  = new OutputStreamStream(os);
                WriteStream        ws = new WriteStream(s);

                ws.setNewlineString("\n");

                try {
                    ws.setEncoding("iso-8859-1");
                } catch (Exception e) {
                }

                @out = ws;
            }
            else
            {
                @out = new WriteStream(StdoutStream.create());
            }

            QuercusPage page = new InterpretedPage(program);

            Env env = new Env(_quercus, page, @out, null, null);

            Value value = NullValue.NULL;

            try {
                env.start();

                value = program.execute(env);
            }
            catch (QuercusExitException e) {
            }

            @out.flushBuffer();
            @out.free();

            if (os != null)
            {
                os.flush();
            }

            return(value);
        }
コード例 #11
0
        //
        // function call creation
        //

        /**
         * Creates a function call expression
         */
        public override Expr createCall(QuercusParser parser,
                                        Location location,
                                        ArrayList <Expr> args)

        {
            ExprFactory factory = parser.getExprFactory();

            Expr var = parser.createVar(_varName);

            return(factory.createClassVirtualMethodCall(location, var, args));
        }
コード例 #12
0
        //
        // expression creation functions
        //

        public Expr createAssign(QuercusParser parser, Expr value)

        {
            string msg = (L.l("{0} @is an invalid left-hand side of an assignment.",
                              this));

            if (parser != null)
            {
                throw parser.error(msg);
            }
            else
            {
                throw new IOException(msg);
            }
        }
コード例 #13
0
        /**
         * Mark as an assignment for a list()
         */
        public void assign(QuercusParser parser)

        {
            string msg = L.l("{0} @is an invalid left-hand side of an assignment.",
                             this);

            if (parser != null)
            {
                throw parser.error(msg);
            }
            else
            {
                throw new IOException(msg);
            }
        }
コード例 #14
0
        //
        // function call creation
        //

        /**
         * Creates a function call expression
         */
        public override Expr createCall(QuercusParser parser,
                                        Location location,
                                        ArrayList <Expr> args)

        {
            /*
             * if (_className.equals(_name))
             * return factory.createClassConstructor(location, _className, _name, args);
             * else
             * return factory.createClassMethodCall(location, _className, _name, args);
             */
            ExprFactory factory = parser.getExprFactory();

            return(factory.createClassMethodCall(location, _className, _name, args));
        }
コード例 #15
0
        //
        // expression creation
        //

        /**
         * Creates a class field Foo::bar
         */
        public override Expr createClassConst(QuercusParser parser, StringValue name)
        {
            ExprFactory factory = parser.getExprFactory();

            string className        = _var;
            string specialClassName = getSpecialClassName();

            if ("self".equals(specialClassName))
            {
                className = parser.getSelfClassName();

                return(factory.createClassConst(className, name));
            }
            else if ("parent".equals(specialClassName))
            {
                className = parser.getParentClassName();

                if (className != null)
                {
                    return(factory.createClassConst(className, name));
                }
                else
                {
                    // trait's parent @is not known at parse time
                    return(factory.createTraitParentClassConst(parser.getClassName(), name));
                }
            }
            else if ("static".equals(specialClassName))
            {
                return(factory.createClassVirtualConst(name));
            }
            else
            {
                return(factory.createClassConst(className, name));
            }
        }
コード例 #16
0
 /**
  * Returns the reference of the value.
  * @param location
  */
 public override Expr createRef(QuercusParser parser)
 {
     return(parser.getFactory().createRef(this));
 }
コード例 #17
0
        public QuercusPage parseImpl(Path path, string fileName, int line)

        {
            try {
                SoftReference <QuercusProgram> programRef = _programCache.get(path);

                QuercusProgram program = programRef != null?programRef.get() : null;

                bool isModified = false;

                if (program != null)
                {
                    isModified = program.isModified();

                    if (program.isCompilable())
                    {
                    }
                    else if (isModified)
                    {
                        program.setCompilable(true);
                    }
                    else
                    {
                        if (log.isLoggable(Level.FINE))
                        {
                            log.fine(L.l("Quercus[{0}] loading interpreted page", path));
                        }

                        return(new InterpretedPage(program));
                    }
                }

                if (program == null || isModified)
                {
                    clearProgram(path, program);

                    program = preloadProgram(path, fileName);

                    if (program == null)
                    {
                        if (log.isLoggable(Level.FINE))
                        {
                            log.fine(L.l("Quercus[{0}] parsing page", path));
                        }

                        program = QuercusParser.parse(_quercus,
                                                      path,
                                                      _quercus.getScriptEncoding(),
                                                      fileName,
                                                      line);
                    }

                    _programCache.put(path, new SoftReference <QuercusProgram>(program));
                }

                if (program.getCompiledPage() != null)
                {
                    return(program.getCompiledPage());
                }

                return(compilePage(program, path));
            } catch (IOException e) {
                throw e;
            } catch (RuntimeException e) {
                throw e;
            } catch (Throwable e) {
                throw new IOExceptionWrapper(e);
            }
        }
コード例 #18
0
        /**
         * Creates a reference.
         * @param location
         */
        public Expr createRef(QuercusParser parser)

        {
            return(this);
        }
コード例 #19
0
 /**
  * Creates the assignment.
  */
 public override Expr createAssignRef(QuercusParser parser,
                                      Expr value)
 {
     return(parser.getExprFactory().createAssignRef(this, value));
 }
コード例 #20
0
 /**
  * Creates the assignment.
  */
 public override Expr createAssign(QuercusParser parser, Expr value)
 {
     return(value.createAssignFrom(parser, this));
 }
コード例 #21
0
 /**
  * Marks the value as assigned
  */
 public void assign(QuercusParser parser)
 {
     // XXX: used by list, e.g. quercus/03l8.  need further tests
 }
コード例 #22
0
        //
        // class field refs $class::$bar
        //

        /**
         * Creates a class field $class::foo
         */
        public Expr createClassConst(QuercusParser parser, StringValue name)
        {
            ExprFactory factory = parser.getExprFactory();

            return(factory.createClassConst(this, name));
        }
コード例 #23
0
 /**
  * Creates the assignment.
  */
 public override void assign(QuercusParser parser)
 {
     // _var.setAssigned();
 }
コード例 #24
0
        public FunGetClassExpr(QuercusParser parser)
        {
            super(parser.getLocation());

            _className = parser.getClassName();
        }
コード例 #25
0
        /**
         * Creates a class field $class::${foo}
         */
        public Expr createClassField(QuercusParser parser, Expr name)
        {
            ExprFactory factory = parser.getExprFactory();

            return(factory.createClassField(this, name));
        }