From 7a1fdc1453969737562d0790f8437627d4ae62c9 Mon Sep 17 00:00:00 2001 From: Matthias Zenger Date: Thu, 20 Feb 2003 11:52:18 +0000 Subject: Ported pattern matcher. --- config/list/compiler.lst | 4 ++++ sources/scalac/Global.java | 4 ++-- sources/scalac/PhaseRepository.java | 9 +++------ sources/scalac/transformer/PatternMatcher.java | 2 +- sources/scalac/transformer/TransMatch.java | 5 ++--- sources/scalac/transformer/matching/PatternMatcher.java | 2 +- 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), -- cgit v1.2.3