summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Zenger <mzenger@gmail.com>2003-02-20 11:52:18 +0000
committerMatthias Zenger <mzenger@gmail.com>2003-02-20 11:52:18 +0000
commit7a1fdc1453969737562d0790f8437627d4ae62c9 (patch)
treea5874e3cc39b55bfa3e6781ebec1ea668f51713b
parent942bac76c39d65966af344abad03862a122b5d81 (diff)
downloadscala-7a1fdc1453969737562d0790f8437627d4ae62c9.tar.gz
scala-7a1fdc1453969737562d0790f8437627d4ae62c9.tar.bz2
scala-7a1fdc1453969737562d0790f8437627d4ae62c9.zip
Ported pattern matcher.
-rw-r--r--config/list/compiler.lst4
-rw-r--r--sources/scalac/Global.java4
-rw-r--r--sources/scalac/PhaseRepository.java9
-rw-r--r--sources/scalac/transformer/PatternMatcher.java2
-rw-r--r--sources/scalac/transformer/TransMatch.java5
-rw-r--r--sources/scalac/transformer/matching/PatternMatcher.java2
6 files changed, 13 insertions, 13 deletions
diff --git a/config/list/compiler.lst b/config/list/compiler.lst
index ef484d069c..a20dd6a5aa 100644
--- a/config/list/compiler.lst
+++ b/config/list/compiler.lst
@@ -83,6 +83,10 @@ transformer/LambdaLiftPhase.java
transformer/OwnerTransformer.java
transformer/UnCurry.java
transformer/UnCurryPhase.java
+transformer/PatternMatcher.java
+transformer/PatternNode.java
+transformer/TransMatch.java
+transformer/TransMatchPhase.java
typechecker/Analyzer.java
typechecker/AnalyzerPhase.java
diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java
index cee6072dc8..2db39f2b89 100644
--- a/sources/scalac/Global.java
+++ b/sources/scalac/Global.java
@@ -177,9 +177,9 @@ public class Global {
/*
if (optimize) {
phases.add(PHASE.OPTIMIZE);
- }
+ } */
phases.add(PHASE.TRANSMATCH);
- */
+
//phases.add(PHASE.LAMBDALIFT);
phases.add(PHASE.EXPLICITOUTER);
phases.add(PHASE.ADDACCESSORS);
diff --git a/sources/scalac/PhaseRepository.java b/sources/scalac/PhaseRepository.java
index 218decea03..378b6555e4 100644
--- a/sources/scalac/PhaseRepository.java
+++ b/sources/scalac/PhaseRepository.java
@@ -12,9 +12,7 @@ import scalac.ast.parser.ParserPhase;
import scalac.typechecker.AnalyzerPhase;
import scalac.typechecker.RefCheckPhase;
import scalac.transformer.UnCurryPhase;
-/*
import scalac.transformer.TransMatchPhase;
-*/
import scalac.transformer.LambdaLiftPhase;
import scalac.transformer.ExplicitOuterClassesPhase;
import scalac.transformer.AddAccessorsPhase;
@@ -47,9 +45,9 @@ public class PhaseRepository {
REFCHECK = new RefCheckPhase(),
UNCURRY = new UnCurryPhase(),
/*
- OPTIMIZE = new OptimizePhase(),
+ OPTIMIZE = new OptimizePhase(), */
TRANSMATCH = new TransMatchPhase(),
- */
+
LAMBDALIFT = new LambdaLiftPhase(),
EXPLICITOUTER = new ExplicitOuterClassesPhase(),
ADDACCESSORS = new AddAccessorsPhase(),
@@ -75,9 +73,8 @@ public class PhaseRepository {
public final RefCheckPhase REFCHECK;
public final UnCurryPhase UNCURRY;
/*
- public final OptimizePhase OPTIMIZE;
+ public final OptimizePhase OPTIMIZE; */
public final TransMatchPhase TRANSMATCH;
- */
public final LambdaLiftPhase LAMBDALIFT;
public final ExplicitOuterClassesPhase EXPLICITOUTER;
public final AddAccessorsPhase ADDACCESSORS;
diff --git a/sources/scalac/transformer/PatternMatcher.java b/sources/scalac/transformer/PatternMatcher.java
index b706419137..5b5d932954 100644
--- a/sources/scalac/transformer/PatternMatcher.java
+++ b/sources/scalac/transformer/PatternMatcher.java
@@ -801,7 +801,7 @@ public class PatternMatcher {
FAIL_N).setType(typeOf(failMethod)).setSymbol(failMethod),
new Tree[]{gen.mkType(pos, type)})
.setType(((Type.PolyType) typeOf(failMethod)).result.subst(
- failMethod.typeParams(),
+ typeOf(failMethod).typeParams(),
new Type[]{type})),
new Tree[]{
make.Literal(pos, unit.toString()).setType(defs.STRING_TYPE),
diff --git a/sources/scalac/transformer/TransMatch.java b/sources/scalac/transformer/TransMatch.java
index 5f80e0ac95..5f8f005c2e 100644
--- a/sources/scalac/transformer/TransMatch.java
+++ b/sources/scalac/transformer/TransMatch.java
@@ -45,15 +45,14 @@ public class TransMatch extends OwnerTransformer {
}
protected Tree transform(Tree root, CaseDef[] cases, Type restpe) {
- /* PatternMatcher pm = new PatternMatcher(unit, infer, currentOwner, root, restpe);
+ PatternMatcher pm = new PatternMatcher(unit, infer, currentOwner, root, restpe);
for (int i = 0; i < cases.length; i++)
pm.enter(cases[i]);
if (global.log()) {
System.out.println("[log " + descr.name() + "] internal pattern matching structure");
pm.print();
}
- return pm.toTree(); */
- return null;
+ return pm.toTree();
}
public Tree transform(Tree tree) {
diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java
index b706419137..5b5d932954 100644
--- a/sources/scalac/transformer/matching/PatternMatcher.java
+++ b/sources/scalac/transformer/matching/PatternMatcher.java
@@ -801,7 +801,7 @@ public class PatternMatcher {
FAIL_N).setType(typeOf(failMethod)).setSymbol(failMethod),
new Tree[]{gen.mkType(pos, type)})
.setType(((Type.PolyType) typeOf(failMethod)).result.subst(
- failMethod.typeParams(),
+ typeOf(failMethod).typeParams(),
new Type[]{type})),
new Tree[]{
make.Literal(pos, unit.toString()).setType(defs.STRING_TYPE),