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);
         }