summaryrefslogtreecommitdiff
path: root/sources/scalac/typechecker/AnalyzerPhase.java
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-02-13 14:41:36 +0000
committerMartin Odersky <odersky@gmail.com>2003-02-13 14:41:36 +0000
commit4177daab2f54bdb20c71f623296a8bb32616fd12 (patch)
tree23f08b43f3758e825d5965b336030603a65bbcf7 /sources/scalac/typechecker/AnalyzerPhase.java
parent33d6e170c97ca7b2f991896a0729941a7240b6d6 (diff)
downloadscala-4177daab2f54bdb20c71f623296a8bb32616fd12.tar.gz
scala-4177daab2f54bdb20c71f623296a8bb32616fd12.tar.bz2
scala-4177daab2f54bdb20c71f623296a8bb32616fd12.zip
Initial version.
Diffstat (limited to 'sources/scalac/typechecker/AnalyzerPhase.java')
-rw-r--r--sources/scalac/typechecker/AnalyzerPhase.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/sources/scalac/typechecker/AnalyzerPhase.java b/sources/scalac/typechecker/AnalyzerPhase.java
new file mode 100644
index 0000000000..9542da51e3
--- /dev/null
+++ b/sources/scalac/typechecker/AnalyzerPhase.java
@@ -0,0 +1,103 @@
+/* ____ ____ ____ ____ ______ *\
+** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala **
+** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL **
+** /_____/\____/\___/\____/____/ **
+**
+** $Id$
+\* */
+
+package scalac.typechecker;
+
+import scalac.*;
+import scalac.util.*;
+import scalac.ast.*;
+import scalac.symtab.*;
+import scalac.checkers.*;
+import java.util.HashMap;
+import java.util.ArrayList;
+
+public class AnalyzerPhase extends PhaseDescriptor {
+
+ /* final */ Context startContext;
+ HashMap/*<Unit,Context>*/ contexts = new HashMap();
+ ArrayList/*<Unit>*/ newSources = new ArrayList();
+
+ public void initialize(Global global, int id) {
+ super.initialize(global, id);
+ Definitions definitions = global.definitions;
+ this.startContext = new Context(
+ Tree.Empty,
+ definitions.ROOT_CLASS,
+ definitions.ROOT_CLASS.members(),
+ Context.NONE);
+ this.startContext.enclClass = this.startContext;
+
+ if (!global.noimports) {
+ TreeFactory make = global.make;
+
+ Tree java = make.Ident(Position.NOPOS, Names.java)
+ .setSymbol(definitions.JAVA)
+ .setType(Type.singleType(definitions.ROOT_TYPE, definitions.JAVA));
+ Tree javalang = make.Select(Position.NOPOS, java, Names.lang)
+ .setSymbol(definitions.JAVALANG)
+ .setType(Type.singleType(java.type, definitions.JAVALANG));
+ Tree importjavalang = make.Import(
+ Position.NOPOS, javalang, new Name[]{Names.WILDCARD})
+ .setSymbol(definitions.JAVALANG)
+ .setType(definitions.UNIT_TYPE);
+ startContext.imports = new ImportList(
+ importjavalang, startContext.scope, startContext.imports);
+
+ Tree scala = make.Ident(Position.NOPOS, Names.scala)
+ .setSymbol(definitions.SCALA)
+ .setType(Type.singleType(definitions.ROOT_TYPE, definitions.SCALA));
+ Tree importscala = make.Import(
+ Position.NOPOS, scala, new Name[]{Names.WILDCARD})
+ .setSymbol(definitions.SCALA)
+ .setType(definitions.UNIT_TYPE);
+ startContext.imports = new ImportList(
+ importscala, new Scope(), startContext.imports);
+
+ scala = make.Ident(Position.NOPOS, Names.scala)
+ .setSymbol(definitions.SCALA)
+ .setType(scala.type);
+ Symbol scalaPredefSym = definitions.getModule(Names.scala_Predef);
+ Tree scalaPredef = make.Select(Position.NOPOS, scala, Names.Predef)
+ .setSymbol(scalaPredefSym)
+ .setType(Type.singleType(scala.type, scalaPredefSym));
+
+ Tree importscalaPredef = make.Import(
+ Position.NOPOS, scalaPredef, new Name[]{Names.WILDCARD})
+ .setSymbol(scalaPredefSym)
+ .setType(definitions.UNIT_TYPE);
+ startContext.imports = new ImportList(
+ importscalaPredef, new Scope(), startContext.imports);
+ }
+ }
+
+ public String name() {
+ return "analyze";
+ }
+
+ public String description () {
+ return "name and type analysis";
+ }
+
+ public String taskDescription() {
+ return "type checking";
+ }
+
+ public Phase createPhase(Global global) {
+ return new Analyzer(global, this);
+ }
+
+ public Checker[] postCheckers(Global global) {
+ return new Checker[] {
+ /* todo: uncomment
+ new CheckSymbols(global),
+ new CheckTypes(global),
+ new CheckOwners(global)
+ */
+ };
+ }
+}