porffor 0.19.2 → 0.19.4

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/types.js CHANGED
@@ -1,12 +1,13 @@
1
1
  export const TYPES = {
2
- number: 0x00,
3
- boolean: 0x01,
4
- string: 0x02,
5
- undefined: 0x03,
6
- object: 0x04,
7
- function: 0x05,
8
- symbol: 0x06,
9
- bigint: 0x07
2
+ empty: 0x00,
3
+ number: 0x01,
4
+ boolean: 0x02,
5
+ string: 0x03,
6
+ undefined: 0x04,
7
+ object: 0x05,
8
+ function: 0x06,
9
+ symbol: 0x07,
10
+ bigint: 0x08
10
11
  };
11
12
 
12
13
  // flags
@@ -19,7 +20,10 @@ export const TYPE_FLAGS = {
19
20
  // TYPES.string |= TYPE_FLAGS.iterable;
20
21
  TYPES.string |= TYPE_FLAGS.length;
21
22
 
23
+ TYPES.undefined = TYPES.empty | TYPE_FLAGS.parity;
24
+
22
25
  export const TYPE_NAMES = {
26
+ [TYPES.empty]: 'empty',
23
27
  [TYPES.number]: 'Number',
24
28
  [TYPES.boolean]: 'Boolean',
25
29
  [TYPES.string]: 'String',
@@ -69,4 +73,5 @@ registerInternalType('Float32Array', ['iterable', 'length']);
69
73
  registerInternalType('Float64Array', ['iterable', 'length']);
70
74
 
71
75
  registerInternalType('WeakRef');
72
- registerInternalType('WeakSet');
76
+ registerInternalType('WeakSet');
77
+ registerInternalType('WeakMap');
package/compiler/wrap.js CHANGED
@@ -27,8 +27,11 @@ export const writeByteStr = (memory, ptr, str) => {
27
27
 
28
28
  const porfToJSValue = ({ memory, funcs, pages }, value, type) => {
29
29
  switch (type) {
30
+ case TYPES.empty:
31
+ case TYPES.undefined:
32
+ return undefined;
33
+
30
34
  case TYPES.boolean: return Boolean(value);
31
- case TYPES.undefined: return undefined;
32
35
  case TYPES.object: return value === 0 ? null : {};
33
36
 
34
37
  case TYPES.function: {
@@ -81,49 +84,6 @@ const porfToJSValue = ({ memory, funcs, pages }, value, type) => {
81
84
  return new Date(t);
82
85
  }
83
86
 
84
- case TYPES.set: {
85
- const size = (new Uint32Array(memory.buffer, value, 1))[0];
86
-
87
- const out = new Set();
88
- for (let i = 0; i < size; i++) {
89
- const offset = value + 4 + (i * 9);
90
-
91
- // have to slice because of memory alignment (?)
92
- const v = (new Float64Array(memory.buffer.slice(offset, offset + 8), 0, 1))[0];
93
- const t = (new Uint8Array(memory.buffer, offset + 8, 1))[0];
94
-
95
- // console.log(`reading value at index ${i}...`)
96
- // console.log(' memory:', Array.from(new Uint8Array(memory.buffer, offset, 9)).map(x => x.toString(16).padStart(2, '0')).join(' '));
97
- // console.log(' read:', { value: v, type: t }, '\n');
98
-
99
- out.add(porfToJSValue({ memory, funcs, pages }, v, t));
100
- }
101
-
102
- return out;
103
- }
104
-
105
- case TYPES.map: {
106
- const [ keysPtr, valsPtr ] = (new Uint32Array(memory.buffer, value, 2));
107
- const size = (new Uint32Array(memory.buffer, keysPtr, 1))[0];
108
-
109
- const out = new Map();
110
- for (let i = 0; i < size; i++) {
111
- const offset = 4 + (i * 9);
112
-
113
- const kValue = (new Float64Array(memory.buffer.slice(keysPtr + offset, keysPtr + offset + 8), 0, 1))[0];
114
- const kType = (new Uint8Array(memory.buffer, keysPtr + offset + 8, 1))[0];
115
- const k = porfToJSValue({ memory, funcs, pages }, kValue, kType);
116
-
117
- const vValue = (new Float64Array(memory.buffer.slice(valsPtr + offset, valsPtr + offset + 8), 0, 1))[0];
118
- const vType = (new Uint8Array(memory.buffer, valsPtr + offset + 8, 1))[0];
119
- const v = porfToJSValue({ memory, funcs, pages }, vValue, vType);
120
-
121
- out.set(k, v);
122
- }
123
-
124
- return out;
125
- }
126
-
127
87
  case TYPES.symbol: {
128
88
  const descStore = pages.get('bytestring: __Porffor_symbol_descStore/ptr').ind * pageSize;
129
89
  if (!descStore) return Symbol();
@@ -184,10 +144,11 @@ const porfToJSValue = ({ memory, funcs, pages }, value, type) => {
184
144
  return new WeakRef(porfToJSValue({ memory, funcs, pages }, v, t));
185
145
  }
186
146
 
187
- case TYPES.weakset: {
147
+ case TYPES.weakset:
148
+ case TYPES.set: {
188
149
  const size = (new Uint32Array(memory.buffer, value, 1))[0];
189
150
 
190
- const out = new WeakSet();
151
+ const out = type === TYPES.weakset ? new WeakSet() : new Set();
191
152
  for (let i = 0; i < size; i++) {
192
153
  const offset = value + 4 + (i * 9);
193
154
  const v = (new Float64Array(memory.buffer.slice(offset, offset + 8), 0, 1))[0];
@@ -199,6 +160,29 @@ const porfToJSValue = ({ memory, funcs, pages }, value, type) => {
199
160
  return out;
200
161
  }
201
162
 
163
+ case TYPES.weakmap:
164
+ case TYPES.map: {
165
+ const [ keysPtr, valsPtr ] = (new Uint32Array(memory.buffer, value, 2));
166
+ const size = (new Uint32Array(memory.buffer, keysPtr, 1))[0];
167
+
168
+ const out = type === TYPES.weakmap ? new WeakMap() : new Map();
169
+ for (let i = 0; i < size; i++) {
170
+ const offset = 4 + (i * 9);
171
+
172
+ const kValue = (new Float64Array(memory.buffer.slice(keysPtr + offset, keysPtr + offset + 8), 0, 1))[0];
173
+ const kType = (new Uint8Array(memory.buffer, keysPtr + offset + 8, 1))[0];
174
+ const k = porfToJSValue({ memory, funcs, pages }, kValue, kType);
175
+
176
+ const vValue = (new Float64Array(memory.buffer.slice(valsPtr + offset, valsPtr + offset + 8), 0, 1))[0];
177
+ const vType = (new Uint8Array(memory.buffer, valsPtr + offset + 8, 1))[0];
178
+ const v = porfToJSValue({ memory, funcs, pages }, vValue, vType);
179
+
180
+ out.set(k, v);
181
+ }
182
+
183
+ return out;
184
+ }
185
+
202
186
  default: return value;
203
187
  }
204
188
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "porffor",
3
3
  "description": "a basic experimental wip aot optimizing js -> wasm engine/compiler/runtime in js",
4
- "version": "0.19.2+5551e8046",
4
+ "version": "0.19.4+1dbbc5d08",
5
5
  "author": "CanadaHonk",
6
6
  "license": "MIT",
7
7
  "scripts": {},
package/runner/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
- globalThis.version = '0.19.2+5551e8046';
3
+ globalThis.version = '0.19.4+1dbbc5d08';
4
4
 
5
5
  // deno compat
6
6
  if (typeof process === 'undefined' && typeof Deno !== 'undefined') {
@@ -1,102 +0,0 @@
1
- import type {} from './porffor.d.ts';
2
-
3
- export const __WeakSet_prototype_has = (_this: WeakSet, value: any) => {
4
- const size: number = Porffor.wasm.i32.load(_this, 0, 0);
5
-
6
- for (let i: number = 0; i < size; i++) {
7
- if (__Porffor_set_read(_this, i) === value) return true;
8
- }
9
-
10
- return false;
11
- };
12
-
13
- export const __WeakSet_prototype_add = (_this: WeakSet, value: any) => {
14
- if (Porffor.rawType(value) < 0x04) throw new TypeError('Value in WeakSet needs to be an object or symbol');
15
-
16
- const size: number = Porffor.wasm.i32.load(_this, 0, 0);
17
-
18
- // check if already in set
19
- for (let i: number = 0; i < size; i++) {
20
- if (__Porffor_set_read(_this, i) === value) return _this;
21
- }
22
-
23
- // not, add it
24
- // increment size by 1
25
- Porffor.wasm.i32.store(_this, size + 1, 0, 0);
26
-
27
- // write new value at end
28
- __Porffor_set_write(_this, size, value);
29
-
30
- return _this;
31
- };
32
-
33
- export const __WeakSet_prototype_delete = (_this: WeakSet, value: any) => {
34
- const size: number = Porffor.wasm.i32.load(_this, 0, 0);
35
-
36
- // check if already in set
37
- for (let i: number = 0; i < size; i++) {
38
- if (__Porffor_set_read(_this, i) === value) {
39
- // found, delete
40
- // decrement size by 1
41
- Porffor.wasm.i32.store(_this, size - 1, 0, 0);
42
-
43
- // offset all elements after by -1 ind
44
- Porffor.wasm`
45
- local offset i32
46
- local.get ${i}
47
- i32.to_u
48
- i32.const 9
49
- i32.mul
50
- local.get ${_this}
51
- i32.to_u
52
- i32.add
53
- i32.const 4
54
- i32.add
55
- local.set offset
56
-
57
- ;; dst = offset (this element)
58
- local.get offset
59
-
60
- ;; src = offset + 9 (this element + 1 element)
61
- local.get offset
62
- i32.const 9
63
- i32.add
64
-
65
- ;; size = (size - i - 1) * 9
66
- local.get ${size}
67
- local.get ${i}
68
- f64.sub
69
- i32.to_u
70
- i32.const 1
71
- i32.sub
72
- i32.const 9
73
- i32.mul
74
-
75
- memory.copy 0 0`;
76
-
77
- return true;
78
- }
79
- }
80
-
81
- // not, return false
82
- return false;
83
- };
84
-
85
- export const WeakSet = function (iterable: any): WeakSet {
86
- if (!new.target) throw new TypeError("Constructor Set requires 'new'");
87
-
88
- const out: WeakSet = __Porffor_allocate();
89
-
90
- if (Porffor.rawType(iterable) != Porffor.TYPES.undefined) for (const x of iterable) {
91
- __WeakSet_prototype_add(out, x);
92
- }
93
-
94
- return out;
95
- };
96
-
97
- export const __WeakSet_prototype_toString = (_this: WeakSet) => {
98
- const out: bytestring = '[object WeakSet]';
99
- return out;
100
- };
101
-
102
- export const __WeakSet_prototype_toLocaleString = (_this: WeakSet) => __WeakSet_prototype_toString(_this);