From 09dc6df0472957d75f6c99cf81c939cb9a31602c Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 19 Feb 2010 14:24:27 +0100 Subject: Work around MSVC2008 compiler crash "e:\pulse\work\91088\src\script\api\qscriptengine.h(360) : fatal error C1001: An internal error has occurred in the compiler. (compiler file 'f:\dd\vctools\compiler\utc\src\p2\main.c[0x510A0530:0x00000007]', line 243) To work around this problem, try simplifying or changing the program near the locations listed above." Apparently the compiler doesn't like that a few functions are inlined. --- src/script/api/qscriptengine.cpp | 15 +++++++++++++++ src/script/api/qscriptengine_p.h | 13 ++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index 739b3fc..33104c9 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -393,6 +393,21 @@ qsreal ToInteger(qsreal n) return sign * ::floor(::fabs(n)); } +#ifdef Q_CC_MSVC +// MSVC2008 crashes if these are inlined. + +QString ToString(qsreal value) +{ + return JSC::UString::from(value); +} + +qsreal ToNumber(const QString &value) +{ + return ((JSC::UString)value).toDouble(); +} + +#endif + void GlobalClientData::mark(JSC::MarkStack& markStack) { engine->mark(markStack); diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h index eff34af..f69e537 100644 --- a/src/script/api/qscriptengine_p.h +++ b/src/script/api/qscriptengine_p.h @@ -106,12 +106,18 @@ namespace QScript inline bool ToBool(qsreal); inline bool ToBool(const QString &); - inline qsreal ToNumber(const QString &); inline qint32 ToInt32(const QString &); inline quint32 ToUInt32(const QString &); inline quint16 ToUInt16(const QString &); inline qsreal ToInteger(const QString &); +#ifdef Q_CC_MSVC + // MSVC2008 crashes if these are inlined. + qsreal ToNumber(const QString &); + QString ToString(qsreal); +#else + inline qsreal ToNumber(const QString &); inline QString ToString(qsreal); +#endif //some conversion helper functions inline QScriptEnginePrivate *scriptEngineFromExec(const JSC::ExecState *exec); @@ -463,6 +469,9 @@ inline QScriptEnginePrivate *scriptEngineFromExec(const JSC::ExecState *exec) return static_cast(exec->globalData().clientData)->engine; } +#ifndef Q_CC_MSVC +// MSVC2008 crashes if these are inlined. + inline QString ToString(qsreal value) { return JSC::UString::from(value); @@ -473,6 +482,8 @@ inline qsreal ToNumber(const QString &value) return ((JSC::UString)value).toDouble(); } +#endif + inline qint32 ToInt32(const QString &value) { return ToInt32(ToNumber(value)); -- cgit v0.12