Latest changes to compile LDC with MSVC.

This commit is contained in:
kai
2012-06-06 17:29:21 +02:00
parent 04ea9ceefc
commit 086e0d251b
4 changed files with 29 additions and 25 deletions

View File

@@ -16,12 +16,14 @@
struct complex_t
{
long double re;
long double im;
longdouble re;
longdouble im;
complex_t() { this->re = 0; this->im = 0; }
complex_t(long double re) { this->re = re; this->im = 0; }
complex_t(long double re, long double im) { this->re = re; this->im = im; }
complex_t(longdouble re) { this->re = re; this->im = 0; }
complex_t(double re) { this->re = re; this->im = 0; }
complex_t(longdouble re, longdouble im) { this->re = re; this->im = im; }
complex_t(double re, double im) { this->re = re; this->im = im; }
complex_t operator + (complex_t y) { complex_t r; r.re = re + y.re; r.im = im + y.im; return r; }
complex_t operator - (complex_t y) { complex_t r; r.re = re - y.re; r.im = im - y.im; return r; }
@@ -30,9 +32,9 @@ struct complex_t
complex_t operator / (complex_t y)
{
long double abs_y_re = y.re < 0 ? -y.re : y.re;
long double abs_y_im = y.im < 0 ? -y.im : y.im;
long double r, den;
longdouble abs_y_re = y.re < 0 ? -y.re : y.re;
longdouble abs_y_im = y.im < 0 ? -y.im : y.im;
longdouble r, den;
if (abs_y_re < abs_y_im)
{
@@ -56,17 +58,17 @@ struct complex_t
int operator != (complex_t y) { return re != y.re || im != y.im; }
};
inline complex_t operator * (long double x, complex_t y) { return complex_t(x) * y; }
inline complex_t operator * (complex_t x, long double y) { return x * complex_t(y); }
inline complex_t operator / (complex_t x, long double y) { return x / complex_t(y); }
inline complex_t operator * (longdouble x, complex_t y) { return complex_t(x) * y; }
inline complex_t operator * (complex_t x, longdouble y) { return x * complex_t(y); }
inline complex_t operator / (complex_t x, longdouble y) { return x / complex_t(y); }
inline long double creall(complex_t x)
inline longdouble creall(complex_t x)
{
return x.re;
}
inline long double cimagl(complex_t x)
inline longdouble cimagl(complex_t x)
{
return x.im;
}

View File

@@ -1074,13 +1074,13 @@ uinteger_t Expression::toUInteger()
real_t Expression::toReal()
{
error("Floating point constant expression expected instead of %s", toChars());
return 0;
return ldouble(0);
}
real_t Expression::toImaginary()
{
error("Floating point constant expression expected instead of %s", toChars());
return 0;
return ldouble(0);
}
complex_t Expression::toComplex()
@@ -1089,7 +1089,7 @@ complex_t Expression::toComplex()
#ifdef IN_GCC
return complex_t(real_t(0)); // %% nicer
#else
return 0;
return 0.0;
#endif
}
@@ -1473,14 +1473,14 @@ real_t IntegerExp::toReal()
toInteger();
t = type->toBasetype();
if (t->ty == Tuns64)
return (real_t)(d_uns64)value;
return ldouble((d_uns64)value);
else
return (real_t)(d_int64)value;
return ldouble((d_int64)value);
}
real_t IntegerExp::toImaginary()
{
return (real_t) 0;
return ldouble(0);
}
complex_t IntegerExp::toComplex()
@@ -1722,12 +1722,12 @@ uinteger_t RealExp::toUInteger()
real_t RealExp::toReal()
{
return type->isreal() ? value : 0;
return type->isreal() ? value : ldouble(0);
}
real_t RealExp::toImaginary()
{
return type->isreal() ? 0 : value;
return type->isreal() ? ldouble(0) : value;
}
complex_t RealExp::toComplex()
@@ -9251,7 +9251,7 @@ Expression *DivAssignExp::semantic(Scope *sc)
if (t1->isreal())
{ // x/iv = i(-x/v)
// Therefore, the result is 0
e2 = new CommaExp(loc, e2, new RealExp(loc, 0, t1));
e2 = new CommaExp(loc, e2, new RealExp(loc, ldouble(0), t1));
e2->type = t1;
e = new AssignExp(loc, e1, e2);
e->type = t1;

View File

@@ -371,8 +371,10 @@ extern Global global;
*/
#define WINDOWS_SEH (_WIN32 && __DMC__)
#include "longdouble.h"
#ifdef __DMC__
#include <complex.h>
typedef _Complex long double complex_t;
#else
#ifndef IN_GCC
@@ -403,7 +405,7 @@ typedef uint64_t d_uns64;
typedef float d_float32;
typedef double d_float64;
typedef long double d_float80;
typedef longdouble d_float80;
typedef d_uns8 d_char;
typedef d_uns16 d_wchar;
@@ -412,7 +414,7 @@ typedef d_uns32 d_dchar;
#ifdef IN_GCC
#include "d-gcc-real.h"
#else
typedef long double real_t;
typedef longdouble real_t;
#endif
// Modify OutBuffer::writewchar to write the correct size of wchar

View File

@@ -1451,7 +1451,7 @@ Expression *TypeBasic::dotExp(Scope *sc, Expression *e, Identifier *ident)
case Timaginary64: t = tfloat64; goto L2;
case Timaginary80: t = tfloat80; goto L2;
L2:
e = new RealExp(e->loc, 0.0, t);
e = new RealExp(e->loc, ldouble(0.0), t);
break;
default:
@@ -1481,7 +1481,7 @@ Expression *TypeBasic::dotExp(Scope *sc, Expression *e, Identifier *ident)
case Tfloat32:
case Tfloat64:
case Tfloat80:
e = new RealExp(e->loc, 0.0, this);
e = new RealExp(e->loc, ldouble(0.0), this);
break;
default: