summaryrefslogtreecommitdiff
path: root/sources/meta/GenerateAll.java
blob: d522fbcb58f08759e047bdcfaf1f7f76e14203b4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*     ____ ____  ____ ____  ______                                     *\
**    / __// __ \/ __// __ \/ ____/    SOcos COmpiles Scala             **
**  __\_ \/ /_/ / /__/ /_/ /\_ \       (c) 2002, LAMP/EPFL              **
** /_____/\____/\___/\____/____/                                        **
\*                                                                      */

// $Id$

package meta;

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.PrintStream;
import java.io.IOException;

import meta.util.AbstractMain;
import meta.util.AbstractFileExpander;
import meta.util.TextExpander;
import meta.util.TextWriter;

/** A program that invokes all file generators. */
public class GenerateAll extends AbstractMain {

    //########################################################################
    // Public Constants

    public static final AbstractFileExpander[] expanders = {
        new meta.scala.MetaFunction(0),
        new meta.scala.MetaFunction(1),
        new meta.scala.MetaFunction(2),
        new meta.scala.MetaFunction(3),
        new meta.scala.MetaFunction(4),
        new meta.scala.MetaFunction(5),
        new meta.scala.MetaFunction(6),
        new meta.scala.MetaFunction(7),
        new meta.scala.MetaFunction(8),
        new meta.scala.MetaFunction(9),
        new meta.scala.MetaTuple(1),
        new meta.scala.MetaTuple(2),
        new meta.scala.MetaTuple(3),
        new meta.scala.MetaTuple(4),
        new meta.scala.MetaTuple(5),
        new meta.scala.MetaTuple(6),
        new meta.scala.MetaTuple(7),
        new meta.scala.MetaTuple(8),
        new meta.scala.MetaTuple(9),
        new meta.scalac.ast.MetaTree(),
        new meta.scalac.ast.MetaTreeFactory(),
        new meta.scalac.ast.MetaDefaultTreeFactory(),
        new meta.scalac.ast.MetaTreeCopier(),
        new meta.scalac.ast.MetaStrictTreeCopier(),
        new meta.scalac.ast.MetaLazyTreeCopier(),
        new meta.scalac.ast.MetaTraverser(),
        new meta.scalac.ast.MetaTransformer(),
        new meta.scalac.checkers.MetaCheckTreeNodes(),
    };

    //########################################################################
    // Public Functions

    public static void usage(PrintStream out) {
        out.println("usage: " + script() + " <outputdir> [<logfile>]");
    }

    public static void main(String[] args) throws Exception {
        if (args.length < 1 || 2 < args.length) {
            usage(System.err);
            throw abort();
        }
        int errors = 0;
        File root = new File(args[0]);
        PrintWriter filelist = args.length <= 1 ? null :
            new PrintWriter(new BufferedWriter(new FileWriter(args[1])));
        for (int i = 0; i < expanders.length; i++) {
            File source = expanders[i].getSourceFile(root);
            File target = expanders[i].getTargetFile(root);
            System.out.println("Generating file " + target);
            if (filelist != null) {filelist.println(target);filelist.flush();}
            try {
                TextWriter writer = expanders[i].getTextWriter();
                TextExpander expander = new TextExpander(writer, expanders[i]);
                expander.expandText(source);
                errors += expander.getErrorCount();
                target.delete();
                FileWriter output = new FileWriter(target);
                output.write(writer.toString());
                output.close();
                target.setReadOnly();
            } catch (IOException exception) {
                throw abort(exception);
            }
        }
        if (errors > 0) throw abort();
    }

    //########################################################################
}