From 7b6a46d75a034d7aeebcaf94c8a6d453a40ed34f Mon Sep 17 00:00:00 2001 From: paltherr Date: Mon, 19 May 2003 16:44:34 +0000 Subject: - Moved isGlobalModule method from RefCheck int... - Moved isGlobalModule method from RefCheck into Symbol Added generation - of module setter method in RefCheck --- sources/scalac/symtab/Symbol.java | 7 +++++++ sources/scalac/typechecker/RefCheck.java | 25 +++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) (limited to 'sources/scalac') diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index a259e0d62f..1b3ee71659 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -238,6 +238,13 @@ public abstract class Symbol implements Modifiers, Kinds { return kind == VAL && (flags & MODUL) != 0; } + /** Does this symbol denote a global module? */ + public final boolean isGlobalModule() { + return isModule() && (owner().isPackage() + //|| owner().isGlobalModule() // add later? translation does not work (yet?) + ); + } + /** Does this symbol denote a module? */ public final boolean isModuleClass() { return kind == CLASS && (flags & MODUL) != 0; diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java index 3b5f7220e5..c40341c1d0 100644 --- a/sources/scalac/typechecker/RefCheck.java +++ b/sources/scalac/typechecker/RefCheck.java @@ -121,14 +121,6 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { return stats; } - private boolean isGlobalModule(Symbol sym) { - return - sym.isModule() && - (sym.owner().isPackage() - //|| isGlobalModule(sym.owner().module()) // add later? translation does not work (yet?) - ); - } - private Tree[] transformModule(Tree tree, int mods, Name name, Tree tpe, Tree.Template templ) { Symbol sym = tree.symbol(); Tree cdef = make.ClassDef( @@ -145,7 +137,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { sym.type().prefix(), sym.moduleClass(), Tree.EMPTY_ARRAY); - if (isGlobalModule(sym)) { + if (sym.isGlobalModule()) { Tree vdef = gen.ValDef(sym, alloc); return new Tree[]{cdef, vdef}; } else { @@ -172,7 +164,20 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { sym.updateInfo(Type.PolyType(Symbol.EMPTY_ARRAY, sym.type())); sym.flags |= STABLE; Tree ddef = gen.DefDef(sym, body); - return new Tree[]{cdef, vdef, ddef}; + + // def m_eq(m: T): Unit = { m$ = m } + Name m_eqname = name.append(Names._EQ); + Symbol m_eq = new TermSymbol( + tree.pos, m_eqname, sym.owner(), PRIVATE | SYNTHETIC); + Symbol m_eqarg = new TermSymbol(tree.pos, name, m_eq, 0) + .setType(sym.type()); + m_eq.setInfo( + Type.MethodType(new Symbol[] {m_eqarg}, defs.UNIT_TYPE)); + Tree m_eqdef = gen.DefDef(m_eq, + gen.Assign(gen.mkRef(tree.pos, mvar), gen.Ident(m_eqarg))); + sym.owner().members().enterOrOverload(m_eq); + + return new Tree[]{cdef, vdef, ddef, m_eqdef}; } } -- cgit v1.2.3