annotate ast/Exp.d @ 179:2a1a635bd531

Changes the way messages can be displayed. Also added a toString to DType's for type printing.
author Anders Johnsen <skabet@gmail.com>
date Fri, 25 Jul 2008 01:21:07 +0200
parents dc9bf56b7ace
children 59cd211a1bd3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
1 module ast.Exp;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
2
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
3 import tango.text.Util,
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
4 Integer = tango.text.convert.Integer;
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
5 import tango.io.Stdout;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
6
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
7 import ast.Decl,
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
8 ast.Stmt;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
9
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
10 import lexer.Token;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
11
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
12 import sema.Scope,
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
13 sema.Symbol,
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
14 sema.DType;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
15
119
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
16 import basic.LiteralParsing;
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
17
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
18 enum ExpType
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
19 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
20 Binary,
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
21 Negate,
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
22 Deref,
176
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
23 AddressOfExp,
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
24 IntegerLit,
55
79cb0afafabe Now structs are somewhat useable to use.
Anders Johnsen <skabet@gmail.com>
parents: 48
diff changeset
25 MemberReference,
83
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 81
diff changeset
26 Index,
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
27 Identifier,
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
28 AssignExp,
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
29 CallExp,
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
30 CastExp,
104
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
31 StringExp,
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: 145
diff changeset
32 NewExp,
172
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
33
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
34 IdentifierTypeExp,
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
35 ArrayTypeExp,
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
36 StaticArrayTypeExp,
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
37 PointerTypeExp,
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
38 FunctionTypeExp,
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
39 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
40
107
189c049cbfcc Cleanup of codegen, better support for operators a few bugfixes
Anders Halager <halager@gmail.com>
parents: 98
diff changeset
41 abstract class Exp
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
42 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
43 this(ExpType expType, SLoc loc)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
44 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
45 this.expType = expType;
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
46 this.loc = loc;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
47 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
48
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
49 /**
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
50 Get the fully qualified name for the expression (if it can be resolved to
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
51 one) - otherwise null is returned
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
52 **/
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
53 char[] getFQN() { return null; }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
54
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
55 /// The same as getFQN, except that the name is mangled
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
56 char[] getMangledFQN() { return null; }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
57
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
58 /**
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
59 Try to get the symbol the expression represents.
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
60
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
61 Returns null for most expressions as they don't represent any symbol.
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
62 Identifiers and member references can have a sensible value.
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
63 **/
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
64 Symbol getSymbol() { return null; }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
65
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
66 /// Get the type of the expression
110
2deb4c1f0d93 Make it compile
Anders Halager <halager@gmail.com>
parents: 109
diff changeset
67 abstract DType type();
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
68
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
69 /// Indicates which type the expression is - to avoid a lot of casts
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
70 ExpType expType;
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
71
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
72 /// The environment of the expression
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
73 Scope env;
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
74
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
75 Symbol symbol;
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
76
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
77 int stmtIndex;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
78
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
79 /**
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
80 The "main" location of the expression.
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
81 What exactly this represents varies but for most things its the start
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
82 while for a binary expression its the operator.
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
83 **/
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
84 SourceLocation loc;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
85
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
86 /// Return the starting location of this expression
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
87 SourceLocation startLoc() { return loc; }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
89 /// Get the full extents of the expression
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
90 SourceRange sourceRange() { return SourceRange(loc, loc + 1); }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
91
107
189c049cbfcc Cleanup of codegen, better support for operators a few bugfixes
Anders Halager <halager@gmail.com>
parents: 98
diff changeset
92 /// Do some simplifications
189c049cbfcc Cleanup of codegen, better support for operators a few bugfixes
Anders Halager <halager@gmail.com>
parents: 98
diff changeset
93 Exp simplify() { return this; }
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
94 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
95
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
96 class CallExp : Exp
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
97 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
98 this(Exp exp, Exp[] args)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
99 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
100 super(ExpType.CallExp, exp.loc);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
101 this.exp = exp;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
102 this.args = args;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
103 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
104
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
105 override DType type()
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
106 {
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
107 DFunction f = cast(DFunction)exp.type();
59
1d6f4ad38a91 Make most of the tests pass again
Anders Halager <halager@gmail.com>
parents: 58
diff changeset
108 assert(f !is null, "Can only call functions");
63
9f8131676242 Now Decl's have a DType type(), and should use varType and returnType to get the old type id
Anders Halager <halager@gmail.com>
parents: 60
diff changeset
109 return f.returnType;
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
110 }
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
111
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
112 override CallExp simplify()
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
113 {
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
114 foreach (ref arg; args)
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
115 arg = arg.simplify();
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
116 exp = exp.simplify();
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
117 return this;
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
118 }
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
119
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
120 Exp exp;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
121 Exp[] args;
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: 164
diff changeset
122 Symbol callSym;
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
123 bool sret = false;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
124
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
125 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
126 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
127 SourceRange res = exp.sourceRange;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
128 if (args.length > 0)
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
129 res = res + args[$ - 1].sourceRange;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
130 return res;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
131 }
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
132 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
133
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
134 class AssignExp : BinaryExp
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
135 {
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
136 this(SLoc op_loc, Operator op, Exp identifier, Exp exp)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
137 {
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
138 super(ExpType.AssignExp, op_loc, op, identifier, exp);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
139 this.identifier = identifier;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
140 this.exp = exp;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
141 }
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
142
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
143 override AssignExp simplify()
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
144 {
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
145 identifier = identifier.simplify();
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
146 exp = exp.simplify();
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
147
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
148 return this;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
149 }
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
150
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
151 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
152 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
153 return identifier.sourceRange + exp.sourceRange;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
154 }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
155
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
156 override DType type() { return identifier.type(); }
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
157
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
158 Exp identifier;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
159 Exp exp;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
160 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
161
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
162 class BinaryExp : Exp
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
163 {
7
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
164 public enum Operator
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
165 {
48
b6c1dc30ca4b Only tests that dont pass now are structs and switches
Anders Halager <halager@gmail.com>
parents: 44
diff changeset
166 Assign,
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
167 AddAssign,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
168 SubAssign,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
169 MulAssign,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
170 DivAssign,
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
171 ModAssign,
48
b6c1dc30ca4b Only tests that dont pass now are structs and switches
Anders Halager <halager@gmail.com>
parents: 44
diff changeset
172
7
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
173 Eq, Ne,
44
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
174
10
2f493057cf17 Some support for the rest of the boolean operators
Anders Halager <halager@gmail.com>
parents: 7
diff changeset
175 Lt, Le,
2f493057cf17 Some support for the rest of the boolean operators
Anders Halager <halager@gmail.com>
parents: 7
diff changeset
176 Gt, Ge,
44
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
177
7
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
178 Add, Sub,
44
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 28
diff changeset
179 Mul, Div, Mod,
123
6a5f745d351c Parsing <<, >> and >>>.
Anders Johnsen <skabet@gmail.com>
parents: 119
diff changeset
180
6a5f745d351c Parsing <<, >> and >>>.
Anders Johnsen <skabet@gmail.com>
parents: 119
diff changeset
181 LeftShift, RightShift, UnsignedRightShift,
125
d604152de1eb Support shifts and binary logical operators in codegen
Anders Halager <halager@gmail.com>
parents: 123
diff changeset
182
d604152de1eb Support shifts and binary logical operators in codegen
Anders Halager <halager@gmail.com>
parents: 123
diff changeset
183 And, Or, Xor,
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
184 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
185
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
186 char[][] getOp = ["=","+=","-=","*=","/=","%=","==","!=","<","<=",">",">=","+","-","*","/","%","<<",">>",">>>"];
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
187
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
188 this(SLoc op_loc, Operator op, Exp left, Exp right)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
189 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
190 super(ExpType.Binary, op_loc);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
191 this.op = op;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
192 this.left = left;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
193 this.right = right;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
194 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
195
126
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
196 protected this(ExpType e, SLoc op_loc, Operator op, Exp left, Exp right)
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
197 {
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
198 super(e, op_loc);
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
199 this.op = op;
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
200 this.left = left;
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
201 this.right = right;
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
202 }
c3b24e7e8cf8 Carius changes to the parser. Parsing attributes, lexing many keywords(not all yet).
Anders Johnsen <skabet@gmail.com>
parents: 125
diff changeset
203
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
204 override DType type()
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
205 {
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
206 if (myType)
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
207 return myType;
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
208
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
209 if (op == Operator.Eq ||
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
210 op == Operator.Ne ||
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
211 op == Operator.Lt ||
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
212 op == Operator.Le ||
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
213 op == Operator.Gt ||
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
214 op == Operator.Ge)
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
215 {
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
216 myType = DType.Bool;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
217 return myType;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
218 }
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
219
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
220 DType l = left.type;
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
221 DType r = right.type;
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
222 if (l is r)
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
223 myType = l;
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
224 else if (l.hasImplicitConversionTo(r))
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
225 myType = r;
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
226 else if (r.hasImplicitConversionTo(l))
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
227 myType = l;
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
228 else
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
229 return null;
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
230 return myType;
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
231 }
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
232
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
233 override SLoc startLoc() { return left.startLoc(); }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
234
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
235 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
236 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
237 return left.sourceRange + right.sourceRange;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
238 }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
239
7
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
240 char[] resultType()
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
241 {
10
2f493057cf17 Some support for the rest of the boolean operators
Anders Halager <halager@gmail.com>
parents: 7
diff changeset
242 if (op >= Operator.Eq && op <= Operator.Ge)
7
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
243 return "bool";
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
244 return null;
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
245 }
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
246
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
247 override BinaryExp simplify()
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
248 {
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
249 left = left.simplify();
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
250 right = right.simplify();
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
251 return this;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
252 }
7
2ce5209f1954 Starting to work on bool support, for now == works
Anders Halager <halager@gmail.com>
parents: 1
diff changeset
253
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
254 Operator op;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
255 Exp left, right;
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
256 private DType myType;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
257 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
258
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
259 class NegateExp : Exp
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
260 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
261 this(SLoc op, Exp exp)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
262 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
263 super(ExpType.Negate, op);
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
264 this.exp = exp;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
265 }
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
266
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
267 override NegateExp simplify()
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
268 {
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
269 exp = exp.simplify();
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
270 return this;
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
271 }
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
272
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
273 override DType type() { return exp.type(); }
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
274
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
275 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
276 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
277 return SourceRange(loc) + exp.sourceRange;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
278 }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
279
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
280 public Exp exp;
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
281 }
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
282
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
283 class DerefExp : Exp
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
284 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
285 this(SLoc op, Exp exp)
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
286 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
287 super(ExpType.Deref, op);
78
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
288 this.exp = exp;
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
289 }
ad956143dcdc Parse and gen for dereferences
Anders Halager <halager@gmail.com>
parents: 72
diff changeset
290
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
291 override DerefExp simplify()
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
292 {
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
293 exp = exp.simplify();
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
294 return this;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
295 }
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
296
80
682e20aa224f Pointers working now - big YAY
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
297 override DType type()
107
189c049cbfcc Cleanup of codegen, better support for operators a few bugfixes
Anders Halager <halager@gmail.com>
parents: 98
diff changeset
298 {
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
299 return exp.type().asPointer().pointerOf;
80
682e20aa224f Pointers working now - big YAY
Anders Johnsen <skabet@gmail.com>
parents: 79
diff changeset
300 }
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
301
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
302 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
303 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
304 return SourceRange(loc) + exp.sourceRange;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
305 }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
306
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
307 public Exp exp;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
308 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
309
176
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
310 class AddressOfExp : Exp
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
311 {
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
312 this(SLoc op, Exp exp)
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
313 {
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
314 super(ExpType.AddressOfExp, op);
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
315 this.exp = exp;
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
316 }
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
317
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
318 override AddressOfExp simplify()
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
319 {
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
320 exp = exp.simplify();
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
321 return this;
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
322 }
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
323
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
324 override DType type()
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
325 {
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
326 return exp.type().getPointerTo;
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
327 }
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
328
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
329 override SourceRange sourceRange()
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
330 {
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
331 return SourceRange(loc) + exp.sourceRange;
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
332 }
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
333
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
334 public Exp exp;
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
335 }
dc9bf56b7ace Can now use & as a unary operator and take an AddressOf
Anders Johnsen <skabet@gmail.com>
parents: 172
diff changeset
336
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
337 class IntegerLit : Exp
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
338 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
339 this(SLoc loc, char[] t)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
340 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
341 super(ExpType.IntegerLit, loc);
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
342 range = SourceRange(loc, loc + t.length);
111
c658172ca8a0 Parsing basic integers and floats.
Anders Johnsen <skabet@gmail.com>
parents: 110
diff changeset
343 this.name = t;
67
3fdf20b08a81 Been working on the floating point parsing. Still a bit of work to do here.
Anders Johnsen <skabet@gmail.com>
parents: 65
diff changeset
344 }
3fdf20b08a81 Been working on the floating point parsing. Still a bit of work to do here.
Anders Johnsen <skabet@gmail.com>
parents: 65
diff changeset
345
3fdf20b08a81 Been working on the floating point parsing. Still a bit of work to do here.
Anders Johnsen <skabet@gmail.com>
parents: 65
diff changeset
346 char[] get()
3fdf20b08a81 Been working on the floating point parsing. Still a bit of work to do here.
Anders Johnsen <skabet@gmail.com>
parents: 65
diff changeset
347 {
3fdf20b08a81 Been working on the floating point parsing. Still a bit of work to do here.
Anders Johnsen <skabet@gmail.com>
parents: 65
diff changeset
348 return name;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
349 }
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
350
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
351 override IntegerLit simplify()
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
352 {
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
353 return this;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
354 }
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
355
119
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
356 override DType type()
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
357 {
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
358 switch(number.type)
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
359 {
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
360 case NumberType.Int:
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
361 return DType.Int;
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
362 case NumberType.Long:
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
363 return DType.Long;
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
364 case NumberType.ULong:
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
365 return DType.ULong;
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
366 case NumberType.Double:
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
367 return DType.Double;
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
368 case NumberType.Real:
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
369 return DType.Real;
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
370 }
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
371 }
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
372
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
373 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
374 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
375 return range;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
376 }
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
377
119
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
378 Number number;
c0b531362ca6 Non compileing commit. Work on floating points and casts
Anders Johnsen <skabet@gmail.com>
parents: 114
diff changeset
379
67
3fdf20b08a81 Been working on the floating point parsing. Still a bit of work to do here.
Anders Johnsen <skabet@gmail.com>
parents: 65
diff changeset
380 char[] name;
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
381 private SourceRange range;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
382 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
383
55
79cb0afafabe Now structs are somewhat useable to use.
Anders Johnsen <skabet@gmail.com>
parents: 48
diff changeset
384 class MemberReference : Exp
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
385 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
386 this(SLoc dot, Exp target, Identifier child)
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
387 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
388 super(ExpType.MemberReference, dot);
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
389 this.target = target;
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
390 this.child = child;
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
391 }
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
392
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
393 override char[] getFQN()
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
394 {
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
395 return getSymbol().getFQN();
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
396 }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
397
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
398 override char[] getMangledFQN()
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
399 {
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
400 return target.type.mangle() ~ child.getMangledFQN();
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
401 }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
402
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
403 override Symbol getSymbol()
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
404 {
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
405 auto s = target.getSymbol();
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
406 if (s !is null)
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: 145
diff changeset
407 return s.findMembers(child.get)[0];
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
408 return null;
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
409 }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
410
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
411 override MemberReference simplify()
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
412 {
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
413 target = target.simplify();
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
414 return this;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
415 }
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
416
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
417 override DType type()
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
418 {
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
419 if (myType)
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
420 return myType;
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
421
162
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
422 if ( target.type.isStruct )
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
423 {
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: 164
diff changeset
424 Symbol st = target.getSymbol;
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: 164
diff changeset
425 if (auto t = st.findMembers(child.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: 164
diff changeset
426 myType = t[0].type;
162
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
427 // else assert(0, "Referencing non-existant member");
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
428 }
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
429 else if ( target.type.isClass )
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
430 {
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: 164
diff changeset
431 Symbol cl = target.getSymbol;
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: 164
diff changeset
432 if (auto t = cl.findMembers(child.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: 164
diff changeset
433 myType = t[0].type;
162
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
434 // else assert(0, "Referencing non-existant member");
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
435 }
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
436 else
0f38f1a0f06f Fixed symbol for a functions members.
Anders Johnsen <skabet@gmail.com>
parents: 160
diff changeset
437 assert(0, "Only structs and classes have members");
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
438 // no error reporting here
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
439
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
440 return myType;
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
441 }
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
442
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
443 override SLoc startLoc() { return target.startLoc(); }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
444
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
445 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
446 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
447 return target.sourceRange + child.sourceRange;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
448 }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
449
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
450 Identifier child;
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
451 Exp target;
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
452 private DType myType;
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
453 }
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
454
83
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 81
diff changeset
455 class IndexExp : Exp
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
456 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
457 this(Exp target, SLoc left_bracket, Exp index, SLoc right_bracket)
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
458 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
459 super(ExpType.Index, target.startLoc);
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
460 this.target = target;
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
461 this.left_bracket = left_bracket;
83
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 81
diff changeset
462 this.index = index;
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
463 this.right_bracket = right_bracket;
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
464 }
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
465
83
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 81
diff changeset
466 override DType type()
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 81
diff changeset
467 {
85
9375bd975730 Allow indexing of pointers also
Anders Halager <halager@gmail.com>
parents: 83
diff changeset
468 DType type = target.type();
136
2be29b296081 Lots of changes:
johnsen@johnsen-laptop
parents: 129
diff changeset
469 if (type.isStaticArray())
2be29b296081 Lots of changes:
johnsen@johnsen-laptop
parents: 129
diff changeset
470 return type.asStaticArray().arrayOf;
85
9375bd975730 Allow indexing of pointers also
Anders Halager <halager@gmail.com>
parents: 83
diff changeset
471 else if (type.isPointer())
9375bd975730 Allow indexing of pointers also
Anders Halager <halager@gmail.com>
parents: 83
diff changeset
472 return type.asPointer().pointerOf;
9375bd975730 Allow indexing of pointers also
Anders Halager <halager@gmail.com>
parents: 83
diff changeset
473 else assert(0, "Can only index pointers and arrays");
83
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 81
diff changeset
474 }
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
475
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
476 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
477 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
478 return target.sourceRange + SourceRange(right_bracket);
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
479 }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
480
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
481 override IndexExp simplify()
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
482 {
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
483 target = target.simplify();
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
484 index = index.simplify();
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
485 return this;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
486 }
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
487
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
488 Exp target;
83
9e90694f5da0 Parse array indexing, and allow reading from arrays
Anders Halager <halager@gmail.com>
parents: 81
diff changeset
489 Exp index;
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
490 SLoc left_bracket, right_bracket;
28
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
491 }
69464d465284 Now supporting structs - both read and write. Still a few errors though, so watch out.
Anders Johnsen <skabet@gmail.com>
parents: 10
diff changeset
492
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
493 class CastExp : Exp
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
494 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
495 this(SLoc loc, Identifier castType, Exp exp)
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
496 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
497 super(ExpType.CastExp, loc);
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
498 this.castType = castType;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
499 this.exp = exp;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
500 }
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
501
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
502 override DType type()
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
503 {
145
a14ac9e5c858 Changes Scope to use char[]'s insted of Identifiers for lookup.
Anders Johnsen <skabet@gmail.com>
parents: 139
diff changeset
504 return env.findType(this.castType.get);
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
505 }
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
506
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
507 override CastExp simplify()
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
508 {
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
509 castType = castType.simplify();
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
510 exp = exp.simplify();
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
511 return this;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
512 }
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
513
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
514 override SourceRange sourceRange()
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
515 {
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
516 return SourceRange(loc) + exp.sourceRange;
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
517 }
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
518
68
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
519 Identifier castType;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
520 Exp exp;
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
521 }
381975d76baf A LOT of bug fixing - also implemented implicit casts. If you do a --ast-dump-code on a target with some algebra of differant types, you should now see the type casts being made. Also, Tests are again back with only switches failing...
Anders Johnsen <skabet@gmail.com>
parents: 67
diff changeset
522
104
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
523 class StringExp : Exp
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
524 {
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
525 this(SLoc loc, char[] str)
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
526 {
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
527 super(ExpType.StringExp, loc);
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
528 this.str = str;
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
529 }
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
530
160
6cb2f4201e2a Improved static arrays
Anders Halager <halager@gmail.com>
parents: 158
diff changeset
531 override DType type() { return DType.Char.getAsStaticArray(data.length); }
110
2deb4c1f0d93 Make it compile
Anders Halager <halager@gmail.com>
parents: 109
diff changeset
532
104
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
533 char[] str;
160
6cb2f4201e2a Improved static arrays
Anders Halager <halager@gmail.com>
parents: 158
diff changeset
534 ubyte[] data;
104
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
535 }
7ff4bc2accf2 Lexing more types of strings. Now all's left is to parse the string in the AST.
Anders Johnsen <skabet@gmail.com>
parents: 98
diff changeset
536
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: 145
diff changeset
537 class 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: 145
diff changeset
538 {
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: 145
diff changeset
539 this(Identifier newType, Exp[] a_args, Exp[] c_args)
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: 145
diff changeset
540 {
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: 145
diff changeset
541 super(ExpType.NewExp, newType.loc);
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: 145
diff changeset
542 this.newType = newType;
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: 145
diff changeset
543 this.a_args = a_args;
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: 145
diff changeset
544 this.c_args = c_args;
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: 145
diff changeset
545 }
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: 145
diff changeset
546
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: 145
diff changeset
547 override DType type()
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: 145
diff changeset
548 {
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: 145
diff changeset
549 return env.findType(this.newType.get);
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: 145
diff changeset
550 }
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: 145
diff changeset
551
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: 145
diff changeset
552 Exp[] a_args, c_args;
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: 145
diff changeset
553 Identifier newType;
164
ba94fd563548 The symbol for the constructor a "new"-exp is calling is now stored in callSym in NewExp.
Anders Johnsen <skabet@gmail.com>
parents: 162
diff changeset
554 Symbol callSym;
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: 145
diff changeset
555 }
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: 145
diff changeset
556
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
557 class Identifier : Exp
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
558 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
559 this(SLoc loc, char[] name)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
560 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
561 super(ExpType.Identifier, loc);
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
562 this.name = name;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
563 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
564
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
565 protected this(ExpType t, SLoc loc)
72
628cb46ab13b First update on the way to Arrays! :)
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
566 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
567 super(t, loc);
72
628cb46ab13b First update on the way to Arrays! :)
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
568 }
628cb46ab13b First update on the way to Arrays! :)
Anders Johnsen <skabet@gmail.com>
parents: 68
diff changeset
569
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
570 override char[] getFQN()
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
571 {
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
572 return name;
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
573 }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
574
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
575 override char[] getMangledFQN()
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
576 {
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
577 return Integer.toString(name.length) ~ name;
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
578 }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
579
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
580 override Symbol getSymbol()
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
581 {
145
a14ac9e5c858 Changes Scope to use char[]'s insted of Identifiers for lookup.
Anders Johnsen <skabet@gmail.com>
parents: 139
diff changeset
582 if (auto decl = env.find(this.get))
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: 164
diff changeset
583 if(decl.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: 164
diff changeset
584 return decl[$-1].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: 164
diff changeset
585 return null;
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
586 }
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
587
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
588 override DType type()
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
589 {
59
1d6f4ad38a91 Make most of the tests pass again
Anders Halager <halager@gmail.com>
parents: 58
diff changeset
590 if (myType !is null)
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
591 return myType;
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
592 else if (auto sym = getSymbol)
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
593 myType = sym.type;
114
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 111
diff changeset
594 else
3a0cd42de9cc Removed misc/Error.d and is now using the error system all way through.
Anders Johnsen <skabet@gmail.com>
parents: 111
diff changeset
595 myType = DType.Int;
129
ed815b31479b Added a Symbol
Anders Halager <halager@gmail.com>
parents: 126
diff changeset
596
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
597 return myType;
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
598 }
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
599
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
600 this(char[] name)
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
601 {
88
eb5b2c719a39 Major change to locations, tokens and expressions.
Anders Halager <halager@gmail.com>
parents: 86
diff changeset
602 super(ExpType.Identifier, SLoc.Invalid);
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
603 this.name = name;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
604 }
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
605
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
606 char[] get()
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
607 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
608 return name;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
609 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
610
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
611 hash_t toHash()
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
612 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
613 return jhash(name);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
614 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
615
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
616 int opCmp(Object o)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
617 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
618 if (auto id = cast(Identifier)o)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
619 return typeid(char[]).compare(&name, &id.name);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
620 return 0;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
621 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
622
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
623 int opEquals(Object o)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
624 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
625 if (auto id = cast(Identifier)o)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
626 return typeid(char[]).equals(&name, &id.name);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
627 return 0;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
628 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
629
139
a22e3663de89 Fixed up our simplify functions
Anders Halager <halager@gmail.com>
parents: 136
diff changeset
630 override Identifier simplify()
56
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
631 {
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
632 return this;
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
633 }
4ae365eff712 Now return types works for structs... Also, simplyfing in AST have been startet - but still messy. This update is a little messy...
Anders Johnsen <skabet@gmail.com>
parents: 55
diff changeset
634
93
621cedba53ea Removed the Symbol from semantics - it was not needed anymore. From now on you set the type by doing a setType on an Identifier.
Anders Johnsen <skabet@gmail.com>
parents: 92
diff changeset
635 void setType(DType myType)
621cedba53ea Removed the Symbol from semantics - it was not needed anymore. From now on you set the type by doing a setType on an Identifier.
Anders Johnsen <skabet@gmail.com>
parents: 92
diff changeset
636 {
621cedba53ea Removed the Symbol from semantics - it was not needed anymore. From now on you set the type by doing a setType on an Identifier.
Anders Johnsen <skabet@gmail.com>
parents: 92
diff changeset
637 this.myType = myType;
621cedba53ea Removed the Symbol from semantics - it was not needed anymore. From now on you set the type by doing a setType on an Identifier.
Anders Johnsen <skabet@gmail.com>
parents: 92
diff changeset
638 }
621cedba53ea Removed the Symbol from semantics - it was not needed anymore. From now on you set the type by doing a setType on an Identifier.
Anders Johnsen <skabet@gmail.com>
parents: 92
diff changeset
639
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: 176
diff changeset
640 override SourceRange 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: 176
diff changeset
641 {
2a1a635bd531 Changes the way messages can be displayed. Also added a toString to DType's for type printing.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
642 return SourceRange(loc, loc + name.length);
2a1a635bd531 Changes the way messages can be displayed. Also added a toString to DType's for type printing.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
643 }
2a1a635bd531 Changes the way messages can be displayed. Also added a toString to DType's for type printing.
Anders Johnsen <skabet@gmail.com>
parents: 176
diff changeset
644
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
645 char[] name;
58
fc62c5296a1c Add types to our Exp
Anders Halager <halager@gmail.com>
parents: 56
diff changeset
646 private DType myType;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
647 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
648
172
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
649 class IdentifierTypeExp : Identifier
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
650 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
651 this(SLoc loc, char[] name)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
652 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
653 super(ExpType.IdentifierTypeExp, loc);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
654 this.name = name;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
655 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
656
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
657 protected this(ExpType t, SLoc loc)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
658 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
659 super(t, loc);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
660 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
661 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
662
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
663 class PointerTypeExp : IdentifierTypeExp
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
664 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
665 this(IdentifierTypeExp pointerOf)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
666 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
667 super(ExpType.PointerTypeExp, pointerOf.loc);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
668 this.pointerOf = pointerOf;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
669 this.name = pointerOf.name;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
670 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
671
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
672 override DType type()
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
673 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
674 return pointerOf.type.getPointerTo();
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
675 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
676
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
677 Identifier pointerOf;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
678 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
679
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
680 class StaticArrayTypeExp : IdentifierTypeExp
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
681 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
682 this(IdentifierTypeExp arrayOf, IntegerLit size)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
683 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
684 super(ExpType.StaticArrayTypeExp, arrayOf.loc);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
685 this.arrayOf = arrayOf;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
686 this.size = Integer.parse(size.get);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
687 this.name = arrayOf.name;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
688 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
689
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
690 override DType type()
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
691 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
692 return arrayOf.type.getAsStaticArray(size);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
693 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
694
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
695 Identifier arrayOf;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
696 int size;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
697
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
698 private DType myType;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
699 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
700
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
701 class ArrayTypeExp : IdentifierTypeExp
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
702 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
703 this(IdentifierTypeExp arrayOf)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
704 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
705 super(ExpType.ArrayTypeExp, arrayOf.loc);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
706 this.arrayOf = arrayOf;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
707 this.name = arrayOf.name;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
708 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
709
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
710 override DType type()
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
711 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
712 return arrayOf.type.getAsArray();
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
713 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
714
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
715 Identifier arrayOf;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
716
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
717 private DType myType;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
718 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
719
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
720 class FunctionTypeExp : IdentifierTypeExp
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
721 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
722 this(IdentifierTypeExp returnType, VarDecl[] decls)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
723 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
724 super(ExpType.FunctionTypeExp, returnType.loc);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
725 this.returnType = returnType;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
726 this.decls = decls;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
727 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
728
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
729 override DType type()
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
730 {
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
731 if (myType)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
732 return myType;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
733 auto t = new DFunction(returnType);
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
734 t.returnType = returnType.type;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
735 foreach (decl ; decls)
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
736 t.params ~= decl.identifier.type;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
737
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
738 myType = t.getPointerTo;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
739 return myType;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
740 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
741
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
742 VarDecl[] decls;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
743 IdentifierTypeExp returnType;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
744 private DType myType;
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
745 }
01c2c49775ef - Changed Parser to be more clean on type parsing.
Anders Johnsen <skabet@gmail.com>
parents: 168
diff changeset
746