annotate trunk/src/dil/SymbolTable.d @ 564:3c867a683258

Fixed VariableDeclaration.semantic().
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Fri, 28 Dec 2007 22:32:32 +0100
parents b0533550d64c
children de365ddcfbd4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
556
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
1 /++
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
2 Author: Aziz Köksal
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
3 License: GPL3
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
4 +/
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
5 module dil.SymbolTable;
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
6
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
7 import dil.Symbol;
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
8 import dil.Identifier;
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
9 import common;
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
10
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
11 /++
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
12 Maps an identifier string to a Symbol.
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
13 +/
562
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 556
diff changeset
14 struct SymbolTable
556
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
15 {
564
3c867a683258 Fixed VariableDeclaration.semantic().
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 562
diff changeset
16 Symbol[char[]] table;
556
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
17
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
18 /// Look up ident in the table.
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
19 Symbol lookup(Identifier* ident)
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
20 {
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
21 assert(ident !is null);
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
22 auto psym = ident.str in table;
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
23 return psym ? *psym : null;
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
24 }
562
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 556
diff changeset
25
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 556
diff changeset
26 void insert(Symbol s, Identifier* ident)
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 556
diff changeset
27 {
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 556
diff changeset
28 table[ident.str] = s;
b0533550d64c Added semantic() to VariableDeclaration.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 556
diff changeset
29 }
556
19554e79e6d2 Added module dil.SymbolTable.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
30 }