porffor 0.18.28 → 0.18.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compiler/builtins/weakref.ts +33 -0
- package/compiler/generated_builtins.js +13 -0
- package/compiler/types.js +3 -1
- package/compiler/wrap.js +7 -0
- package/package.json +1 -1
- package/runner/index.js +1 -1
@@ -0,0 +1,33 @@
|
|
1
|
+
import type {} from './porffor.d.ts';
|
2
|
+
|
3
|
+
export const WeakRef = function (target: any): WeakRef {
|
4
|
+
if (!new.target) throw new TypeError("Constructor WeakRef requires 'new'");
|
5
|
+
|
6
|
+
const targetType: i32 = Porffor.rawType(target);
|
7
|
+
if (Porffor.fastOr(targetType < 0x04)) throw new TypeError('Target for WeakRef needs to be an object or symbol');
|
8
|
+
|
9
|
+
const out: WeakRef = Porffor.allocateBytes(9);
|
10
|
+
|
11
|
+
Porffor.wasm`local.get ${out}
|
12
|
+
i32.to_u
|
13
|
+
local.get ${target}
|
14
|
+
f64.store 0 0
|
15
|
+
|
16
|
+
local.get ${out}
|
17
|
+
i32.to_u
|
18
|
+
local.get ${target+1}
|
19
|
+
i32.store8 0 8`;
|
20
|
+
|
21
|
+
return out;
|
22
|
+
};
|
23
|
+
|
24
|
+
export const __WeakRef_prototype_deref = (_this: WeakRef) => {
|
25
|
+
Porffor.wasm`local.get ${_this}
|
26
|
+
i32.to_u
|
27
|
+
f64.load 0 0
|
28
|
+
|
29
|
+
local.get ${_this}
|
30
|
+
i32.to_u
|
31
|
+
i32.load8_u 0 8
|
32
|
+
return`;
|
33
|
+
};
|
@@ -3737,6 +3737,19 @@ export const BuiltinFuncs = function() {
|
|
3737
3737
|
returns: [124,127], typedReturns: 1,
|
3738
3738
|
locals: [124,127], localNames: ["_this","_this#type","callbackFn","callbackFn#type","out","#last_type"],
|
3739
3739
|
};
|
3740
|
+
this.WeakRef = {
|
3741
|
+
wasm: (scope, {builtin,internalThrow}) => [[32,-1],[184],[65,1],[33,2],[33,3],[32,2],[33,4],[2,124],[32,4],[65,194,0],[70],[4,64,"TYPESWITCH|String"],[32,3],[252,3],[40,1,0],[69],[184],[12,1],[11],[32,4],[65,194,1],[70],[4,64,"TYPESWITCH|ByteString"],[32,3],[252,3],[40,1,0],[69],[184],[12,1],[11],[32,3],[68,0,0,0,0,0,0,0,0],[97],[184],[11,"TYPESWITCH_end"],[252,3],[4,64],...internalThrow(scope, 'TypeError', `Constructor WeakRef requires 'new'`),[11],[32,0],[32,1],[16, builtin('__Porffor_rawType')],[34,5],[68,0,0,0,0,0,0,16,64],[99],[4,64],...internalThrow(scope, 'TypeError', `Target for WeakRef needs to be an object or symbol`),[11],[65,9],[16, builtin('__Porffor_allocateBytes')],[183],[34,6],[252,3],[32,0],[57,0,0],[32,6],[252,3],[32,1],[58,0,8],[32,6],[65,32],[15]],
|
3742
|
+
params: [124,127], typedParams: 1,
|
3743
|
+
returns: [124,127], typedReturns: 1,
|
3744
|
+
locals: [127,124,127,124,124], localNames: ["target","target#type","#last_type","#logicinner_tmp","#typeswitch_tmp","targetType","out"],
|
3745
|
+
constr: 1,
|
3746
|
+
};
|
3747
|
+
this.__WeakRef_prototype_deref = {
|
3748
|
+
wasm: (scope, {}) => [[32,0],[252,3],[43,0,0],[32,0],[252,3],[45,0,8],[15]],
|
3749
|
+
params: [124,127], typedParams: 1,
|
3750
|
+
returns: [124,127], typedReturns: 1,
|
3751
|
+
locals: [], localNames: ["_this","_this#type"],
|
3752
|
+
};
|
3740
3753
|
this.__ecma262_ToIntegerOrInfinity = {
|
3741
3754
|
wasm: (scope, {builtin}) => [[65,0],[32,0],[16, builtin('Number')],[34,2],[16, builtin('__Number_isNaN')],[252,3],[4,64],[68,0,0,0,0,0,0,0,0],[65,0],[15],[11],[32,2],[16, builtin('__Number_isFinite')],[68,0,0,0,0,0,0,0,0],[97],[4,64],[32,2],[65,0],[15],[11],[32,2],[16, builtin('__Math_trunc')],[34,2],[68,0,0,0,0,0,0,0,0],[97],[4,64],[68,0,0,0,0,0,0,0,0],[65,0],[15],[11],[32,2],[65,0],[15]],
|
3742
3755
|
params: [124,127], typedParams: 1,
|
package/compiler/types.js
CHANGED
@@ -65,4 +65,6 @@ registerInternalType('Int16Array', ['iterable', 'length']);
|
|
65
65
|
registerInternalType('Uint32Array', ['iterable', 'length']);
|
66
66
|
registerInternalType('Int32Array', ['iterable', 'length']);
|
67
67
|
registerInternalType('Float32Array', ['iterable', 'length']);
|
68
|
-
registerInternalType('Float64Array', ['iterable', 'length']);
|
68
|
+
registerInternalType('Float64Array', ['iterable', 'length']);
|
69
|
+
|
70
|
+
registerInternalType('WeakRef');
|
package/compiler/wrap.js
CHANGED
@@ -155,6 +155,13 @@ const porfToJSValue = ({ memory, funcs, pages }, value, type) => {
|
|
155
155
|
return new globalThis[TYPE_NAMES[type]](memory.buffer, ptr + 4, length);
|
156
156
|
}
|
157
157
|
|
158
|
+
case TYPES.weakref: {
|
159
|
+
const v = (new Float64Array(memory.buffer.slice(value, value + 8), 0, 1))[0];
|
160
|
+
const t = (new Uint8Array(memory.buffer, value + 8, 1))[0];
|
161
|
+
|
162
|
+
return new WeakRef(porfToJSValue({ memory, funcs, pages }, v, t));
|
163
|
+
}
|
164
|
+
|
158
165
|
default: return value;
|
159
166
|
}
|
160
167
|
};
|
package/package.json
CHANGED