From 43eaf5cb6424932f48e4fef582d855c56e6f7291 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Wed, 13 Aug 2003 13:17:01 +0000 Subject: *** empty log message *** --- sources/scalac/ast/parser/Parser.java | 2 ++ sources/scalac/typechecker/Analyzer.java | 14 ++++++++------ sources/scalac/typechecker/DeSugarize.java | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java index c58c8af46e..8c01c53b41 100644 --- a/sources/scalac/ast/parser/Parser.java +++ b/sources/scalac/ast/parser/Parser.java @@ -1841,6 +1841,8 @@ public class Parser implements Tokens { Tree[] templateBody() { accept(LBRACE); Tree[] body = templateStatSeq(); + if (body.length == 0) + body = new Tree[]{Tree.Empty}; accept(RBRACE); return body; } diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java index d8bcef64f2..91be325a8a 100644 --- a/sources/scalac/typechecker/Analyzer.java +++ b/sources/scalac/typechecker/Analyzer.java @@ -1022,7 +1022,11 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { owntype = Type.ErrorType; } } else { - ((ValDef) tree).rhs = rhs = transform(rhs, EXPRmode); + if ((sym.flags & CASEACCESSOR) != 0) { + rhs.type = rhs.symbol().type(); + } else { + ((ValDef) tree).rhs = rhs = transform(rhs, EXPRmode); + } owntype = rhs.type; } popContext(); @@ -1429,12 +1433,13 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { qual = infer.mkTypeApply(qual, tparams, restype, Symbol.type(tparams)); uninst = tparams; } - Symbol sym = typeToConstructor(tree.pos, qual.type.lookup(name)); + Symbol sym = qual.type.lookup(name); if (sym.kind == NONE) { //System.out.println(qual.type + " has members " + qual.type.members());//DEBUG return error(tree.pos, decode(name) + " is not a member of " + qual.type.widen()); } else { + sym = typeToConstructor(tree.pos, sym); checkAccessible(tree.pos, sym, qual); sym.flags |= ACCESSED; if (!TreeInfo.isSelf(qual, context.enclClass.owner)) @@ -1835,10 +1840,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { Tree rhs1 = rhs; if (rhs != Tree.Empty) { pushContext(tree, sym, context.scope); - if ((sym.flags & CASEACCESSOR) != 0) - rhs1.type = rhs1.symbol().type(); - else - rhs1 = transform(rhs, EXPRmode, tpe1.type); + rhs1 = transform(rhs, EXPRmode, tpe1.type); popContext(); } sym.flags |= LOCKED; diff --git a/sources/scalac/typechecker/DeSugarize.java b/sources/scalac/typechecker/DeSugarize.java index 2a82dd0586..87cea76d13 100644 --- a/sources/scalac/typechecker/DeSugarize.java +++ b/sources/scalac/typechecker/DeSugarize.java @@ -714,7 +714,7 @@ public class DeSugarize implements Kinds, Modifiers { //vparam.symbol().initialize(); ts.append( make.ValDef( - vparam.pos, CASEACCESSOR, vparam.name, vparam.tpe, + vparam.pos, CASEACCESSOR, vparam.name, Tree.Empty, make.Ident(vparam.pos, vparam.name) .setSymbol(vparam.symbol()))); } -- cgit v1.2.3