porffor 0.55.26 → 0.55.27

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.
@@ -188,6 +188,7 @@ export const __Porffor_object_hash = (key: any): i32 => {
188
188
 
189
189
  // bytestring or string, fnv-1a hash (custom variant)
190
190
  // todo/opt: custom wasm simd variant?
191
+ // todo/opt: pgo for if no hash collisions?
191
192
 
192
193
  let ptr: i32 = Porffor.wasm`local.get ${key}`;
193
194
  const len: i32 = Porffor.wasm.i32.load(key, 0, 0);
@@ -371,15 +372,9 @@ export const __Porffor_object_lookup = (obj: any, target: any, targetHash: i32):
371
372
  let ptr: i32 = Porffor.wasm`local.get ${obj}` + 8;
372
373
  const endPtr: i32 = ptr + Porffor.wasm.i32.load16_u(obj, 0, 0) * 18;
373
374
 
374
- let out: boolean = false;
375
375
  if (Porffor.wasm`local.get ${target+1}` == Porffor.TYPES.symbol) {
376
376
  for (; ptr < endPtr; ptr += 18) {
377
377
  const key: i32 = Porffor.wasm.i32.load(ptr, 0, 4);
378
- if (key == 0) {
379
- if (out) break; // ran out of keys
380
- out = true;
381
- }
382
-
383
378
  if ((key >>> 30) == 3) { // MSB 1 and 2 set, symbol (unset MSB x2)
384
379
  // todo: remove casts once weird bug which breaks unrelated things is fixed (https://github.com/CanadaHonk/porffor/commit/5747f0c1f3a4af95283ebef175cdacb21e332a52)
385
380
  if ((key & 0x3FFFFFFF) as symbol == target as symbol) return ptr;
@@ -389,6 +384,11 @@ export const __Porffor_object_lookup = (obj: any, target: any, targetHash: i32):
389
384
  for (; ptr < endPtr; ptr += 18) {
390
385
  if (Porffor.wasm.i32.load(ptr, 0, 0) == targetHash) {
391
386
  const key: i32 = Porffor.wasm.i32.load(ptr, 0, 4);
387
+
388
+ // fast path: check if same pointer first
389
+ if (key == Porffor.wasm`local.get ${target}`) return ptr;
390
+
391
+ // slow path: strcmp
392
392
  Porffor.wasm`
393
393
  local.get ${key}
394
394
  i32.const 2147483647
@@ -86,9 +86,9 @@ params:[127,127],typedParams:1,returns:[127],returnType:1,
86
86
  locals:[127,127,127,127,126,126],localNames:["key","key#type","ptr","len","hash","endPtr","x","shift"],
87
87
  }
88
88
  this.__Porffor_object_lookup = {
89
- wasm:(_,{builtin})=>[[32,0],[69],[4,64],[65,127],[15],[26],[11],[32,1],[65,7],[71],[4,64],[32,0],[183],[32,1],[16,builtin('__Porffor_object_underlying')],[33,6],[252,2],[33,0],[32,6],[34,1],[65,7],[71],[4,64],[65,127],[15],[26],[11],[11],[32,0],[65,8],[106],[34,7],[32,0],[47,0,0],[65,18],[108],[106],[33,8],[65,0],[33,9],[32,3],[65,5],[70],[4,64],[3,64],[32,7],[32,8],[72],[4,64],[2,64],[32,7],[40,0,4],[34,10],[69],[4,64],[32,9],[4,64],[12,3],[26],[11],[65,1],[33,9],[11],[32,10],[65,30],[118],[65,3],[70],[4,64],[32,10],[65,255,255,255,255,3],[113],[32,2],[70],[4,64],[32,7],[15],[26],[11],[11],[11],[32,7],[65,18],[106],[33,7],[12,1],[11],[11],[5],[3,64],[32,7],[32,8],[72],[4,64],[32,7],[40,0,0],[32,4],[70],[4,64],[32,7],[40,0,4],[34,10],[65,255,255,255,255,7],[113],[65,195,0],[65,195,1],[32,10],[65,30],[118],[27],[32,2],[32,3],[16,builtin('__Porffor_strcmp')],[4,64],[32,7],[15],[11],[11],[32,7],[65,18],[106],[33,7],[12,1],[11],[11],[11],[65,127],[15]],
89
+ wasm:(_,{builtin})=>[[32,0],[69],[4,64],[65,127],[15],[26],[11],[32,1],[65,7],[71],[4,64],[32,0],[183],[32,1],[16,builtin('__Porffor_object_underlying')],[33,6],[252,2],[33,0],[32,6],[34,1],[65,7],[71],[4,64],[65,127],[15],[26],[11],[11],[32,0],[65,8],[106],[34,7],[32,0],[47,0,0],[65,18],[108],[106],[33,8],[32,3],[65,5],[70],[4,64],[3,64],[32,7],[32,8],[72],[4,64],[32,7],[40,0,4],[34,9],[65,30],[118],[65,3],[70],[4,64],[32,9],[65,255,255,255,255,3],[113],[32,2],[70],[4,64],[32,7],[15],[26],[11],[11],[32,7],[65,18],[106],[33,7],[12,1],[11],[11],[5],[3,64],[32,7],[32,8],[72],[4,64],[32,7],[40,0,0],[32,4],[70],[4,64],[32,7],[40,0,4],[34,9],[32,2],[70],[4,64],[32,7],[15],[26],[11],[32,9],[65,255,255,255,255,7],[113],[65,195,0],[65,195,1],[32,9],[65,30],[118],[27],[32,2],[32,3],[16,builtin('__Porffor_strcmp')],[4,64],[32,7],[15],[11],[11],[32,7],[65,18],[106],[33,7],[12,1],[11],[11],[11],[65,127],[15]],
90
90
  params:[127,127,127,127,127,127],typedParams:1,returns:[127],returnType:1,
91
- locals:[127,127,127,127,127],localNames:["obj","obj#type","target","target#type","targetHash","targetHash#type","#last_type","ptr","endPtr","out","key"],
91
+ locals:[127,127,127,127],localNames:["obj","obj#type","target","target#type","targetHash","targetHash#type","#last_type","ptr","endPtr","key"],
92
92
  usedTypes:[5],
93
93
  }
94
94
  this.__Porffor_object_readValue = {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "porffor",
3
3
  "description": "An ahead-of-time JavaScript compiler",
4
- "version": "0.55.26",
4
+ "version": "0.55.27",
5
5
  "author": "Oliver Medhurst <honk@goose.icu>",
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.55.26';
3
+ globalThis.version = '0.55.27';
4
4
 
5
5
  // deno compat
6
6
  if (typeof process === 'undefined' && typeof Deno !== 'undefined') {