porffor 0.58.6 → 0.58.7

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/wrap.js CHANGED
@@ -347,10 +347,128 @@ ${flags & 0b0001 ? ` get func idx: ${get}
347
347
  }
348
348
 
349
349
  case TYPES.regexp: {
350
- const [ pattern, flags ] = read(Uint32Array, memory, value, 2);
350
+ const [ pattern ] = read(Uint32Array, memory, value, 1);
351
+ const [ flags ] = read(Uint16Array, memory, value + 4, 1);
352
+
353
+ if (Prefs.d) {
354
+ const bc = new Uint8Array(memory.buffer.slice(value + 6));
355
+ let i = 0;
356
+ while (true) {
357
+ const opcode = bc[i++];
358
+ if (opcode === 0x00) break;
359
+ process.stdout.write(`\x1b[90m${`@${i - 1}`.padEnd(6)}\x1b[0m`);
360
+
361
+ switch (opcode) {
362
+ case 0x01: {
363
+ const char = bc[i++];
364
+ console.log('\x1b[36msingle\x1b[0m', String.fromCharCode(char));
365
+ break;
366
+ }
367
+
368
+ case 0x02:
369
+ case 0x03: {
370
+ const negated = opcode === 0x03;
371
+ console.log(`\x1b[31m${negated ? 'negated ' : ''}class\x1b[0m\x1b[2m:\x1b[0m`);
372
+ classLoop: while (true) {
373
+ const itemcode = bc[i++];
374
+ switch (itemcode) {
375
+ case 0x00: {
376
+ const from = bc[i++];
377
+ const to = bc[i++];
378
+ console.log(' \x1b[36mrange\x1b[0m', String.fromCharCode(from), '\x1b[2m-\x1b[0m', String.fromCharCode(to));
379
+ break;
380
+ }
381
+ case 0x01: {
382
+ const char = bc[i++];
383
+ console.log(' \x1b[36mchar\x1b[0m', String.fromCharCode(char));
384
+ break;
385
+ }
386
+ case 0x02: {
387
+ const id = bc[i++];
388
+ console.log(' \x1b[36mpredef\x1b[0m', id);
389
+ break;
390
+ }
391
+ case 0xff: {
392
+ break classLoop;
393
+ }
394
+ }
395
+ }
396
+ break;
397
+ }
398
+
399
+ case 0x04: {
400
+ const id = bc[i++];
401
+ console.log('\x1b[36mpredef\x1b[0m', id);
402
+ break;
403
+ }
404
+
405
+ case 0x05:
406
+ case 0x06:
407
+ case 0x07:
408
+ case 0x08:
409
+ case 0x09: {
410
+ console.log(`${({
411
+ 0x05: 'start',
412
+ 0x06: 'end',
413
+ 0x07: 'word boundary',
414
+ 0x08: 'non-word boundary',
415
+ 0x09: 'dot'
416
+ })[opcode]}`);
417
+ break;
418
+ }
419
+
420
+ case 0x0a: {
421
+ const index = bc[i++];
422
+ console.log(`backref ${index}`);
423
+ break;
424
+ }
425
+
426
+ case 0x10: {
427
+ console.log('\x1b[92maccept\x1b[0m');
428
+ break;
429
+ }
430
+ case 0x11: {
431
+ console.log('\x1b[91mreject\x1b[0m');
432
+ break;
433
+ }
434
+
435
+ case 0x20: {
436
+ const [ target ] = read(Int16Array, bc, i, 1);
437
+ i += 2;
438
+ console.log('\x1b[93mjump\x1b[0m', target, `\x1b[2m(${i + target - 3})\x1b[0m`);
439
+ break;
440
+ }
441
+
442
+ case 0x21: {
443
+ const [ branch1, branch2 ] = read(Int16Array, bc, i, 2);
444
+ i += 4;
445
+ console.log('\x1b[93mfork\x1b[0m', branch1, `\x1b[2m(${i + branch1 - 5})\x1b[0m`, branch2, `\x1b[2m(${i + branch2 - 5})\x1b[0m`);
446
+ break;
447
+ }
448
+
449
+ case 0x30:
450
+ case 0x31: {
451
+ const index = bc[i++];
452
+ console.log(`${opcode === 0x30 ? 'start' : 'end'} capture`, index);
453
+ break;
454
+ }
455
+ }
456
+ }
457
+ }
458
+
459
+ let flagStr = '';
460
+ if (flags & 0b01000000) flagStr += 'd';
461
+ if (flags & 0b00000001) flagStr += 'g';
462
+ if (flags & 0b00000010) flagStr += 'i';
463
+ if (flags & 0b00000100) flagStr += 'm';
464
+ if (flags & 0b00001000) flagStr += 's';
465
+ if (flags & 0b00010000) flagStr += 'u';
466
+ if (flags & 0b10000000) flagStr += 'v';
467
+ if (flags & 0b00100000) flagStr += 'y';
468
+
351
469
  return new RegExp(
352
470
  porfToJSValue({ memory, funcs, pages }, pattern, TYPES.bytestring),
353
- porfToJSValue({ memory, funcs, pages }, flags, TYPES.bytestring)
471
+ flagStr
354
472
  );
355
473
  }
356
474
 
package/foo.js CHANGED
@@ -1,5 +1,5 @@
1
- let bcPtr = 16;
2
- let classNegate = false;
3
- if (true) {
4
- Porffor.wasm.i32.store8(bcPtr, classNegate ? 0x03 : 0x02, 0, 0);
5
- }
1
+ var result = /1/; // eval('{}/1/;');
2
+
3
+ console.log(Object.getPrototypeOf(result) === RegExp.prototype);
4
+ console.log(result.flags);
5
+ console.log(result.toString());
package/jsr.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@honk/porffor",
3
- "version": "0.58.6",
3
+ "version": "0.58.7",
4
4
  "exports": "./compiler/wrap.js",
5
5
  "publish": {
6
6
  "exclude": [
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.58.6",
4
+ "version": "0.58.7",
5
5
  "author": "Oliver Medhurst <honk@goose.icu>",
6
6
  "license": "MIT",
7
7
  "scripts": {},
package/runtime/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
- globalThis.version = '0.58.6';
3
+ globalThis.version = '0.58.7';
4
4
 
5
5
  // deno compat
6
6
  if (typeof process === 'undefined' && typeof Deno !== 'undefined') {