Printing CData and CType

Currently console.log doesn't show type information of CData. Running  the following code shows only partial value information.

let { ctypes } = Components.utils.import("resource://gre/modules/ctypes.jsm", {});
let i = ctypes.int32_t(10);
console.log(i);
let Point = ctypes.StructType("Point", [{ x: ctypes.int32_t }, { y: ctypes.int32_t }])
let p = Point(10, 20);
console.log(p);
let pp = p.address();
console.log(pp);

The result will be as following:

CData { value: 10 }
CData { x: 10, y: 20 }
CData { contents: CData }

To see more descriptive information, you can use .toSource().

let { ctypes } = Components.utils.import("resource://gre/modules/ctypes.jsm", {});
let i = ctypes.int32_t(10);
console.log(i.toSource());
let Point = ctypes.StructType("Point", [{ x: ctypes.int32_t }, { y: ctypes.int32_t }])
let p = Point(10, 20);
console.log(p.toSource());
let pp = p.address();
console.log(pp.toSource());

The result will be :

ctypes.int32_t(10)
Point(10, 20)
Point.ptr(ctypes.UInt64("0x15fdafb08"))

To see the complete type information, you can use .constructor.toSource(), to print the source of CType.

let { ctypes } = Components.utils.import("resource://gre/modules/ctypes.jsm", {});
let i = ctypes.int32_t(10);
console.log(i.constructor.toSource());
let Point = ctypes.StructType("Point", [{ x: ctypes.int32_t }, { y: ctypes.int32_t }])
let p = Point(10, 20);
console.log(p.constructor.toSource());
let pp = p.address();
console.log(pp.constructor.toSource());

The result will be as per the following:

ctypes.int32_t
ctypes.StructType("Point", [{ "x": ctypes.int32_t }, { "y": ctypes.int32_t }])
ctypes.StructType("Point", [{ "x": ctypes.int32_t }, { "y": ctypes.int32_t }]).ptr