summaryrefslogtreecommitdiff
path: root/sources/meta/scalac
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-04-14 14:35:31 +0000
committerpaltherr <paltherr@epfl.ch>2003-04-14 14:35:31 +0000
commit793f61a0a24f24eb710adfa40396b3ee9eec6433 (patch)
tree03a0388779a1bf8696be1b50544b103b13a4842f /sources/meta/scalac
parente38818336a932006340aca4bb3579e875b291689 (diff)
downloadscala-793f61a0a24f24eb710adfa40396b3ee9eec6433.tar.gz
scala-793f61a0a24f24eb710adfa40396b3ee9eec6433.tar.bz2
scala-793f61a0a24f24eb710adfa40396b3ee9eec6433.zip
- Added AbstractTreeExpander.java
- Added AbstractTreeCaseExpander.java - Added AbstractTreeMethodExpander.java
Diffstat (limited to 'sources/meta/scalac')
-rw-r--r--sources/meta/scalac/ast/AbstractTreeCaseExpander.java62
-rw-r--r--sources/meta/scalac/ast/AbstractTreeExpander.java34
-rw-r--r--sources/meta/scalac/ast/AbstractTreeMethodExpander.java32
3 files changed, 128 insertions, 0 deletions
diff --git a/sources/meta/scalac/ast/AbstractTreeCaseExpander.java b/sources/meta/scalac/ast/AbstractTreeCaseExpander.java
new file mode 100644
index 0000000000..aa026ed3cf
--- /dev/null
+++ b/sources/meta/scalac/ast/AbstractTreeCaseExpander.java
@@ -0,0 +1,62 @@
+/* ____ ____ ____ ____ ______ *\
+** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala **
+** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
+** /_____/\____/\___/\____/____/ **
+\* */
+
+// $Id$
+
+package meta.scalac.ast;
+
+/** A base class for expanders that generate switches on tree nodes. */
+public abstract class AbstractTreeCaseExpander extends AbstractTreeExpander {
+
+ //########################################################################
+ // Public Constructors
+
+ public AbstractTreeCaseExpander() {
+ writer.importType(tree.t_Debug);
+ }
+
+ //########################################################################
+ // Public Methods
+
+ public void printTreeSwitch() {
+ writer.println("switch (tree) {");
+ writer.println();
+ printTreeCases();
+ writer.println("default:");
+ writer.indent();
+ writer.print("throw ").print(tree.t_Debug).
+ println(".abort(\"unknown tree\", tree);");
+ writer.undent();
+ writer.println("}");
+ }
+
+ public void printTreeCases() {
+ for (int i = 0; i < tree.nodes.length; i++) {
+ printTreeCase(tree.nodes[i]);
+ writer.println();
+ }
+ }
+
+ public void printTreeCase(TreeNode node) {
+ printTreeCaseHeader(node);
+ writer.println().indent();
+ printTreeCaseBody(node);
+ printTreeCaseFooter(node);
+ writer.undent();
+ }
+
+ public void printTreeCaseHeader(TreeNode node) {
+ node.printCase(writer, false);
+ }
+
+ public abstract void printTreeCaseBody(TreeNode node);
+
+ public void printTreeCaseFooter(TreeNode node) {
+ // do nothing
+ }
+
+ //########################################################################
+}
diff --git a/sources/meta/scalac/ast/AbstractTreeExpander.java b/sources/meta/scalac/ast/AbstractTreeExpander.java
new file mode 100644
index 0000000000..e7a162d7fe
--- /dev/null
+++ b/sources/meta/scalac/ast/AbstractTreeExpander.java
@@ -0,0 +1,34 @@
+/* ____ ____ ____ ____ ______ *\
+** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala **
+** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
+** /_____/\____/\___/\____/____/ **
+\* */
+
+// $Id$
+
+package meta.scalac.ast;
+
+import meta.java.AbstractJavaExpander;
+
+/** A base class for expanders that handle tree nodes. */
+public abstract class AbstractTreeExpander extends AbstractJavaExpander {
+
+ //########################################################################
+ // Public Fields
+
+ public final Tree tree;
+
+ //########################################################################
+ // Public Constructors
+
+ public AbstractTreeExpander() {
+ this.tree = new Tree();
+ writer.importFrom(tree.t_Tree);
+ for (int i = 0; i < tree.nodes.length; i++)
+ if (tree.nodes[i].fields != null)
+ for (int j = 0; j < tree.nodes[i].fields.length; j++)
+ writer.importType(tree.nodes[i].fields[j].type);
+ }
+
+ //########################################################################
+}
diff --git a/sources/meta/scalac/ast/AbstractTreeMethodExpander.java b/sources/meta/scalac/ast/AbstractTreeMethodExpander.java
new file mode 100644
index 0000000000..78000ccb94
--- /dev/null
+++ b/sources/meta/scalac/ast/AbstractTreeMethodExpander.java
@@ -0,0 +1,32 @@
+/* ____ ____ ____ ____ ______ *\
+** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala **
+** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
+** /_____/\____/\___/\____/____/ **
+\* */
+
+// $Id$
+
+package meta.scalac.ast;
+
+/** A base class for expanders that generate one method per tree node. */
+public abstract class AbstractTreeMethodExpander extends AbstractTreeExpander {
+
+ //########################################################################
+ // Public Methods
+
+ public void printTreeMethods() {
+ for (int i = 0; i < tree.nodes.length; i++) {
+ if (tree.nodes[i].fields != null) printTreeMethod(tree.nodes[i]);
+ writer.println();
+ }
+ }
+
+ public abstract void printTreeMethod(TreeNode node);
+
+ public void printTreeMethodHeader(TreeNode node, String prefix) {
+ writer.print("public " + node.name + " " + node.name + "(");
+ node.printParams(writer, prefix).print(")");
+ }
+
+ //########################################################################
+}