annotate trunk/src/dil/semantic/Interpreter.d @ 798:c24be8d4f6ab

Added documentation comments.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 01 Mar 2008 02:53:06 +0100
parents 5fe89bb8cbdd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
1 /++
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
2 Author: Aziz Köksal
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
3 License: GPL3
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
4 +/
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
5 module dil.semantic.Interpreter;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
6
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
7 import dil.ast.Visitor;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
8 import dil.ast.Node,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
9 dil.ast.Declarations,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
10 dil.ast.Expressions,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
11 dil.ast.Statements,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
12 dil.ast.Types,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
13 dil.ast.Parameters;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
14
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
15 import dil.semantic.Symbol,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
16 dil.semantic.Symbols,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
17 dil.semantic.Scope,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
18 dil.semantic.Types;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
19 import dil.Information;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
20
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
21 /// Used for compile-time evaluation of expressions.
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
22 class Interpreter : Visitor
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
23 {
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
24 // Scope scop;
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
25 InfoManager infoMan;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
26
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
27 static class Result : Expression
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
28 {
791
5fe89bb8cbdd Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 754
diff changeset
29 override Result copy(){return null;}
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
30 }
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
31
693
56100b270897 Renamed a constant in class Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 691
diff changeset
32 static const Result NAR; /// Not a Result. Similar to NAN in floating point arithmetics.
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
33
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
34 static this()
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
35 {
693
56100b270897 Renamed a constant in class Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 691
diff changeset
36 NAR = new Result;
56100b270897 Renamed a constant in class Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 691
diff changeset
37 NAR.type = Types.Error;
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
38 }
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
39
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
40 /// Evaluates the expression e.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
41 /// Returns: NAR or a value.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
42 static Expression interpret(Expression e, InfoManager infoMan/+, Scope scop+/)
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
43 {
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
44 return (new Interpreter(/+scop,+/ infoMan)).eval(e);
691
276e2866f5fd Added static interpret() method to Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 687
diff changeset
45 }
276e2866f5fd Added static interpret() method to Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 687
diff changeset
46
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
47 /// Constructs an Interpreter object.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
48 this(/+Scope scop, +/InfoManager infoMan)
691
276e2866f5fd Added static interpret() method to Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 687
diff changeset
49 {
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
50 // this.scop = scop;
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
51 this.infoMan = infoMan;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
52 }
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
53
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
54 /// Start evaluation.
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
55 Expression eval(Expression e)
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
56 {
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
57 return e;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
58 }
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
59
798
c24be8d4f6ab Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 791
diff changeset
60 /// Returns true if e is immutable.
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
61 bool isImmutable(Expression e)
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
62 {
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
63 switch (e.kind)
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
64 {
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
65 alias NodeKind NK;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
66 case NK.IntExpression, NK.RealExpression,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
67 NK.ComplexExpression, NK.CharExpression,
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
68 NK.BoolExpression, NK.StringExpression:
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
69 return true;
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
70 default:
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
71 }
754
c7a5499faa77 Improved DDoc related code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 693
diff changeset
72 return false;
687
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
73 }
f14cd41fc87d Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
74 }