changeset 62:b86e00b938a5 trunk

[svn r66] Added support for imaginary floating point types
author lindquist
date Thu, 25 Oct 2007 09:48:36 +0200
parents 0258a7171a42
children 2c39b5292cf3
files gen/toir.c gen/tollvm.c lphobos/build.sh lphobos/typeinfo1/ti_idouble.d lphobos/typeinfo1/ti_ifloat.d lphobos/typeinfo1/ti_ireal.d lphobos/typeinfo2/ti_Adouble.d lphobos/typeinfo2/ti_Afloat.d lphobos/typeinfo2/ti_Areal.d lphobos/typeinfos1.d test/imag1.d
diffstat 11 files changed, 63 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/gen/toir.c	Thu Oct 25 09:26:17 2007 +0200
+++ b/gen/toir.c	Thu Oct 25 09:48:36 2007 +0200
@@ -328,10 +328,11 @@
 {
     Logger::print("RealExp::toConstElem: %s | %s\n", toChars(), type->toChars());
     LOG_SCOPE;
-    const llvm::Type* fty = LLVM_DtoType(type);
-    if (type->ty == Tfloat32)
+    Type* t = LLVM_DtoDType(type);
+    const llvm::Type* fty = LLVM_DtoType(t);
+    if (t->ty == Tfloat32 || t->ty == Timaginary32)
         return llvm::ConstantFP::get(fty,float(value));
-    else if (type->ty == Tfloat64 || type->ty == Tfloat80)
+    else if (t->ty == Tfloat64 || t->ty == Timaginary64 || t->ty == Tfloat80 || t->ty == Timaginary80)
         return llvm::ConstantFP::get(fty,double(value));
     assert(0);
     return NULL;
--- a/gen/tollvm.c	Thu Oct 25 09:26:17 2007 +0200
+++ b/gen/tollvm.c	Thu Oct 25 09:48:36 2007 +0200
@@ -65,11 +65,20 @@
 
     // floats
     case Tfloat32:
+    case Timaginary32:
         return llvm::Type::FloatTy;
     case Tfloat64:
+    case Timaginary64:
     case Tfloat80:
+    case Timaginary80:
         return llvm::Type::DoubleTy;
 
+    // complex
+    case Tcomplex32:
+    case Tcomplex64:
+    case Tcomplex80:
+        assert(0 && "complex number types not yet implemented");
+
     // pointers
     case Tpointer: {
         assert(t->next);
--- a/lphobos/build.sh	Thu Oct 25 09:26:17 2007 +0200
+++ b/lphobos/build.sh	Thu Oct 25 09:48:36 2007 +0200
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 echo "removing old objects"
-mkdir obj
+mkdir -p obj
 rm -f obj/*.bc
 rm -f ../lib/*.bc
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lphobos/typeinfo1/ti_idouble.d	Thu Oct 25 09:48:36 2007 +0200
@@ -0,0 +1,12 @@
+
+// idouble
+
+module typeinfo1.ti_idouble;
+
+private import typeinfo1.ti_double;
+
+class TypeInfo_p : TypeInfo_d
+{
+    char[] toString() { return "idouble"; }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lphobos/typeinfo1/ti_ifloat.d	Thu Oct 25 09:48:36 2007 +0200
@@ -0,0 +1,12 @@
+
+// ifloat
+
+module typeinfo1.ti_ifloat;
+
+private import typeinfo1.ti_float;
+
+class TypeInfo_o : TypeInfo_f
+{
+    char[] toString() { return "ifloat"; }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lphobos/typeinfo1/ti_ireal.d	Thu Oct 25 09:48:36 2007 +0200
@@ -0,0 +1,12 @@
+
+// ireal
+
+module typeinfo1.ti_ireal;
+
+private import typeinfo1.ti_real;
+
+class TypeInfo_j : TypeInfo_e
+{
+    char[] toString() { return "ireal"; }
+}
+
--- a/lphobos/typeinfo2/ti_Adouble.d	Thu Oct 25 09:26:17 2007 +0200
+++ b/lphobos/typeinfo2/ti_Adouble.d	Thu Oct 25 09:48:36 2007 +0200
@@ -100,7 +100,7 @@
 }
 
 // idouble[]
-version(none)
+
 class TypeInfo_Ap : TypeInfo_Ad
 {
     char[] toString() { return "idouble[]"; }
--- a/lphobos/typeinfo2/ti_Afloat.d	Thu Oct 25 09:26:17 2007 +0200
+++ b/lphobos/typeinfo2/ti_Afloat.d	Thu Oct 25 09:48:36 2007 +0200
@@ -99,7 +99,7 @@
 }
 
 // ifloat[]
-version(none)
+
 class TypeInfo_Ao : TypeInfo_Af
 {
     char[] toString() { return "ifloat[]"; }
--- a/lphobos/typeinfo2/ti_Areal.d	Thu Oct 25 09:26:17 2007 +0200
+++ b/lphobos/typeinfo2/ti_Areal.d	Thu Oct 25 09:48:36 2007 +0200
@@ -101,7 +101,7 @@
 }
 
 // ireal[]
-version(none)
+
 class TypeInfo_Aj : TypeInfo_Ae
 {
     char[] toString() { return "ireal[]"; }
--- a/lphobos/typeinfos1.d	Thu Oct 25 09:26:17 2007 +0200
+++ b/lphobos/typeinfos1.d	Thu Oct 25 09:48:36 2007 +0200
@@ -7,7 +7,10 @@
 typeinfo1.ti_dchar,
 typeinfo1.ti_double,
 typeinfo1.ti_float,
+typeinfo1.ti_ifloat,
+typeinfo1.ti_idouble,
 typeinfo1.ti_int,
+typeinfo1.ti_ireal,
 typeinfo1.ti_long,
 typeinfo1.ti_ptr,
 typeinfo1.ti_real,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/imag1.d	Thu Oct 25 09:48:36 2007 +0200
@@ -0,0 +1,7 @@
+module imag1;
+
+void main()
+{
+    ifloat f = 1.0i;
+    auto x = 2.0i*f;
+}