home *** CD-ROM | disk | FTP | other *** search
/ Tutto per Internet / Internet.iso / soft95 / Java / espints / espinst.exe / classes / espresso / Main.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-02-28  |  5.9 KB  |  266 lines

  1. package espresso;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6.  
  7. class Main implements Constants {
  8.    static int argcount;
  9.    static String[] expargs;
  10.    static boolean Win32;
  11.    static boolean someFiles = false;
  12.  
  13.    static {
  14.       Win32 = File.separatorChar == '\\';
  15.       expargs = new String[4];
  16.    }
  17.  
  18.    static String[] expand(String[] var0) throws IOException {
  19.       argcount = 0;
  20.  
  21.       for(int var1 = 0; var1 < var0.length; ++var1) {
  22.          if (hasWildcards(var0[var1])) {
  23.             addExpansion(var0[var1]);
  24.          } else {
  25.             addArg(var0[var1]);
  26.          }
  27.       }
  28.  
  29.       return truncate(expargs, argcount);
  30.    }
  31.  
  32.    static void addExpansion(String var0) throws IOException {
  33.       File var1 = new File(var0);
  34.       String var2 = var1.getParent();
  35.       String var3 = var1.getName();
  36.       if (var2 == null) {
  37.          if (var0.indexOf("\\") == 0) {
  38.             var2 = "";
  39.          } else {
  40.             var2 = ".";
  41.          }
  42.       }
  43.  
  44.       File var4 = new File(String.valueOf(var2).concat(String.valueOf("\\")));
  45.       if (var4 == null) {
  46.          addArg(var0);
  47.       } else {
  48.          String[] var5 = var4.list();
  49.          if (var5 != null) {
  50.             for(int var6 = 0; var6 < var5.length; ++var6) {
  51.                if (matches(var5[var6], 0, var3, 0)) {
  52.                   addArg(String.valueOf(String.valueOf(var2).concat(String.valueOf(File.separator))).concat(String.valueOf(var5[var6])));
  53.                }
  54.             }
  55.          }
  56.  
  57.       }
  58.    }
  59.  
  60.    static boolean matches(String var0, int var1, String var2, int var3) {
  61.       if (var3 >= var2.length()) {
  62.          return var1 >= var0.length();
  63.       } else if (var2.charAt(var3) == '*') {
  64.          return matches(var0, var1, var2, var3 + 1) || var1 < var0.length() && matches(var0, var1 + 1, var2, var3);
  65.       } else {
  66.          return var1 < var0.length() && (var2.charAt(var3) == '?' || Character.toUpperCase(var0.charAt(var1)) == Character.toUpperCase(var2.charAt(var3))) && matches(var0, var1 + 1, var2, var3 + 1);
  67.       }
  68.    }
  69.  
  70.    static boolean hasWildcards(String var0) {
  71.       return var0.length() > 0 && var0.charAt(0) != '-' && (var0.indexOf(42) >= 0 || var0.indexOf("?") >= 0);
  72.    }
  73.  
  74.    static String[] truncate(String[] var0, int var1) {
  75.       String[] var2 = new String[var1];
  76.       System.arraycopy(var0, 0, var2, 0, var1);
  77.       return var2;
  78.    }
  79.  
  80.    static void addArg(String var0) {
  81.       if (argcount == expargs.length) {
  82.          String[] var1 = new String[argcount * 2];
  83.          System.arraycopy(expargs, 0, var1, 0, argcount);
  84.          expargs = var1;
  85.       }
  86.  
  87.       expargs[argcount++] = var0;
  88.    }
  89.  
  90.    public static void main(String[] var0) throws Exception {
  91.       if (var0.length == 0) {
  92.          System.out.println("Usage: espresso [-g][-verbose][-obfuscate][-d dir][-classpath path] {file.java}");
  93.       } else {
  94.          try {
  95.             long var1 = System.currentTimeMillis();
  96.             String[] var3 = Win32 ? expand(var0) : var0;
  97.             TopLevel[] var4 = new TopLevel[var3.length];
  98.             String[] var5 = new String[var3.length];
  99.  
  100.             for(int var6 = 0; var6 < var3.length; ++var6) {
  101.                var4[var6] = null;
  102.                var5[var6] = null;
  103.                String var7 = var3[var6];
  104.                if (var7.equals("-classpath") && var6 + 1 < var3.length) {
  105.                   ClassFile.classPath = String.valueOf(String.valueOf(var3[var6 + 1]).concat(String.valueOf(ClassFile.pathSep))).concat(String.valueOf(ClassFile.classPath));
  106.                   ++var6;
  107.                } else if (var7.equals("-d") && var6 + 1 < var3.length) {
  108.                   var5[var6] = var3[var6 + 1];
  109.                   ++var6;
  110.                } else if (var7.equals("-verbose")) {
  111.                   Switches.verbose = true;
  112.                } else if (var7.equals("-obfuscate")) {
  113.                   Switches.obfuscate = true;
  114.                } else if (var7.equals("-g")) {
  115.                   Switches.debugInfo = true;
  116.                } else if (var7.equals("-extended")) {
  117.                   Switches.extended = true;
  118.                } else if (var7.equals("-printtree")) {
  119.                   Switches.printTree = true;
  120.                } else if (var7.equals("-printsearch")) {
  121.                   Switches.printSearch = true;
  122.                } else if (var7.equals("-prompt")) {
  123.                   Switches.promptOnError = true;
  124.                } else if (var7.startsWith("-")) {
  125.                   System.out.println(String.valueOf("unrecognized option: ").concat(String.valueOf(var7)));
  126.                } else {
  127.                   if (Switches.verbose && !someFiles) {
  128.                      System.out.println("EspressoGrinder 1.0beta6, 11-Feb-96; Copyright 1995,96 Martin Odersky. All rights reserved.");
  129.                   }
  130.  
  131.                   var4[var6] = parse(var7);
  132.                }
  133.             }
  134.  
  135.             if (Report.nerrors == 0) {
  136.                if (Switches.verbose && someFiles) {
  137.                   System.out.println("[preprocessing]");
  138.                }
  139.  
  140.                for(int var8 = 0; var8 < var4.length; ++var8) {
  141.                   if (var4[var8] != null) {
  142.                      var4[var8].enter();
  143.                   }
  144.                }
  145.  
  146.                Predef.init();
  147.  
  148.                for(int var9 = 0; var9 < var4.length; ++var9) {
  149.                   if (var4[var9] != null) {
  150.                      var4[var9].enterFields();
  151.                   }
  152.                }
  153.  
  154.                for(int var10 = 0; var10 < var4.length; ++var10) {
  155.                   if (var4[var10] != null) {
  156.                      var4[var10].attr();
  157.                   }
  158.                }
  159.  
  160.                if (Switches.extended && Report.nerrors == 0) {
  161.                   for(int var11 = 0; var11 < var4.length; ++var11) {
  162.                      if (var4[var11] != null) {
  163.                         var4[var11] = (TopLevel)var4[var11].simplify();
  164.                      }
  165.                   }
  166.  
  167.                   Simplify.swapTypes();
  168.  
  169.                   for(int var12 = 0; var12 < var4.length; ++var12) {
  170.                      if (var4[var12] != null) {
  171.                         var4[var12].enterFields();
  172.                      }
  173.                   }
  174.  
  175.                   for(int var13 = 0; var13 < var4.length; ++var13) {
  176.                      if (var4[var13] != null) {
  177.                         var4[var13].attr();
  178.                      }
  179.                   }
  180.                }
  181.  
  182.                for(int var14 = 0; var14 < var4.length; ++var14) {
  183.                   if (var5[var14] != null) {
  184.                      ClassFile.outDir = var5[var14];
  185.                   }
  186.  
  187.                   if (var4[var14] != null) {
  188.                      var4[var14].genDrop();
  189.                   }
  190.                }
  191.             }
  192.  
  193.             if (Switches.verbose) {
  194.                System.out.println(String.valueOf(String.valueOf("[total ").concat(String.valueOf(System.currentTimeMillis() - var1))).concat(String.valueOf("ms]")));
  195.             }
  196.  
  197.             printCount("error", Report.nerrors);
  198.             printCount("warning", Report.nwarnings);
  199.             System.exit(Report.nerrors > 0 ? -1 : 0);
  200.          } catch (Exception var16) {
  201.             errorMsg();
  202.             throw var16;
  203.          }
  204.       }
  205.  
  206.    }
  207.  
  208.    static void errorMsg() {
  209.       System.out.println("\n\nAn exception has occurred in the compiler.");
  210.       System.out.println("Please file a bug report by sending your program and the following diagnostic to");
  211.       System.out.println("espresso@ira.uka.de.\n\n   Thank you.\n");
  212.    }
  213.  
  214.    static void printCount(String var0, int var1) {
  215.       if (var1 != 0) {
  216.          System.out.print(var1);
  217.          System.out.println(String.valueOf(String.valueOf(" ").concat(String.valueOf(var0))).concat(String.valueOf(var1 == 1 ? "" : "s")));
  218.       }
  219.  
  220.    }
  221.  
  222.    static TopLevel parse(String var0) {
  223.       long var1 = System.currentTimeMillis();
  224.       FileInputStream var3 = openIn(var0);
  225.       if (var3 != null) {
  226.          if (Switches.verbose) {
  227.             System.out.print(String.valueOf(String.valueOf("[parsing ").concat(String.valueOf(var0))).concat(String.valueOf(" ")));
  228.             System.out.flush();
  229.             someFiles = true;
  230.          }
  231.  
  232.          Report.open(var0);
  233.          Scanner var4 = new Scanner(var3);
  234.          Parser var5 = new Parser(var4);
  235.          ASTS var6 = var5.compilationUnit();
  236.  
  237.          try {
  238.             var3.close();
  239.          } catch (IOException var8) {
  240.          }
  241.  
  242.          Report.close();
  243.          if (Switches.verbose) {
  244.             System.out.println(String.valueOf(System.currentTimeMillis() - var1).concat(String.valueOf("ms]")));
  245.          }
  246.  
  247.          return new TopLevel(var6, Report.filename);
  248.       } else {
  249.          return null;
  250.       }
  251.    }
  252.  
  253.    static FileInputStream openIn(String var0) {
  254.       try {
  255.          File var1 = new File(var0);
  256.          return var1 == null ? null : new FileInputStream(var1);
  257.       } catch (IOException var3) {
  258.          Report.error(Report.noPos, String.valueOf("can't read: ").concat(String.valueOf(var0)));
  259.          return null;
  260.       }
  261.    }
  262.  
  263.    public Main() {
  264.    }
  265. }
  266.