annotate sema/TypeCheck.d @ 191:e799db8d9cb0

Fixed a small bug. Passes two more tests now.
author Anders Johnsen <skabet@gmail.com>
date Fri, 25 Jul 2008 14:44:50 +0200
parents 86a2ede00e9a
children 658178183018
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 }
184
86a2ede00e9a Oops, compile breaking commit.
Anders Johnsen <skabet@gmail.com>
parents: 183
diff changeset
85 if (exp.op >= BinaryExp.Operator.LeftShift &&
86a2ede00e9a Oops, compile breaking commit.
Anders Johnsen <skabet@gmail.com>
parents: 183
diff changeset
86 exp.op <= BinaryExp.Operator.UnsignedRightShift)
183
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
87 {} // FIXME: When we have const-system we need to check for
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
88 // right site being larger then the bitsize of the
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
89 // left
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
90 }
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
91
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
92 override void visitDerefExp(DerefExp exp)
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
93 {
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
94 if (!exp.exp.type.isPointer)
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
95 {
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
96 messages.report(CanOnlyDerefPointers,
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
97 [exp.exp.sourceRange][],
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
98 [exp.loc])
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
99 .arg(exp.exp.type.toString);
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
100
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
101 exp._type = DType.Int;
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
102 }
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
103 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
104
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
105 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
106 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
107 super.visitCallExp(exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
108
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
109 if (auto iden = cast(MemberReference)exp.exp)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
110 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
111 Symbol[] internalVisitMemberRef(MemberReference m)
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 Symbol[] visitRef(MemberReference m, Identifier target, Symbol st)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
114 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
115 auto child = m.child;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
116 auto res = st.findMembers(child.get);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
117 return res;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
118 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
119 switch(m.target.expType)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
120 {
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
121 case ExpType.Identifier:
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
122 return visitRef(m, cast(Identifier)m.target,
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
123 (cast(Identifier)m.target).getSymbol);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
124 case ExpType.MemberReference:
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
125 Symbol[] s = internalVisitMemberRef(cast(MemberReference)m.target);
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
126 if(s.length)
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
127 return s;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
128 return visitRef(m, cast(Identifier)m.target, s[0]);
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 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
131
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
132 Exp[] newArgs;
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
133
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
134 DFunction function_type;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
135 if (iden.type.isFunction())
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
136 {
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
137 Symbol[] methods = internalVisitMemberRef(iden);
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
138
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
139 if (!methods.length)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
140 {
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
141 messages.report(NoMethodByName, iden.loc);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
142 return;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
143 }
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
144
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
145 Symbol sel = getBestMatch(exp.args, methods);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
146 exp.callSym = sel;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
147 if (sel)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
148 function_type = sel.type.asFunction();
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
149 else
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
150 {
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
151 messages.report(NoMachingMethod, exp.loc);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
152 foreach ( i, s ; methods )
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
153 {
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
154 messages.report(CandidateNr,
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
155 (cast(FuncDecl)s.decl).identifier.loc)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
156 .arg(Integer.toString(i+1));
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
157 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
158 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
159 }
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
160 else if (iden.type.isCallable)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
161 function_type = iden.type.asCallable();
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
162 else assert(0, "Should not happen");
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
163
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
164 foreach (i, arg; exp.args)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
165 {
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
166 auto argType = function_type.params[i];
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
167 auto expType = arg.type;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
168 if (argType.isSame(expType))
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
169 {
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
170 if (!expType.hasImplicitConversionTo(argType))
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
171 messages.report(InvalidImplicitCast, exp.loc)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
172 .arg(expType.toString)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
173 .arg(argType.toString);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
174
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
175 auto castExp = new CastExp(
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
176 SLoc.Invalid,
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
177 new Identifier(argType.name),
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
178 arg);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
179 castExp.env = iden.env;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
180 newArgs ~= castExp;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
181 }
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
182 else
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
183 newArgs ~= arg;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
184 }
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
185 exp.args = newArgs;
174
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
186 }
20ff3c31f600 Putting symbol on MemberRef -calls.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
187 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
188 {
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
189 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
190
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
191 DFunction function_type;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
192 if (iden.type.isFunction())
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 {
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
194 Symbol[] methods;
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
195
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
196 foreach (decl ; iden.env.find(iden.get))
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
197 methods ~= decl.sym;
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
198
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
199 if (!methods.length)
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
200 {
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
201 messages.report(NoMethodByName, iden.loc);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
202 return;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
203 }
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
204
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
205 Symbol sel = getBestMatch(exp.args, methods);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
206 exp.callSym = sel;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
207 if (sel)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
208 function_type = sel.type.asFunction();
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
209 else
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
210 {
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
211 messages.report(NoMachingMethod, exp.loc);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
212 foreach ( i, s ; methods )
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
213 {
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
214 messages.report(CandidateNr,
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
215 (cast(FuncDecl)s.decl).identifier.loc)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
216 .arg(Integer.toString(i+1));
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 }
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 }
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
220 else if (iden.type.isCallable)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
221 function_type = iden.type.asCallable();
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
222 else assert(0, "Should not happen");
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
223
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
224 foreach (i, arg; exp.args)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
225 {
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
226 auto argType = function_type.params[i];
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
227 auto expType = arg.type;
191
e799db8d9cb0 Fixed a small bug. Passes two more tests now.
Anders Johnsen <skabet@gmail.com>
parents: 184
diff changeset
228 if (!argType.isSame(expType))
181
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
229 {
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
230 if (!expType.hasImplicitConversionTo(argType))
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
231 messages.report(InvalidImplicitCast, exp.loc)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
232 .arg(expType.toString)
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
233 .arg(argType.toString);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
234
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
235 auto castExp = new CastExp(
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
236 SLoc.Invalid,
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
237 new Identifier(argType.name),
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
238 arg);
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
239 castExp.env = iden.env;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
240 newArgs ~= castExp;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
241 }
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
242 else
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
243 newArgs ~= arg;
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
244 }
59cd211a1bd3 Better support for function pointers
Anders Halager <halager@gmail.com>
parents: 179
diff changeset
245 exp.args = newArgs;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
246 }
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
247 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
248 {
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
249 Exp[] newArgs;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
250
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
251 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
252 {
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 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
254 auto expType = arg.type;
177
491b5fc4782a Small fixes to type checks.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
255 if(!argType.isSame(expType))
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
256 {
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
257 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
258 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
259 .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
260 .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
261
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
262 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
263 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
264 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
265 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
266 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
267 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
268 }
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
269 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
270 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
271 }
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
272
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
273 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
274 }
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
275 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
276
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
277 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
278 {
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
279 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
280
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
281 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
282
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
283 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
284
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
285 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
286 {
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
287 messages.report(NoConstructor, exp.newType.loc);
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
288 return;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
289 }
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 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
292
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
293 if (sel)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
294 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
295 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
296 {
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
297 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
298 auto expType = arg.type;
177
491b5fc4782a Small fixes to type checks.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
299 if (!argType.isSame(expType))
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
300 {
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
301 if (!expType.hasImplicitConversionTo(argType))
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
302 messages.report(InvalidImplicitCast, exp.loc)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
303 .arg(expType.toString)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
304 .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
305
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
306 auto castExp = new CastExp(
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
307 SLoc.Invalid,
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
308 new Identifier(argType.name),
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
309 arg);
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
310 castExp.env = exp.newType.env;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
311 newArgs ~= castExp;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
312 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
313 else
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
314 newArgs ~= arg;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
315 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
316 exp.c_args = newArgs;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
317 exp.callSym = sel;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
318 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
319 else
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
320 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
321 messages.report(NoMachingCon, exp.newType.loc);
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
322 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
323 {
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
324 messages.report(CandidateNr,
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
325 (cast(FuncDecl)s.decl).identifier.loc)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
326 .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
327 }
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
328 }
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
329 }
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
330
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
331 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
332 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
333 super.visitAssignExp(exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
334
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
335 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
336 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
337
176
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 175
diff changeset
338 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
339 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
340 if(!expType.hasImplicitConversionTo(identifierType))
179
2a1a635bd531 Changes the way messages can be displayed. Also added a toString to DType's for type printing.
Anders Johnsen <skabet@gmail.com>
parents: 177
diff changeset
341 messages.report(InvalidImplicitCast,
2a1a635bd531 Changes the way messages can be displayed. Also added a toString to DType's for type printing.
Anders Johnsen <skabet@gmail.com>
parents: 177
diff changeset
342 [exp.identifier.sourceRange, exp.exp.sourceRange][],
2a1a635bd531 Changes the way messages can be displayed. Also added a toString to DType's for type printing.
Anders Johnsen <skabet@gmail.com>
parents: 177
diff changeset
343 [exp.loc])
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
344 .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
345 .arg(identifierType.toString);
70
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 auto castExp = new CastExp(
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 87
diff changeset
348 SLoc.Invalid,
107
189c049cbfcc Cleanup of codegen, better support for operators a few bugfixes
Anders Halager <halager@gmail.com>
parents: 92
diff changeset
349 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
350 exp.exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
351 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
352 exp.exp = castExp;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
353 }
183
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
354
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
355 if (expType.isStaticArray)
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
356 messages.report(CannotReassignSArray,
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
357 [exp.identifier.sourceRange, exp.exp.sourceRange][],
8ea749b7da91 Fixed a few errors so that two more tests passes. Also, now you only need a type in a function param.
Anders Johnsen <skabet@gmail.com>
parents: 181
diff changeset
358 [exp.loc]);
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
359 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
360
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
361 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
362 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
363 super.visitReturnStmt(stmt);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
364
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
365 if(stmt.exp)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
366 {
80
682e20aa224f Pointers working now - big YAY
Anders Johnsen <skabet@gmail.com>
parents: 70
diff changeset
367 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
368 auto expType = stmt.exp.type;
177
491b5fc4782a Small fixes to type checks.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
369 if(!returnType.isSame(expType))
70
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 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
372 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
373 .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
374 .arg(returnType.toString);
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
375
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
376 auto castExp = new CastExp(
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 87
diff changeset
377 SLoc.Invalid,
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
378 new Identifier(returnType.name),
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
379 stmt.exp);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
380 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
381 stmt.exp = castExp;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
382 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
383 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
384 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
385
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
386 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
387 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
388 super.visitVarDecl(decl);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
389
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
390 if(decl.init)
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
391 {
160
6cb2f4201e2a Improved static arrays
Anders Halager <halager@gmail.com>
parents: 158
diff changeset
392 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
393 auto expType = decl.init.type;
177
491b5fc4782a Small fixes to type checks.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
394 if(!varType.isSame(expType))
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
395 {
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
396 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
397 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
398 .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
399 .arg(varType.toString);
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
400
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
401 auto castExp = new CastExp(
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 87
diff changeset
402 SLoc.Invalid,
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
403 new Identifier(varType.name),
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
404 decl.init);
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
405 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
406 decl.init = castExp;
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
407 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
408 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
409 }
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
410
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
411 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
412 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
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 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
415 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
416 }
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
417 body
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
418 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
419 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
420
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
421 Symbol[] possible;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
422 Symbol perfect;
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 foreach (s ; available)
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 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
427 continue;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
428
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
429 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
430 bool work = true;
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
431
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
432 foreach (i, arg; arg_list)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
433 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
434 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
435 auto expType = arg.type;
177
491b5fc4782a Small fixes to type checks.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
436 if (argType.isSame(expType))
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
437 {
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
438 per = false;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
439 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
440 {
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
441 work = false;
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
442 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
443 }
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
444 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
445 }
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
446
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
447 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
448 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
449 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
450
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
451 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
452 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
453 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
454 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
455 possible ~= s;
165
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
456 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
457
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
458 if (possible.length)
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
459 return possible[0];
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
460
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
461 return null;
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
462 }
7606387b2f0a Better handling of param checking on method calls.
Anders Johnsen <skabet@gmail.com>
parents: 164
diff changeset
463
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
464 MessageHandler messages;
70
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
465 }
70a002b3fba4 Added missing files and also cleaned up some Stdout debug-output.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
466