diff trunk/src/dil/semantic/Pass1.d @ 713:1bfae3480fdc

Added new predefined IDs and code to SemanticPass1.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Wed, 30 Jan 2008 23:23:58 +0100
parents efa5fcb9aa14
children 140469ecb90e
line wrap: on
line diff
--- a/trunk/src/dil/semantic/Pass1.d	Wed Jan 30 18:29:23 2008 +0100
+++ b/trunk/src/dil/semantic/Pass1.d	Wed Jan 30 23:23:58 2008 +0100
@@ -142,7 +142,7 @@
     uint alignSize;
   }
 
-  // List of mixin, static if and pragma(msg,...) declarations.
+  // List of mixin, static if, static assert and pragma(msg,...) declarations.
   // Their analysis must be deferred because they entail
   // evaluation of expressions.
   Deferred[] deferred;
@@ -297,16 +297,40 @@
     return d;
   }
 
-  D visit(ConstructorDeclaration)
-  { return null; }
-  D visit(StaticConstructorDeclaration)
-  { return null; }
-  D visit(DestructorDeclaration)
-  { return null; }
-  D visit(StaticDestructorDeclaration)
-  { return null; }
-  D visit(FunctionDeclaration)
-  { return null; }
+  D visit(ConstructorDeclaration d)
+  {
+    auto func = new Function(Ident.__ctor, d);
+    insertOverload(func, func.name);
+    return d;
+  }
+
+  D visit(StaticConstructorDeclaration d)
+  {
+    auto func = new Function(Ident.__ctor, d);
+    insertOverload(func, func.name);
+    return d;
+  }
+
+  D visit(DestructorDeclaration d)
+  {
+    auto func = new Function(Ident.__dtor, d);
+    insertOverload(func, func.name);
+    return d;
+  }
+
+  D visit(StaticDestructorDeclaration d)
+  {
+    auto func = new Function(Ident.__dtor, d);
+    insertOverload(func, func.name);
+    return d;
+  }
+
+  D visit(FunctionDeclaration d)
+  {
+    auto func = new Function(d.name, d);
+    insertOverload(func, func.name);
+    return d;
+  }
 
   D visit(VariablesDeclaration vd)
   {
@@ -324,18 +348,25 @@
     return vd;
   }
 
-  D visit(InvariantDeclaration)
-  { return null; }
-  D visit(UnittestDeclaration)
-  { return null; }
+  D visit(InvariantDeclaration d)
+  {
+    auto func = new Function(Ident.__invariant, d);
+    insert(func, func.name);
+    return d;
+  }
+
+  D visit(UnittestDeclaration d)
+  {
+    auto func = new Function(Ident.__unittest, d);
+    insertOverload(func, func.name);
+    return d;
+  }
+
   D visit(DebugDeclaration)
   { return null; }
   D visit(VersionDeclaration)
   { return null; }
 
-  D visit(StaticAssertDeclaration)
-  { return null; }
-
   D visit(TemplateDeclaration d)
   {
     if (d.symbol)
@@ -350,10 +381,19 @@
     return d;
   }
 
-  D visit(NewDeclaration)
-  { /*add id to env*/return null; }
-  D visit(DeleteDeclaration)
-  { /*add id to env*/return null; }
+  D visit(NewDeclaration d)
+  {
+    auto func = new Function(Ident.__new, d);
+    insert(func, func.name);
+    return d;
+  }
+
+  D visit(DeleteDeclaration d)
+  {
+    auto func = new Function(Ident.__delete, d);
+    insert(func, func.name);
+    return d;
+  }
 
   D visit(ProtectionDeclaration d)
   {
@@ -391,6 +431,14 @@
     return d;
   }
 
+  // Deferred declarations:
+
+  D visit(StaticAssertDeclaration d)
+  {
+    addDeferred(d);
+    return d;
+  }
+
   D visit(StaticIfDeclaration d)
   {
     addDeferred(d);