annotate ast/Decl.d @ 44:495188f9078e new_gen

Big update - Moving towards a better, more seperated parser The parser no loner creates the AST directly, but through callbacks(actions). This means the parser can be run with a different set of actions that do something else. The parser is not back to full strength yet, the main thing missing is the various statements and structs. Also added a SmallArray that uses the stack only until a given size is exceeded, after which the array is copied unto the heap.
author Anders Halager <halager@gmail.com>
date Wed, 23 Apr 2008 00:57:45 +0200
parents e331e4e816e4
children da551f90e03f
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.Decl;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
2
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
3 import ast.Exp,
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
4 ast.Stmt;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
5
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
6 import lexer.Token;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
7
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
8 import sema.SymbolTable;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
9
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
10 enum DeclType
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
11 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
12 VarDecl,
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
13 FuncDecl,
22
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
14 StructDecl,
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
15 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
16
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
17 class Decl
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
18 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
19 this(DeclType declType)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
20 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
21 this.declType = declType;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
22 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
23
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
24 DeclType declType;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
25 Scope env;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
26 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
27
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
28 class VarDecl : Decl
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
29 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
30 this(Identifier type, Identifier identifier,
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
31 Exp e = null)
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
32 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
33 super(DeclType.VarDecl);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
34 this.type = type;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
35 this.identifier = identifier;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
36 this.init = e;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
37 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
38
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
39 Identifier type, identifier;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
40 Exp init;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
41 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
42
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
43 class FuncDecl : Decl
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
44 {
44
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
45 this(Identifier type, Identifier identifier)
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
46 {
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
47 super(DeclType.FuncDecl);
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
48 this.type = type;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
49 this.identifier = identifier;
44
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
50 }
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
51
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
52 void addParam(Identifier type, Identifier name)
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
53 {
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
54 funcArgs ~= new VarDecl(type, name, null);
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
55 }
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
56
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
57 void setBody(CompoundStatement stmts)
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
58 {
495188f9078e Big update - Moving towards a better, more seperated parser
Anders Halager <halager@gmail.com>
parents: 22
diff changeset
59 statements = stmts.statements;
1
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
60 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
61
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
62 Identifier type, identifier;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
63 VarDecl[] funcArgs;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
64 Stmt[] statements;
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
65 }
2168f4cb73f1 First push
johnsen@johnsen-desktop
parents:
diff changeset
66
22
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
67 class StructDecl : Decl
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
68 {
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
69 this(Identifier identifier,
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
70 VarDecl[] vars)
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
71 {
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
72 super(DeclType.StructDecl);
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
73 this.identifier = identifier;
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
74 this.vars = vars;
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
75 }
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
76
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
77 Identifier identifier;
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
78 VarDecl[] vars;
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
79 }
e331e4e816e4 now handling structs to some extend
johnsen@johnsen-laptop
parents: 1
diff changeset
80