annotate sema/TypeCheck.d @ 176:dc9bf56b7ace

Can now use & as a unary operator and take an AddressOf
author Anders Johnsen <skabet@gmail.com>
date Thu, 24 Jul 2008 23:03:18 +0200
parents c8e26556c24d
children 491b5fc4782a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
92
771ac63898e2 A few better parser errors plus renaming most of the sema classes to match that they do now. Some have changes a lot.
Anders Johnsen <skabet@gmail.com>
parents: 88
diff changeset
1 module sema.TypeCheck;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
2
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
3 import sema.Visitor,
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
4 sema.Symbol,
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
5 sema.DType;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
6
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
7 import tango.io.Stdout,
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
8 Integer = tango.text.convert.Integer;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
9
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
10 import basic.SourceLocation,
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
11 basic.Message;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
12
92
771ac63898e2 A few better parser errors plus renaming most of the sema classes to match that they do now. Some have changes a lot.
Anders Johnsen <skabet@gmail.com>
parents: 88
diff changeset
13 class TypeCheck : Visitor!(void)
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
14 {
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
15 this(MessageHandler messages)
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
16 {
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
17 this.messages = messages;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
18 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
19
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
20 override void visitBinaryExp(BinaryExp exp)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
21 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
22 super.visitBinaryExp(exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
23
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
24 if(!(exp.left.type is exp.right.type))
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
25 {
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
26 if (!exp.right.type.hasImplicitConversionTo(exp.left.type) &&
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
27 !exp.left.type.hasImplicitConversionTo(exp.right.type))
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
28 messages.report(InvalidImplicitCast, exp.loc)
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
29 .arg(exp.right.type.toString)
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
30 .arg(exp.left.type.toString);
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
31 else
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
32 {
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
33 CastExp castExp;
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
34 if(exp.left.type.isReal && exp.right.type.isReal)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
35 if(exp.left.type.byteSize > exp.right.type.byteSize)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
36 castExp = new CastExp(
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
37 SLoc.Invalid,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
38 new Identifier(exp.left.type.name),
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
39 exp.right);
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
40 else
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
41 castExp = new CastExp(
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
42 SLoc.Invalid,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
43 new Identifier(exp.right.type.name),
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
44 exp.left);
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
45 else if(exp.left.type.isReal || exp.right.type.isReal)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
46 if(exp.left.type.isReal)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
47 castExp = new CastExp(
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
48 SLoc.Invalid,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
49 new Identifier(exp.left.type.name),
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
50 exp.right);
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
51 else
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
52 castExp = new CastExp(
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
53 SLoc.Invalid,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
54 new Identifier(exp.right.type.name),
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
55 exp.left);
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
56 else
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
57 if(exp.left.type.byteSize > exp.right.type.byteSize)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
58 castExp = new CastExp(
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
59 SLoc.Invalid,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
60 new Identifier(exp.left.type.name),
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
61 exp.right);
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
62 else if(exp.left.type.byteSize > exp.right.type.byteSize)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
63 castExp = new CastExp(
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
64 SLoc.Invalid,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
65 new Identifier(exp.right.type.name),
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
66 exp.left);
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
67 else
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
68 castExp = new CastExp(
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
69 SLoc.Invalid,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
70 new Identifier(exp.left.type.name),
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
71 exp.right);
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
72
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
73
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
74 if(castExp)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
75 {
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
76 castExp.env = exp.env;
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
77 if(castExp.exp == exp.right)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
78 exp.right = castExp;
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
79 else
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
80 exp.left = castExp;
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
81
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
82 }
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
83 }
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
84 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
85 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
86
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
87 override void visitCallExp(CallExp exp)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
88 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
89 super.visitCallExp(exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
90
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
91 if (auto iden = cast(MemberReference)exp.exp)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
92 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
93 Symbol[] internalVisitMemberRef(MemberReference m)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
94 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
95 Symbol[] visitRef(MemberReference m, Identifier target, Symbol st)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
96 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
97 auto child = m.child;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
98 auto res = st.findMembers(child.get);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
99 return res;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
100 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
101 switch(m.target.expType)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
102 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
103 case ExpType.Identifier:
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
104 return visitRef(m, cast(Identifier)m.target,
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
105 (cast(Identifier)m.target).getSymbol);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
106 case ExpType.MemberReference:
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
107 Symbol[] s = internalVisitMemberRef(cast(MemberReference)m.target);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
108 if(s.length)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
109 return s;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
110 return visitRef(m, cast(Identifier)m.target, s[0]);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
111 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
112 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
113
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
114 Exp[] newArgs;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
115
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
116 Symbol[] methods = internalVisitMemberRef(iden);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
117
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
118 if (!methods.length)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
119 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
120 messages.report(NoMethodByName, iden.loc);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
121 return;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
122 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
123
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
124 Symbol sel = getBestMatch(exp.args, methods);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
125
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
126 if (sel)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
127 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
128 foreach (i, arg; exp.args)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
129 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
130 auto argType = sel.type.asFunction.params[i];
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
131 auto expType = arg.type;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
132 if (argType.byteSize != expType.byteSize)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
133 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
134 if (!expType.hasImplicitConversionTo(argType))
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
135 messages.report(InvalidImplicitCast, exp.loc)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
136 .arg(expType.toString)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
137 .arg(argType.toString);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
138
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
139 auto castExp = new CastExp(
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
140 SLoc.Invalid,
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
141 new Identifier(argType.name),
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
142 arg);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
143 castExp.env = iden.env;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
144 newArgs ~= castExp;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
145 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
146 else
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
147 newArgs ~= arg;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
148 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
149 exp.args = newArgs;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
150 exp.callSym = sel;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
151 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
152 else
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
153 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
154 messages.report(NoMachingMethod, exp.loc);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
155 foreach ( i, s ; methods )
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
156 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
157 messages.report(CandidateNr,
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
158 (cast(FuncDecl)s.decl).identifier.loc)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
159 .arg(Integer.toString(i+1));
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
160 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
161 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
162 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
163 else if (auto iden = cast(Identifier)exp.exp)
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
164 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
165 Exp[] newArgs;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
166
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
167 Symbol[] methods;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
169 foreach (decl ; iden.env.find(iden.get))
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
170 methods ~= decl.sym;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
171
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
172 if (!methods.length)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
173 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
174 messages.report(NoMethodByName, iden.loc);
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
175 return;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
176 }
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
177
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
178 Symbol sel = getBestMatch(exp.args, methods);
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
179
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
180 if (sel)
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
181 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
182 foreach (i, arg; exp.args)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
183 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
184 auto argType = sel.type.asFunction.params[i];
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
185 auto expType = arg.type;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
186 if (argType.byteSize != expType.byteSize)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
187 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
188 if (!expType.hasImplicitConversionTo(argType))
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
189 messages.report(InvalidImplicitCast, exp.loc)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
190 .arg(expType.toString)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
191 .arg(argType.toString);
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
192
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
193 auto castExp = new CastExp(
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
194 SLoc.Invalid,
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
195 new Identifier(argType.name),
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
196 arg);
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
197 castExp.env = iden.env;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
198 newArgs ~= castExp;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
199 }
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
200 else
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
201 newArgs ~= arg;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
202 }
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
203 exp.args = newArgs;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
204 exp.callSym = sel;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
205 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
206 else
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
207 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
208 messages.report(NoMachingMethod, exp.loc);
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
209 foreach ( i, s ; methods )
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
210 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
211 messages.report(CandidateNr,
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
212 (cast(FuncDecl)s.decl).identifier.loc)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
213 .arg(Integer.toString(i+1));
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
214 }
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
215 }
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
216 }
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
217 else
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
218 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
219 Exp[] newArgs;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
220
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
221 foreach(i, arg; exp.args)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
222 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
223 auto argType = exp.exp.type.asFunction.params[i];
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
224 auto expType = arg.type;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
225 if(argType.byteSize != expType.byteSize)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
226 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
227 if(!expType.hasImplicitConversionTo(argType))
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
228 messages.report(InvalidImplicitCast, exp.loc)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
229 .arg(expType.toString)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
230 .arg(argType.toString);
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
231
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
232 auto castExp = new CastExp(
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
233 SLoc.Invalid,
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
234 new Identifier(argType.name),
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
235 arg);
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
236 castExp.env = exp.exp.env;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
237 newArgs ~= castExp;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
238 }
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
239 else
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
240 newArgs ~= arg;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
241 }
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
242
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
243 exp.args = newArgs;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
244 }
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
245 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
246
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
247 override void visitNewExp(NewExp exp)
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
248 {
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
249 super.visitNewExp(exp);
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
250
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
251 Exp[] newArgs;
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
252
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
253 Symbol[] methods = exp.newType.getSymbol.findFunctionMembers("this");
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
254
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
255 if (!methods.length)
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
256 {
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
257 messages.report(NoConstructor, exp.newType.loc);
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
258 return;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
259 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
260
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
261 Symbol sel = getBestMatch(exp.c_args, methods);
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
262
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
263 if (sel)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
264 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
265 foreach (i, arg; exp.c_args)
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
266 {
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
267 auto argType = sel.type.asFunction.params[i];
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
268 auto expType = arg.type;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
269 if (argType.byteSize != expType.byteSize)
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
270 {
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
271 if (!expType.hasImplicitConversionTo(argType))
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
272 messages.report(InvalidImplicitCast, exp.loc)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
273 .arg(expType.toString)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
274 .arg(argType.toString);
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
275
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
276 auto castExp = new CastExp(
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
277 SLoc.Invalid,
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
278 new Identifier(argType.name),
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
279 arg);
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
280 castExp.env = exp.newType.env;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
281 newArgs ~= castExp;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
282 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
283 else
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
284 newArgs ~= arg;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
285 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
286 exp.c_args = newArgs;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
287 exp.callSym = sel;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
288 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
289 else
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
290 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
291 messages.report(NoMachingCon, exp.newType.loc);
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
292 foreach ( i, s ; methods )
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
293 {
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
294 messages.report(CandidateNr,
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
295 (cast(FuncDecl)s.decl).identifier.loc)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
296 .arg(Integer.toString(i+1));
158
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
297 }
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
298 }
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
299 }
57b0b4464a0b Parsing "new", putting it in AST and performs some tests on it. Eg. if the contructor exists and the params matches.
Anders Johnsen <skabet@gmail.com>
parents: 126
diff changeset
300
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
301 override void visitAssignExp(AssignExp exp)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
302 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
303 super.visitAssignExp(exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
304
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
305 auto identifierType = exp.identifier.type;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
306 auto expType = exp.exp.type;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
307
176
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 175
diff changeset
308 if(!identifierType.isSame(expType))
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
309 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
310 if(!expType.hasImplicitConversionTo(identifierType))
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
311 messages.report(InvalidImplicitCast, exp.loc)
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
312 .arg(expType.toString)
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
313 .arg(identifierType.toString);
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
314
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
315 auto castExp = new CastExp(
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 87
diff changeset
316 SLoc.Invalid,
107
189c049cbfcc Cleanup of codegen, better support for operators a few bugfixes
Anders Halager <halager@gmail.com>
parents: 92
diff changeset
317 new Identifier(identifierType.name),
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
318 exp.exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
319 castExp.env = exp.exp.env;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
320 exp.exp = castExp;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
321 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
322 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
323
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
324 override void visitReturnStmt(ReturnStmt stmt)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
325 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
326 super.visitReturnStmt(stmt);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
327
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
328 if(stmt.exp)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
329 {
80
682e20aa224f Pointers working now - big YAY
Anders Johnsen <skabet@gmail.com>
parents: 70
diff changeset
330 auto returnType = stmt.env.parentFunction.type.asFunction.returnType;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
331 auto expType = stmt.exp.type;
80
682e20aa224f Pointers working now - big YAY
Anders Johnsen <skabet@gmail.com>
parents: 70
diff changeset
332 if(returnType != expType)
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
333 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
334 if(!expType.hasImplicitConversionTo(returnType))
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
335 messages.report(InvalidImplicitCast, stmt.exp.loc)
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
336 .arg(expType.toString)
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
337 .arg(returnType.toString);
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
338
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
339 auto castExp = new CastExp(
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 87
diff changeset
340 SLoc.Invalid,
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
341 new Identifier(returnType.name),
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
342 stmt.exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
343 castExp.env = stmt.exp.env;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
344 stmt.exp = castExp;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
345 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
346 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
347 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
348
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
349 override void visitVarDecl(VarDecl decl)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
350 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
351 super.visitVarDecl(decl);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
352
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
353 if(decl.init)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
354 {
160
6cb2f4201e2a Improved static arrays
Anders Halager <halager@gmail.com>
parents: 158
diff changeset
355 auto varType = decl.identifier.type;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
356 auto expType = decl.init.type;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
357 if(varType.byteSize != expType.byteSize)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
358 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
359 if(!expType.hasImplicitConversionTo(varType))
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
360 messages.report(InvalidImplicitCast, decl.init.loc)
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
361 .arg(expType.toString)
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
362 .arg(varType.toString);
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
363
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
364 auto castExp = new CastExp(
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 87
diff changeset
365 SLoc.Invalid,
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
366 new Identifier(varType.name),
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
367 decl.init);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
368 castExp.env = decl.init.env;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
369 decl.init = castExp;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
370 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
371 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
372 }
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
373
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
374 private Symbol getBestMatch(Exp[] arg_list , Symbol[] available)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
375 in
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
376 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
377 foreach (a ; available)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
378 assert(a.type.isFunction, "A non-function found in available-list.");
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
379 }
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
380 body
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
381 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
382 assert(available.length, "No available methods in symbol-list.");
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
383
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
384 Symbol[] possible;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
385 Symbol perfect;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
386
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
387 foreach (s ; available)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
388 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
389 if (s.type.asFunction.params.length < arg_list.length)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
390 continue;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
391
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
392 bool per = true;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
393 bool work = true;
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
394
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
395 foreach (i, arg; arg_list)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
396 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
397 auto argType = s.type.asFunction.params[i];
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
398 auto expType = arg.type;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
399 if (argType != expType)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
400 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
401 per = false;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
402 if( !expType.hasImplicitConversionTo(argType) )
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
403 {
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
404 work = false;
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
405 break;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
406 }
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
407 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
408 }
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
409
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
410 foreach (a ; (cast(FuncDecl)s.decl).funcArgs[arg_list.length..$])
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
411 if (a.init is null)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
412 work = false;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
413
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
414 if (work)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
415 if (per)
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
416 return s;
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
417 else
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.
Anders Johnsen <skabet@gmail.com>
parents: 165
diff changeset
418 possible ~= s;
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
419 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
420
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
421 if (possible.length)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
422 return possible[0];
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
423
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
424 return null;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
425 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
426
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 107
diff changeset
427 MessageHandler messages;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
428 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
429