diff options
author | Martin Odersky <odersky@gmail.com> | 2003-02-13 14:41:36 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2003-02-13 14:41:36 +0000 |
commit | 4177daab2f54bdb20c71f623296a8bb32616fd12 (patch) | |
tree | 23f08b43f3758e825d5965b336030603a65bbcf7 /sources/scalac/typechecker/AnalyzerPhase.java | |
parent | 33d6e170c97ca7b2f991896a0729941a7240b6d6 (diff) | |
download | scala-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.java | 103 |
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) + */ + }; + } +} |