aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Costa <miguel.costa@qt.io>2021-11-09 14:31:56 +0100
committerMiguel Costa <miguel.costa@qt.io>2021-11-16 16:07:48 +0000
commit91339da1919ba55d3b2463b011d6c58a5247e84d (patch)
tree72b58354a98cff15e26ff773941119a1347e9a41
parenta0b78490b92fe2783e8f6dde88e631c7367ac902 (diff)
Use 64-bit pointers in VsQml protocol
The QML syntax tree protocol between the Qt VS Tools and VsQml will now use a 64-bit representation for pointers. Previously, only 32 bits were used when marshaling a pointer value. This is incompatible with VS 2022, which is a 64-bit application. Task-number: QTVSADDINBUG-920 Change-Id: I3fe97618b1363c2ad39ba0ef352532d2660916c6 Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r--QtVsTools.Package/QML/Parser/QmlParserInterop.cs4
-rw-r--r--VsQml/astvisitor.cpp6
2 files changed, 8 insertions, 2 deletions
diff --git a/QtVsTools.Package/QML/Parser/QmlParserInterop.cs b/QtVsTools.Package/QML/Parser/QmlParserInterop.cs
index 9d505b5d..89064878 100644
--- a/QtVsTools.Package/QML/Parser/QmlParserInterop.cs
+++ b/QtVsTools.Package/QML/Parser/QmlParserInterop.cs
@@ -306,7 +306,9 @@ namespace QtVsTools.Qml
IntPtr ptrRef;
try {
- ptrRef = new IntPtr(nodeData.ReadInt32());
+ long ptrHi = nodeData.ReadInt32();
+ long ptrLo = nodeData.ReadInt32();
+ ptrRef = new IntPtr((ptrHi << 32) | (ptrLo & 0xFFFFFFFFL));
} catch (Exception) {
return;
}
diff --git a/VsQml/astvisitor.cpp b/VsQml/astvisitor.cpp
index c5313329..b863b650 100644
--- a/VsQml/astvisitor.cpp
+++ b/VsQml/astvisitor.cpp
@@ -67,7 +67,11 @@ private:
void marshalPointer(QVector<int> &nodeData, void *ptr)
{
- nodeData.append(reinterpret_cast<int>(ptr));
+ auto ptrRef = reinterpret_cast<long long>(ptr);
+ auto ptrHi = ptrRef >> 32;
+ auto ptrLo = ptrRef & 0xFFFFFFFFLL;
+ nodeData.append(int(ptrHi));
+ nodeData.append(int(ptrLo));
}
void marshalNode(QVector<int> &nodeData, Node *node)