diff trunk/src/dil/semantic/Symbol.d @ 589:de365ddcfbd4

Moved dil.Symbol to dil.semantic.Symbol.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Sat, 05 Jan 2008 23:40:54 +0100
parents trunk/src/dil/Symbol.d@fa6d3c52757d
children 8c5b1558244b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/src/dil/semantic/Symbol.d	Sat Jan 05 23:40:54 2008 +0100
@@ -0,0 +1,47 @@
+/++
+  Author: Aziz Köksal
+  License: GPL3
++/
+module dil.semantic.Symbol;
+
+import dil.ast.Node;
+import common;
+
+/// Symbol IDs.
+enum SYM
+{
+  Module,
+  Class,
+  Interface,
+  Struct,
+  Union,
+  Variable,
+  Function,
+  Type,
+}
+
+/++
+  A symbol represents an object with semantic code information.
++/
+class Symbol
+{
+  SYM sid;
+  Symbol parent; /// The parent this symbol belongs to.
+  /// The AST node that produced this symbol.
+  /// Useful for source code location info and retrieval of doc comments.
+  Node node;
+
+  // A template macro for building isXYZ() methods.
+  private template is_(char[] kind)
+  {
+    const char[] is_ = `bool is`~kind~`(){ return sid == SYM.`~kind~`; }`;
+  }
+  mixin(is_!("Module"));
+  mixin(is_!("Class"));
+  mixin(is_!("Interface"));
+  mixin(is_!("Struct"));
+  mixin(is_!("Union"));
+  mixin(is_!("Variable"));
+  mixin(is_!("Function"));
+  mixin(is_!("Type"));
+}