Mercurial > projects > dang
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 { |