]> git.llucax.com Git - software/druntime.git/commitdiff
add hidden function error support
authorwalter <walter@4a9d5153-6564-4b3f-b5e1-7e8e9dac548f>
Mon, 13 Oct 2008 17:19:53 +0000 (17:19 +0000)
committerwalter <walter@4a9d5153-6564-4b3f-b5e1-7e8e9dac548f>
Mon, 13 Oct 2008 17:19:53 +0000 (17:19 +0000)
git-svn-id: http://svn.dsource.org/projects/druntime/trunk@24 4a9d5153-6564-4b3f-b5e1-7e8e9dac548f

import/object.di
src/compiler/dmd/dmain2.d
src/core/exception.d

index 3301d27311a2ea317fc57aecc9b75ec253be1b8d..ff7ad8d988812e81d6e24fd16a581488e0a76826 100644 (file)
@@ -22,6 +22,8 @@ class Object
         void lock();
         void unlock();
     }
+
+    static Object factory(string classname);
 }
 
 struct Interface
index 41419207bbc7d0c2ff198f91eb48e2d6a3e3abc6..ec42e66fe26e10cb67e0486c1ea324544fc91831 100644 (file)
@@ -74,10 +74,13 @@ extern (C) void _d_switch_error( string file, uint line )
     onSwitchError( file, line );
 }
 
+/+
 extern (C) void _d_hidden_func()
 {
     // TODO: Figure out what to do with this routine
+    // it's in exception.d for the moment
 }
++/
 
 bool _d_isHalting = false;
 
index 1dd603d78a81686360b9a49fdb89ef30bdc8c73f..e44392a3e3c50b0f3d77d3acf74df0ce724c26c0 100644 (file)
@@ -29,6 +29,18 @@ class ArrayBoundsException : Exception
 }
 
 
+/**
+ * Thrown on hidden function error.
+ */
+class HiddenFuncException : Exception
+{
+    this(ClassInfo ci)
+    {
+        super("hidden method called for " ~ ci.name);
+    }
+}
+
+
 /**
  * Thrown on an assert error.
  */
@@ -249,3 +261,20 @@ extern (C) void onUnicodeError( string msg, size_t idx )
 {
     throw new UnicodeException( msg, idx );
 }
+
+/********************************************
+ * Called by the compiler generated code.
+ */
+
+extern (C) void _d_hidden_func()
+{   Object o;
+    asm
+    {
+        mov o, EAX;
+    }
+
+    //printf("_d_hidden_func()\n");
+    auto a = new HiddenFuncException(o.classinfo);
+    //printf("assertion %p created\n", a);
+    throw a;
+}