Mercurial > projects > dang
diff sema/ScopeCheck.d @ 168:7982eb63c0eb
Some changes to get function overloading to work. Also class inherit works now - to some extend. needs vtables and all the complex stuff of it.
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Thu, 24 Jul 2008 12:06:48 +0200 |
parents | 57b0b4464a0b |
children | 01c2c49775ef |
line wrap: on
line diff
--- a/sema/ScopeCheck.d Tue Jul 22 21:34:53 2008 +0200 +++ b/sema/ScopeCheck.d Thu Jul 24 12:06:48 2008 +0200 @@ -39,7 +39,7 @@ if (d.env.parentFunction !is null) while( d.env.parentFunction.env !is env) { - if (d.env.enclosing.find(d.identifier.get).env == env) + if (d.env.enclosing.find(d.identifier.get)[0].env == env) messages.report(CannotRedeclare, d.identifier.loc) .arg(d.identifier.get); env = env.enclosing; @@ -74,40 +74,31 @@ private Symbol internalVisitMemberRef(MemberReference m) { + Symbol visitRef(MemberReference m, Identifier target, Symbol st) + { + auto child = m.child; + auto res = st.findMembers(child.get); + + if(!res.length) + messages.report(MissingMember, m.loc) + .arg(st.type.name) + .arg(target.get) + .arg(child.get); + else + internalCheckProtection(res[0], child); + + return res.length ? res[0] : null; + } switch(m.target.expType) { case ExpType.Identifier: - auto target = cast(Identifier)m.target; - auto child = m.child; - auto st = target.getSymbol; - auto res = st.findMembers(child.get); - - if(!res.length) - messages.report(MissingMember, m.loc) - .arg(st.type.name) - .arg(target.get) - .arg(child.get); - else - internalCheckProtection(res[0], child); - - return res.length ? res[0] : null; + return visitRef(m, cast(Identifier)m.target, + (cast(Identifier)m.target).getSymbol); case ExpType.MemberReference: Symbol s = internalVisitMemberRef(cast(MemberReference)m.target); if(!s) return null; - auto target = cast(Identifier)m.target; - auto child = m.child; - auto res = s.findMembers(child.get); - - if(!res.length) - messages.report(MissingMember, m.loc) - .arg(s.type.name) - .arg(target.get) - .arg(child.get); - else - internalCheckProtection(res[0], child); - - return res.length ? res[0] : null; + return visitRef(m, cast(Identifier)m.target, s); } } @@ -118,7 +109,7 @@ { if (exp.env.findType((cast(Identifier)exp).get) is null) internalCheckProtection( - exp.env.find((cast(Identifier)exp).get).sym, + exp.env.find((cast(Identifier)exp).get)[0].sym, cast(Identifier)exp); }