浏览代码

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 年之前
父节点
当前提交
1ff626ba47
共有 2 个文件被更改,包括 14 次插入2 次删除
  1. 7 1
      src/debugger/godot3/server_controller.ts
  2. 7 1
      src/debugger/godot4/server_controller.ts

+ 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]);