quercusprogram.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 323 行

JAVA
323
字号
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * *   Free Software Foundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */package com.caucho.quercus.program;import com.caucho.quercus.Quercus;import com.caucho.quercus.env.*;import com.caucho.quercus.page.QuercusPage;import com.caucho.vfs.BasicDependencyContainer;import com.caucho.vfs.Depend;import com.caucho.vfs.Path;import com.caucho.vfs.PersistentDependency;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.Map;/** * Represents a compiled Quercus program. */public class QuercusProgram {  private Quercus _quercus;  private QuercusPage _compiledPage;    private Path _sourceFile;    private boolean _isCompiling;  private boolean _isCompilable = true;  private HashMap<String,Function> _functionMap;  private HashMap<String,Function> _functionMapLowerCase    = new HashMap<String,Function>();  private HashMap<String,InterpretedClassDef> _classMap;  private FunctionInfo _functionInfo;  private Statement _statement;  private ArrayList<PersistentDependency> _dependList    = new ArrayList<PersistentDependency>();  private BasicDependencyContainer _depend    = new BasicDependencyContainer();  /**   * Creates a new quercus program   *   * @param quercus the owning quercus engine   * @param sourceFile the path to the source file   * @param statement the top-level statement   */  public QuercusProgram(Quercus quercus, Path sourceFile,			HashMap<String, Function> functionMap,			HashMap<String, InterpretedClassDef> classMap,			FunctionInfo functionInfo,			Statement statement)  {    _quercus = quercus;    _depend.setCheckInterval(quercus.getDependencyCheckInterval());    _sourceFile = sourceFile;    if (sourceFile != null)      addDepend(sourceFile);    _functionMap = functionMap;    for (Map.Entry<String,Function> entry : functionMap.entrySet()) {      _functionMapLowerCase.put(entry.getKey().toLowerCase(),				entry.getValue());    }    _classMap = classMap;    _functionInfo = functionInfo;    _statement = statement;  }  /**   * Returns the engine.   */  public Quercus getPhp()  {    return _quercus;  }  /**   * Returns the source path.   */  public Path getSourcePath()  {    return _sourceFile;  }  public FunctionInfo getFunctionInfo()  {    return _functionInfo;  }  public Statement getStatement()  {    return _statement;  }    /*   * Set to true if this page is being compiled.   */  public void setCompiling(boolean isCompiling)  {    _isCompiling = isCompiling;  }    /*   * Returns true if this page is being compiled.   */  public boolean isCompiling()  {    return _isCompiling;  }    /*   * Set to false if page cannot be compiled.   */  public void setCompilable(boolean isCompilable)  {    _isCompilable = isCompilable;  }    /*   * Returns true if the page can be compiled or it is unknown.   */  public boolean isCompilable()  {    return _isCompilable;  }  /**   * Adds a dependency.   */  public void addDepend(Path path)  {    Depend depend = new Depend(path);        _dependList.add(depend);    _depend.add(depend);  }  public ArrayList<PersistentDependency> getDependencyList()  {    return _dependList;  }  /**   * Returns true if the function is modified.   */  public boolean isModified()  {    return _depend.isModified();  }  /**   * Returns the compiled page.   */  public QuercusPage getCompiledPage()  {    return _compiledPage;  }  /**   * Sets the compiled page.   */  public void setCompiledPage(QuercusPage page)  {    _compiledPage = page;  }  /**   * Finds a function.   */  public AbstractFunction findFunction(String name)  {    AbstractFunction fun = _functionMap.get(name);    if (fun != null)      return fun;    if (! _quercus.isStrict())      fun = _functionMapLowerCase.get(name.toLowerCase());        return fun;  }  /**   * Returns the functions.   */  public Collection<Function> getFunctions()  {    return _functionMap.values();  }  /**   * Returns the functions.   */  public Collection<InterpretedClassDef> getClasses()  {    return _classMap.values();  }  /**   * Creates a return for the final expr.   */  public QuercusProgram createExprReturn()  {    // quercus/1515 - used to convert an call string to return a value        if (_statement instanceof ExprStatement) {      ExprStatement exprStmt = (ExprStatement) _statement;      _statement = new ReturnStatement(exprStmt.getExpr());    }    else if (_statement instanceof BlockStatement) {      BlockStatement blockStmt = (BlockStatement) _statement;      Statement []statements = blockStmt.getStatements();      if (statements.length > 0 &&	  statements[0] instanceof ExprStatement) {	ExprStatement exprStmt	  = (ExprStatement) statements[0];	_statement = new ReturnStatement(exprStmt.getExpr());      }    }        return this;  }  /**   * Execute the program   *   * @param env the calling environment   * @return null if there is no return value   *   */  public Value execute(Env env)  {    return _statement.execute(env);    /*    if (value != null)      return value;    else      return NullValue.NULL;    */  }  /**   * Imports the page definitions.   */  public void init(Env env)  {    /*    for (Map.Entry<String,InterpretedClassDef> entry : _classMap.entrySet()) {      entry.getValue().init(env);    }    */  }  /**   * Imports the page definitions.   */  public void importDefinitions(Env env)  {    for (Map.Entry<String,Function> entry : _functionMap.entrySet()) {      Function fun = entry.getValue();      if (fun.isGlobal())	env.addFunction(entry.getKey(), fun);    }        for (Map.Entry<String,InterpretedClassDef> entry : _classMap.entrySet()) {      env.addClassDef(entry.getKey(), entry.getValue());    }  }  //  // Java generation code follows  //    public String toString()  {    return "QuercusProgram[" + _sourceFile + "]";  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?