out.println("  throws Throwable");
  protected void generate(JavaWriter javaOut)    throws IOException  {    PhpWriter out = new PhpWriter(javaOut, _program);    Path dstPath = javaOut.getWriteStream().getPath();    String dstFilename = dstPath.getFullPath();    LineMap lineMap = new LineMap(dstFilename);    lineMap.setSourceType("PHP");    javaOut.setLineMap(lineMap);    out.println();    out.println("static com.caucho.vfs.Path _quercus_selfPath;");    out.println();    out.println("public static void quercus_setSelfPath(com.caucho.vfs.Path path)");    out.println("{");    out.println("  _quercus_selfPath = path;");    out.println("}");    out.println();    out.println("public com.caucho.vfs.Path getSelfPath(Env env)");    out.println("{");    out.println("  return _quercus_selfPath;");    out.println("}");    AnalyzeInfo info = new AnalyzeInfo(_functionInfo);    boolean hasReturn = ! _statement.analyze(info);    for (Function fun : _program.getFunctions()) {      fun.analyze();    }    for (InterpretedClassDef cl : _program.getClasses()) {      cl.analyze();    }    out.println();    out.println("public Value execute(com.caucho.quercus.env.Env env)");    out.println("  throws Throwable");    out.println("{");    out.pushDepth();    out.println("com.caucho.vfs.WriteStream _quercus_out = env.getOut();");    out.println("Value q_this = env.getThis();");    for (VarInfo var : _functionInfo.getVariables()) {      out.println("Value v_" + var.getName() + " = null;");    }    for (String var : _functionInfo.getTempVariables()) {      out.println("Value " + var + ";");    }    _statement.generate(out);    if (! hasReturn)      out.println("return NullValue.NULL;");    out.popDepth();    out.println("}");    _statement.generateCoda(out);    for (Function fun : _program.getFunctions()) {      fun.generate(out);    }    for (InterpretedClassDef cl : _program.getClasses()) {      cl.generate(out);    }    out.println();    out.println("private void initFunctions()");    out.println("{");    out.pushDepth();    for (Function fun : _program.getFunctions()) {      fun.generateInit(out);    }    for (InterpretedClassDef cl : _program.getClasses()) {      cl.generateInit(out);    }    out.popDepth();    out.println("}");    out.generateCoda();    javaOut.generateSmap();  }