comparison sema/ScopeCheck.d @ 158:57b0b4464a0b

Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
author Anders Johnsen <skabet@gmail.com>
date Tue, 22 Jul 2008 00:33:58 +0200
parents a14ac9e5c858
children 7982eb63c0eb
comparison
equal deleted inserted replaced
157:bb01c1dc452a 158:57b0b4464a0b
78 { 78 {
79 case ExpType.Identifier: 79 case ExpType.Identifier:
80 auto target = cast(Identifier)m.target; 80 auto target = cast(Identifier)m.target;
81 auto child = m.child; 81 auto child = m.child;
82 auto st = target.getSymbol; 82 auto st = target.getSymbol;
83 auto res = st.findMember(child.get); 83 auto res = st.findMembers(child.get);
84 84
85 if(!res) 85 if(!res.length)
86 messages.report(MissingMember, m.loc) 86 messages.report(MissingMember, m.loc)
87 .arg(st.type.name) 87 .arg(st.type.name)
88 .arg(target.get) 88 .arg(target.get)
89 .arg(child.get); 89 .arg(child.get);
90 else 90 else
91 internalCheckProtection(res, child); 91 internalCheckProtection(res[0], child);
92 92
93 return res; 93 return res.length ? res[0] : null;
94 case ExpType.MemberReference: 94 case ExpType.MemberReference:
95 Symbol s = internalVisitMemberRef(cast(MemberReference)m.target); 95 Symbol s = internalVisitMemberRef(cast(MemberReference)m.target);
96 if(!s) 96 if(!s)
97 return null; 97 return null;
98 auto target = cast(Identifier)m.target; 98 auto target = cast(Identifier)m.target;
99 auto child = m.child; 99 auto child = m.child;
100 auto res = s.findMember(child.get); 100 auto res = s.findMembers(child.get);
101 101
102 if(!res) 102 if(!res.length)
103 messages.report(MissingMember, m.loc) 103 messages.report(MissingMember, m.loc)
104 .arg(s.type.name) 104 .arg(s.type.name)
105 .arg(s.getFQN) 105 .arg(target.get)
106 .arg(child.get); 106 .arg(child.get);
107 else 107 else
108 internalCheckProtection(res, child); 108 internalCheckProtection(res[0], child);
109 109
110 return res; 110 return res.length ? res[0] : null;
111 } 111 }
112 } 112 }
113 113
114 override void visitExp(Exp exp) 114 override void visitExp(Exp exp)
115 { 115 {