Prechádzať zdrojové kódy

Fix object id decoded as wrong signedness. (#670)

* Fix id being decoded as an signed integer instead of an unsigned integer. (#660)

---------

Co-authored-by: karstensensensen <[email protected]>
David Kincaid 1 rok pred
rodič
commit
1ff626ba47

+ 7 - 1
src/debugger/godot3/server_controller.ts

@@ -377,10 +377,16 @@ export class ServerController {
 				break;
 			}
 			case "message:inspect_object": {
-				const id = BigInt(command.parameters[0]);
+				let id = BigInt(command.parameters[0]);
 				const className: string = command.parameters[1];
 				const properties: any[] = command.parameters[2];
 
+				// message:inspect_object returns the id as an unsigned 64 bit integer, but it is decoded as a signed 64 bit integer,
+				// thus we need to convert it to its equivalent unsigned value here.
+				if (id < 0) {
+					id = id + BigInt(2) ** BigInt(64);
+				}
+
 				const rawObject = new RawObject(className);
 				properties.forEach((prop) => {
 					rawObject.set(prop[0], prop[5]);

+ 7 - 1
src/debugger/godot4/server_controller.ts

@@ -376,10 +376,16 @@ export class ServerController {
 				break;
 			}
 			case "scene:inspect_object": {
-				const id = BigInt(command.parameters[0]);
+				let id = BigInt(command.parameters[0]);
 				const className: string = command.parameters[1];
 				const properties: any[] = command.parameters[2];
 
+				// message:inspect_object returns the id as an unsigned 64 bit integer, but it is decoded as a signed 64 bit integer,
+				// thus we need to convert it to its equivalent unsigned value here.
+				if (id < 0) {
+					id = id + BigInt(2) ** BigInt(64);
+				}
+
 				const rawObject = new RawObject(className);
 				properties.forEach((prop) => {
 					rawObject.set(prop[0], prop[5]);