fix: 修复增强预处理器和缺失的字符串函数

This commit is contained in:
寂静的羽夏 2025-05-06 13:44:59 +08:00
parent 960de3afb6
commit b49523e952
7 changed files with 194 additions and 85 deletions

View File

@ -8,7 +8,7 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(PROJECT_VERSION "2.2.2")
set(PROJECT_VERSION "2.2.3")
find_package(
QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network Concurrent
@ -40,7 +40,6 @@ add_definitions(-DWINGHEX_VERSION="${PROJECT_VERSION}"
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/WINGHEX_VERSION" ${PROJECT_VERSION})
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/QT_VERSION" ${QT_VERSION_MAJOR})
if(WIN32)
find_package(QT NAMES Qt6 Qt5 REQUIRED AxContainer)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED AxContainer)

View File

@ -2678,13 +2678,13 @@
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="816"/>
<location filename="../../src/class/aspreprocesser.cpp" line="813"/>
<source>Failed to open script file </source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="651"/>
<location filename="../../src/class/aspreprocesser.cpp" line="699"/>
<location filename="../../src/class/aspreprocesser.cpp" line="648"/>
<location filename="../../src/class/aspreprocesser.cpp" line="694"/>
<source>Invalid file name for #include; it contains a line-break: </source>
<translation>#include </translation>
</message>
@ -2699,55 +2699,54 @@
<translation>ifdef </translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="279"/>
<location filename="../../src/class/aspreprocesser.cpp" line="378"/>
<location filename="../../src/class/aspreprocesser.cpp" line="393"/>
<location filename="../../src/class/aspreprocesser.cpp" line="454"/>
<location filename="../../src/class/aspreprocesser.cpp" line="490"/>
<location filename="../../src/class/aspreprocesser.cpp" line="526"/>
<location filename="../../src/class/aspreprocesser.cpp" line="566"/>
<location filename="../../src/class/aspreprocesser.cpp" line="369"/>
<location filename="../../src/class/aspreprocesser.cpp" line="384"/>
<location filename="../../src/class/aspreprocesser.cpp" line="445"/>
<location filename="../../src/class/aspreprocesser.cpp" line="481"/>
<location filename="../../src/class/aspreprocesser.cpp" line="517"/>
<location filename="../../src/class/aspreprocesser.cpp" line="557"/>
<source>UnexceptedToken</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="315"/>
<location filename="../../src/class/aspreprocesser.cpp" line="306"/>
<source>CalIfFailed</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="412"/>
<location filename="../../src/class/aspreprocesser.cpp" line="461"/>
<location filename="../../src/class/aspreprocesser.cpp" line="403"/>
<location filename="../../src/class/aspreprocesser.cpp" line="452"/>
<source>InvalidDef</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="439"/>
<location filename="../../src/class/aspreprocesser.cpp" line="430"/>
<source>ReservedMarcoType</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="445"/>
<location filename="../../src/class/aspreprocesser.cpp" line="436"/>
<source>MarcoNotFound:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="474"/>
<location filename="../../src/class/aspreprocesser.cpp" line="514"/>
<location filename="../../src/class/aspreprocesser.cpp" line="465"/>
<location filename="../../src/class/aspreprocesser.cpp" line="505"/>
<source>NoMatchingIf</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="497"/>
<location filename="../../src/class/aspreprocesser.cpp" line="488"/>
<source>DupElseDef</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="718"/>
<location filename="../../src/class/aspreprocesser.cpp" line="714"/>
<source>Invalid file name for #include; it contains a line-break or unpaired symbol</source>
<translation>#include </translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="750"/>
<location filename="../../src/class/aspreprocesser.cpp" line="747"/>
<source>Invalid #pragma directive</source>
<translation>#pragma </translation>
</message>
@ -2849,7 +2848,7 @@
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="473"/>
<location filename="../../src/class/scriptmachine.cpp" line="2107"/>
<location filename="../../src/class/scriptmachine.cpp" line="2168"/>
<source>Code must be exec in the main thread</source>
<translation>线</translation>
</message>
@ -2860,8 +2859,8 @@
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="528"/>
<location filename="../../src/class/scriptmachine.cpp" line="2156"/>
<location filename="../../src/class/scriptmachine.cpp" line="2272"/>
<location filename="../../src/class/scriptmachine.cpp" line="2217"/>
<location filename="../../src/class/scriptmachine.cpp" line="2333"/>
<source>Script failed to build</source>
<translation></translation>
</message>
@ -2882,19 +2881,19 @@
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="615"/>
<location filename="../../src/class/scriptmachine.cpp" line="2206"/>
<location filename="../../src/class/scriptmachine.cpp" line="2267"/>
<source>The script failed with an exception</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="624"/>
<location filename="../../src/class/scriptmachine.cpp" line="2215"/>
<location filename="../../src/class/scriptmachine.cpp" line="2276"/>
<source>The script was aborted</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="632"/>
<location filename="../../src/class/scriptmachine.cpp" line="2223"/>
<location filename="../../src/class/scriptmachine.cpp" line="2284"/>
<source>The script terminated unexpectedly</source>
<translation>退</translation>
</message>
@ -4405,18 +4404,18 @@
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="2063"/>
<location filename="../../src/class/scriptmachine.cpp" line="2075"/>
<location filename="../../src/class/scriptmachine.cpp" line="2103"/>
<location filename="../../src/class/scriptmachine.cpp" line="2115"/>
<source>Assert failed</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="2254"/>
<location filename="../../src/class/scriptmachine.cpp" line="2315"/>
<source>BadDecl:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="2263"/>
<location filename="../../src/class/scriptmachine.cpp" line="2324"/>
<source>GlobalBadDecl</source>
<translation></translation>
</message>

View File

@ -2678,13 +2678,13 @@
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="816"/>
<location filename="../../src/class/aspreprocesser.cpp" line="813"/>
<source>Failed to open script file </source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="651"/>
<location filename="../../src/class/aspreprocesser.cpp" line="699"/>
<location filename="../../src/class/aspreprocesser.cpp" line="648"/>
<location filename="../../src/class/aspreprocesser.cpp" line="694"/>
<source>Invalid file name for #include; it contains a line-break: </source>
<translation>#include </translation>
</message>
@ -2699,55 +2699,54 @@
<translation>ifdef </translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="279"/>
<location filename="../../src/class/aspreprocesser.cpp" line="378"/>
<location filename="../../src/class/aspreprocesser.cpp" line="393"/>
<location filename="../../src/class/aspreprocesser.cpp" line="454"/>
<location filename="../../src/class/aspreprocesser.cpp" line="490"/>
<location filename="../../src/class/aspreprocesser.cpp" line="526"/>
<location filename="../../src/class/aspreprocesser.cpp" line="566"/>
<location filename="../../src/class/aspreprocesser.cpp" line="369"/>
<location filename="../../src/class/aspreprocesser.cpp" line="384"/>
<location filename="../../src/class/aspreprocesser.cpp" line="445"/>
<location filename="../../src/class/aspreprocesser.cpp" line="481"/>
<location filename="../../src/class/aspreprocesser.cpp" line="517"/>
<location filename="../../src/class/aspreprocesser.cpp" line="557"/>
<source>UnexceptedToken</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="315"/>
<location filename="../../src/class/aspreprocesser.cpp" line="306"/>
<source>CalIfFailed</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="412"/>
<location filename="../../src/class/aspreprocesser.cpp" line="461"/>
<location filename="../../src/class/aspreprocesser.cpp" line="403"/>
<location filename="../../src/class/aspreprocesser.cpp" line="452"/>
<source>InvalidDef</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="439"/>
<location filename="../../src/class/aspreprocesser.cpp" line="430"/>
<source>ReservedMarcoType</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="445"/>
<location filename="../../src/class/aspreprocesser.cpp" line="436"/>
<source>MarcoNotFound:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="474"/>
<location filename="../../src/class/aspreprocesser.cpp" line="514"/>
<location filename="../../src/class/aspreprocesser.cpp" line="465"/>
<location filename="../../src/class/aspreprocesser.cpp" line="505"/>
<source>NoMatchingIf</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="497"/>
<location filename="../../src/class/aspreprocesser.cpp" line="488"/>
<source>DupElseDef</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="718"/>
<location filename="../../src/class/aspreprocesser.cpp" line="714"/>
<source>Invalid file name for #include; it contains a line-break or unpaired symbol</source>
<translation>#include </translation>
</message>
<message>
<location filename="../../src/class/aspreprocesser.cpp" line="750"/>
<location filename="../../src/class/aspreprocesser.cpp" line="747"/>
<source>Invalid #pragma directive</source>
<translation>#pragma </translation>
</message>
@ -2849,7 +2848,7 @@
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="473"/>
<location filename="../../src/class/scriptmachine.cpp" line="2107"/>
<location filename="../../src/class/scriptmachine.cpp" line="2168"/>
<source>Code must be exec in the main thread</source>
<translation></translation>
</message>
@ -2860,8 +2859,8 @@
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="528"/>
<location filename="../../src/class/scriptmachine.cpp" line="2156"/>
<location filename="../../src/class/scriptmachine.cpp" line="2272"/>
<location filename="../../src/class/scriptmachine.cpp" line="2217"/>
<location filename="../../src/class/scriptmachine.cpp" line="2333"/>
<source>Script failed to build</source>
<translation></translation>
</message>
@ -2882,19 +2881,19 @@
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="615"/>
<location filename="../../src/class/scriptmachine.cpp" line="2206"/>
<location filename="../../src/class/scriptmachine.cpp" line="2267"/>
<source>The script failed with an exception</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="624"/>
<location filename="../../src/class/scriptmachine.cpp" line="2215"/>
<location filename="../../src/class/scriptmachine.cpp" line="2276"/>
<source>The script was aborted</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="632"/>
<location filename="../../src/class/scriptmachine.cpp" line="2223"/>
<location filename="../../src/class/scriptmachine.cpp" line="2284"/>
<source>The script terminated unexpectedly</source>
<translation>退</translation>
</message>
@ -4405,18 +4404,18 @@
<translation>調</translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="2063"/>
<location filename="../../src/class/scriptmachine.cpp" line="2075"/>
<location filename="../../src/class/scriptmachine.cpp" line="2103"/>
<location filename="../../src/class/scriptmachine.cpp" line="2115"/>
<source>Assert failed</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="2254"/>
<location filename="../../src/class/scriptmachine.cpp" line="2315"/>
<source>BadDecl:</source>
<translation></translation>
</message>
<message>
<location filename="../../src/class/scriptmachine.cpp" line="2263"/>
<location filename="../../src/class/scriptmachine.cpp" line="2324"/>
<source>GlobalBadDecl</source>
<translation></translation>
</message>

View File

@ -32,13 +32,13 @@
Q_GLOBAL_STATIC_WITH_ARGS(
QByteArrayList, DEFAULT_MARCO,
({// special marcos
"__LINE__", "__SECTION__",
"__LINE__", "__SECTION__", "__SECTION_BASE__",
// functions
"__AS_ARRAY__", "__AS_ANY__", "__AS_GRID__", "__AS_HANDLE__",
"__AS_MATH__", "__AS_WEAKREF__", "__AS_COROUTINE__", "__WING_FILE__",
"__WING_STRING__", "__WING_COLOR__", "__WING_JSON__", "__WING_REGEX__",
"__WING_DICTIONARY__", "__WING_PRINT_VAR__", "__WING_PRINT_LN__",
"__AS_PROMISE__"}));
"__AS_PROMISE__", "__WING_CLIPBOARD__"}));
AsPreprocesser::AsPreprocesser(asIScriptEngine *engine) : engine(engine) {
Q_ASSERT(engine);
@ -273,15 +273,6 @@ int AsPreprocesser::processScriptSection(const QByteArray &script,
1, asMSGTYPE_ERROR, str.toUtf8());
return asERROR;
}
// ensure end line
if (endLinePassFailed(modifiedScript, pos)) {
auto str = QObject::tr("UnexceptedToken");
engine->WriteMessage(SECTION,
getLineCount(modifiedScript, pos),
1, asMSGTYPE_ERROR, str.toUtf8());
return asERROR;
}
} else if (isIf) {
if (_isCodeCompleteMode) {
auto pos = modifiedScript.indexOf('\n', start);
@ -580,6 +571,12 @@ int AsPreprocesser::processScriptSection(const QByteArray &script,
modifiedScript.replace(pos, len, data);
pos += data.length();
continue;
} else if (word == "__SECTION_BASE__") {
auto data = QFileInfo(SECTION).baseName().toUtf8();
data.prepend('"').append('"');
modifiedScript.replace(pos, len, data);
pos += data.length();
continue;
} else {
auto rword = findReplaceResult(word);
if (word != rword) {
@ -693,17 +690,16 @@ int AsPreprocesser::processScriptSection(const QByteArray &script,
auto p = includefile.indexOf('\n');
auto ws = includefile.indexOf(' ');
if (!includefile.isEmpty() && p >= 0 && ws >= 0) {
// TODO: Show the correct line number for
// the error
auto str =
QObject::tr(
"Invalid file name for #include; "
"it contains a line-break: ") +
QStringLiteral("'") + includefile.left(p) +
QStringLiteral("'");
engine->WriteMessage(sectionname.toUtf8(), 0, 0,
asMSGTYPE_ERROR,
str.toUtf8());
engine->WriteMessage(
sectionname.toUtf8(),
getLineCount(modifiedScript, pos), 1,
asMSGTYPE_ERROR, str.toUtf8());
} else {
// Store it for later processing
includes.append({includefile, false});
@ -744,9 +740,10 @@ int AsPreprocesser::processScriptSection(const QByteArray &script,
sectionname, pragmaParam)
: -1;
if (r < 0) {
// TODO: Report the correct line number
engine->WriteMessage(
sectionname.toUtf8(), 0, 0, asMSGTYPE_ERROR,
sectionname.toUtf8(),
getLineCount(modifiedScript, pos), 1,
asMSGTYPE_ERROR,
QObject::tr("Invalid #pragma directive")
.toUtf8());
return r;

View File

@ -43,6 +43,8 @@
#include "scriptaddon/scriptqstring.h"
#include "scriptaddon/scriptregex.h"
#include <QClipboard>
#include <QMimeData>
#include <QProcess>
#include <QScopeGuard>
@ -153,8 +155,6 @@ bool ScriptMachine::configureEngine() {
return false;
}
_engine->SetDefaultAccessMask(0x1);
// we need utf8, the default is what we want
_engine->SetEngineProperty(asEP_EXPAND_DEF_ARRAY_TO_TMPL, true);
_engine->SetEngineProperty(asEP_DISALLOW_EMPTY_LIST_ELEMENTS, true);
@ -1998,6 +1998,8 @@ void ScriptMachine::translation() {
}
void ScriptMachine::registerEngineAddon(asIScriptEngine *engine) {
// all modules can access
engine->SetDefaultAccessMask(0x3);
RegisterScriptArray(engine, true);
RegisterQString(engine);
RegisterScriptRegex(engine);
@ -2012,9 +2014,12 @@ void ScriptMachine::registerEngineAddon(asIScriptEngine *engine) {
RegisterScriptHandle(engine);
RegisterColor(engine);
RegisterQJson(engine);
engine->SetDefaultAccessMask(0x1);
RegisterScriptFile(engine);
registerExceptionRoutines(engine);
registerEngineAssert(engine);
registerEngineClipboard(engine);
AsDirectPromise::Register(engine);
}
@ -2051,6 +2056,41 @@ void ScriptMachine::registerEngineAssert(asIScriptEngine *engine) {
}
}
void ScriptMachine::registerEngineClipboard(asIScriptEngine *engine) {
int r = engine->SetDefaultNamespace("clipboard");
Q_ASSERT(r >= 0);
Q_UNUSED(r);
// The string type must be available
Q_ASSERT(engine->GetTypeInfoByDecl("string"));
if (strstr(asGetLibraryOptions(), "AS_MAX_PORTABILITY") == 0) {
r = engine->RegisterGlobalFunction(
"void setText(const string &in text)", asFUNCTION(clip_setText),
asCALL_CDECL);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterGlobalFunction(
"void setBinary(const uint8[]@ data)", asFUNCTION(clip_setBinary),
asCALL_CDECL);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
} else {
r = engine->RegisterGlobalFunction(
"void setText(const string &in text)", WRAP_FN(clip_setText),
asCALL_GENERIC);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterGlobalFunction(
"void setBinary(const uint8[]@ data)", WRAP_FN(clip_setBinary),
asCALL_GENERIC);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
}
engine->SetDefaultNamespace("");
}
void ScriptMachine::registerCallBack(ConsoleMode mode,
const RegCallBacks &callbacks) {
_regcalls.insert(mode, callbacks);
@ -2079,6 +2119,27 @@ void ScriptMachine::scriptAssert_X(bool b, const QString &msg) {
}
}
void ScriptMachine::clip_setText(const QString &text) {
qApp->clipboard()->setText(text);
}
void ScriptMachine::clip_setBinary(const CScriptArray &array) {
QByteArray buffer;
buffer.reserve(array.GetSize());
array.AddRef();
for (asUINT i = 0; i < array.GetSize(); ++i) {
auto item = reinterpret_cast<const asBYTE *>(array.At(i));
buffer.append(*item);
}
array.Release();
auto c = qApp->clipboard();
auto mime = new QMimeData;
mime->setData(QStringLiteral("application/octet-stream"),
buffer); // don't use setText()
c->setMimeData(mime);
}
void ScriptMachine::scriptThrow(const QString &msg) {
asIScriptContext *ctx = asGetActiveContext();
if (ctx) {

View File

@ -28,6 +28,8 @@
#include <QObject>
#include <QQueue>
class CScriptArray;
class ScriptMachine : public QObject {
Q_OBJECT
private:
@ -118,6 +120,7 @@ public:
static void registerEngineAddon(asIScriptEngine *engine);
static void registerEngineAssert(asIScriptEngine *engine);
static void registerEngineClipboard(asIScriptEngine *engine);
void registerCallBack(ConsoleMode mode, const RegCallBacks &callbacks);
@ -132,6 +135,9 @@ public:
static void scriptAssert(bool b);
static void scriptAssert_X(bool b, const QString &msg);
static void clip_setText(const QString &text);
static void clip_setBinary(const CScriptArray &array);
static void scriptThrow(const QString &msg);
static QString scriptGetExceptionInfo();

View File

@ -148,6 +148,10 @@ static void ConstructString(QString *thisPointer) {
new (thisPointer) QString();
}
static void ConstructStringChar(const QChar &ch, QString *thisPointer) {
new (thisPointer) QString(ch);
}
static void CopyConstructString(const QString &other, QString *thisPointer) {
new (thisPointer) QString(other);
}
@ -230,6 +234,16 @@ static QString &AddAssignFloatToString(float f, QString &dest) {
return dest;
}
static QString &AssignCharToString(const QChar &ch, QString &dest) {
dest = ch;
return dest;
}
static QString &AddAssignCharToString(const QChar &ch, QString &dest) {
dest += ch;
return dest;
}
static QString &AssignBoolToString(bool b, QString &dest) {
dest = b ? QStringLiteral("true") : QStringLiteral("false");
return dest;
@ -256,6 +270,14 @@ static QString AddFloatString(float f, const QString &str) {
return QString::number(f) + str;
}
static QString AddStringChar(const QString &str, const QChar &ch) {
return str + ch;
}
static QString AddCharString(const QChar &ch, const QString &str) {
return ch + str;
}
static QString AddStringBool(const QString &str, bool b) {
return str + (b ? QStringLiteral("true") : QStringLiteral("false"));
}
@ -265,7 +287,7 @@ static QString AddBoolString(bool b, const QString &str) {
}
#endif
static char *StringCharAt(unsigned int i, QString &str) {
static QChar *StringCharAt(unsigned int i, QString &str) {
if (asDWORD(i) >= asDWORD(str.size())) {
// Set a script exception
asIScriptContext *ctx = asGetActiveContext();
@ -275,7 +297,7 @@ static char *StringCharAt(unsigned int i, QString &str) {
return nullptr;
}
return reinterpret_cast<char *>(str.data() + i);
return str.data() + i;
}
// AngelScript signature:
@ -595,6 +617,11 @@ void RegisterQString_Native(asIScriptEngine *engine) {
asCALL_CDECL_OBJLAST);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterObjectBehaviour(
"string", asBEHAVE_CONSTRUCT, "void f(const char &in)",
asFUNCTION(ConstructStringChar), asCALL_CDECL_OBJLAST);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterObjectMethod(
"string", "string &opAssign(const string &in)",
asMETHODPR(QString, operator=, (const QString &), QString &),
@ -717,8 +744,29 @@ void RegisterQString_Native(asIScriptEngine *engine) {
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterObjectMethod(
"string", "string &opAssign(const char &in)",
asFUNCTION(AssignCharToString), asCALL_CDECL_OBJLAST);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterObjectMethod(
"string", "string &opAddAssign(const char &in)",
asFUNCTION(AddAssignCharToString), asCALL_CDECL_OBJLAST);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterObjectMethod(
"string", "string opAdd(const char &in) const",
asFUNCTION(AddStringChar), asCALL_CDECL_OBJFIRST);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterObjectMethod(
"string", "string opAdd_r(const char &in) const",
asFUNCTION(AddCharString), asCALL_CDECL_OBJLAST);
Q_ASSERT(r >= 0);
Q_UNUSED(r);
r = engine->RegisterObjectMethod("string", "string &opAssign(float)",
asFUNCTION(AssignFloatToString),
asFUNCTION(AssignCharToString),
asCALL_CDECL_OBJLAST);
Q_ASSERT(r >= 0);
Q_UNUSED(r);