Skip to content

Commit 8d69895

Browse files
committed
fix(interop): Construct Pointer from a wrapped number
This adds support for the following syntax `interop.Pointer(new Number(number))`.
1 parent 56361f8 commit 8d69895

2 files changed

Lines changed: 14 additions & 0 deletions

File tree

src/NativeScript/Marshalling/Pointer/PointerConstructor.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ EncodedJSValue JSC_HOST_CALL PointerConstructor::constructPointerInstance(ExecSt
3535
if (execState->argumentCount() == 1) {
3636
auto arg0 = execState->argument(0);
3737

38+
if (arg0.isObject()) {
39+
if (JSWrapperObject* wrapper = jsCast<JSWrapperObject*>(arg0)) {
40+
arg0 = wrapper->internalValue();
41+
}
42+
}
43+
3844
if (!arg0.isAnyInt()) {
3945
auto scope = DECLARE_THROW_SCOPE(execState->vm());
4046
return throwVMError(execState, scope, createError(execState, "Pointer constructor's first arg must be an integer."_s));

tests/TestRunner/app/Marshalling/PointerTests.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ describe(module.id, function () {
1818
expect(pointer.toString()).toBe(`<Pointer: ${hexMinusOneForCurrentBitness}>`);
1919
});
2020

21+
it("Pointer from a wrapped Number", function () {
22+
const number = 0x12abcdef;
23+
var pointer = new interop.Pointer(new Number(number));
24+
expect(pointer instanceof interop.Pointer).toBe(true);
25+
expect(pointer.toNumber()).toBe(number);
26+
expect(pointer.toString()).toBe(`<Pointer: 0x${number.toString(16)}>`);
27+
});
28+
2129
it("PointerArithmetic", function () {
2230
var pointer = new interop.Pointer(0xFFFFFFFE);
2331
expect(pointer.toNumber()).toBe(0xFFFFFFFE);

0 commit comments

Comments
 (0)