ember-source 5.6.0-alpha.2 → 5.6.0-alpha.3

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.
Files changed (54) hide show
  1. package/build-metadata.json +3 -3
  2. package/dist/dependencies/@glimmer/debug.js +1533 -0
  3. package/dist/dependencies/@glimmer/destroyable.js +30 -59
  4. package/dist/dependencies/@glimmer/encoder.js +13 -24
  5. package/dist/dependencies/@glimmer/global-context.js +38 -41
  6. package/dist/dependencies/@glimmer/manager.js +144 -326
  7. package/dist/dependencies/@glimmer/node.js +14 -46
  8. package/dist/dependencies/@glimmer/opcode-compiler.js +1673 -2478
  9. package/dist/dependencies/@glimmer/owner.js +2 -5
  10. package/dist/dependencies/@glimmer/program.js +102 -185
  11. package/dist/dependencies/@glimmer/reference.js +58 -126
  12. package/dist/dependencies/@glimmer/runtime.js +4674 -5639
  13. package/dist/dependencies/@glimmer/util.js +340 -326
  14. package/dist/dependencies/@glimmer/validator.js +160 -217
  15. package/dist/dependencies/@glimmer/vm.js +174 -23
  16. package/dist/dependencies/@glimmer/wire-format.js +91 -34
  17. package/dist/dependencies/@simple-dom/document.js +1 -1
  18. package/dist/dependencies/router_js.js +15 -16
  19. package/dist/dependencies/rsvp.js +89 -88
  20. package/dist/ember-template-compiler.js +8574 -8350
  21. package/dist/ember-template-compiler.map +1 -1
  22. package/dist/ember-testing.js +107 -107
  23. package/dist/ember-testing.map +1 -1
  24. package/dist/ember.debug.js +11199 -9636
  25. package/dist/ember.debug.map +1 -1
  26. package/dist/header/license.js +1 -1
  27. package/dist/packages/@ember/-internals/glimmer/index.js +93 -83
  28. package/dist/packages/@ember/-internals/metal/index.js +5 -4
  29. package/dist/packages/@ember/-internals/utils/index.js +3 -4
  30. package/dist/packages/@ember/array/-internals.js +1 -2
  31. package/dist/packages/@ember/debug/lib/inspect.js +0 -1
  32. package/dist/packages/@ember/object/core.js +0 -1
  33. package/dist/packages/@ember/object/mixin.js +1 -2
  34. package/dist/packages/@ember/routing/route.js +23 -101
  35. package/dist/packages/@ember/routing/router.js +25 -84
  36. package/dist/packages/ember/version.js +1 -1
  37. package/dist/packages/ember-babel.js +13 -0
  38. package/docs/data.json +218 -243
  39. package/lib/index.js +1 -5
  40. package/package.json +24 -19
  41. package/types/stable/@ember/-internals/glimmer/index.d.ts +1 -1
  42. package/types/stable/@ember/-internals/glimmer/lib/component-managers/curly.d.ts +4 -4
  43. package/types/stable/@ember/-internals/glimmer/lib/component-managers/mount.d.ts +3 -3
  44. package/types/stable/@ember/-internals/glimmer/lib/component-managers/outlet.d.ts +5 -8
  45. package/types/stable/@ember/-internals/glimmer/lib/component-managers/root.d.ts +3 -3
  46. package/types/stable/@ember/-internals/glimmer/lib/renderer.d.ts +3 -3
  47. package/types/stable/@ember/-internals/glimmer/lib/resolver.d.ts +3 -3
  48. package/types/stable/@ember/-internals/glimmer/lib/syntax/utils.d.ts +3 -2
  49. package/types/stable/@ember/-internals/glimmer/lib/utils/iterator.d.ts +2 -2
  50. package/types/stable/@ember/-internals/glimmer/lib/utils/outlet.d.ts +39 -18
  51. package/types/stable/@ember/-internals/utility-types/index.d.ts +1 -0
  52. package/types/stable/@ember/-internals/views/lib/system/utils.d.ts +4 -3
  53. package/types/stable/@ember/routing/route.d.ts +6 -28
  54. package/dist/dependencies/@glimmer/low-level.js +0 -77
@@ -0,0 +1,1533 @@
1
+ import '@glimmer/util';
2
+ import { Op, MachineOp } from '@glimmer/vm';
3
+
4
+ /* This file is generated by build/debug.js */
5
+
6
+ function fillNulls(count) {
7
+ let arr = new Array(count);
8
+ for (let i = 0; i < count; i++) {
9
+ arr[i] = null;
10
+ }
11
+ return arr;
12
+ }
13
+ function opcodeMetadata(op, isMachine) {
14
+ let value = isMachine ? MACHINE_METADATA[op] : METADATA[op];
15
+ return value || null;
16
+ }
17
+ const METADATA = fillNulls(Op.Size);
18
+ const MACHINE_METADATA = fillNulls(MachineOp.Size);
19
+ MACHINE_METADATA[MachineOp.PushFrame] = {
20
+ name: 'PushFrame',
21
+ mnemonic: 'pushf',
22
+ before: null,
23
+ stackChange: 2,
24
+ ops: [],
25
+ operands: 0,
26
+ check: true
27
+ };
28
+ MACHINE_METADATA[MachineOp.PopFrame] = {
29
+ name: 'PopFrame',
30
+ mnemonic: 'popf',
31
+ before: null,
32
+ stackChange: -2,
33
+ ops: [],
34
+ operands: 0,
35
+ check: false
36
+ };
37
+ MACHINE_METADATA[MachineOp.InvokeVirtual] = {
38
+ name: 'InvokeVirtual',
39
+ mnemonic: 'vcall',
40
+ before: null,
41
+ stackChange: -1,
42
+ ops: [],
43
+ operands: 0,
44
+ check: true
45
+ };
46
+ MACHINE_METADATA[MachineOp.InvokeStatic] = {
47
+ name: 'InvokeStatic',
48
+ mnemonic: 'scall',
49
+ before: null,
50
+ stackChange: 0,
51
+ ops: [{
52
+ name: 'offset',
53
+ type: 'u32'
54
+ }],
55
+ operands: 1,
56
+ check: true
57
+ };
58
+ MACHINE_METADATA[MachineOp.Jump] = {
59
+ name: 'Jump',
60
+ mnemonic: 'goto',
61
+ before: null,
62
+ stackChange: 0,
63
+ ops: [{
64
+ name: 'to',
65
+ type: 'u32'
66
+ }],
67
+ operands: 1,
68
+ check: true
69
+ };
70
+ MACHINE_METADATA[MachineOp.Return] = {
71
+ name: 'Return',
72
+ mnemonic: 'ret',
73
+ before: null,
74
+ stackChange: 0,
75
+ ops: [],
76
+ operands: 0,
77
+ check: false
78
+ };
79
+ MACHINE_METADATA[MachineOp.ReturnTo] = {
80
+ name: 'ReturnTo',
81
+ mnemonic: 'setra',
82
+ before: null,
83
+ stackChange: 0,
84
+ ops: [{
85
+ name: 'offset',
86
+ type: 'i32'
87
+ }],
88
+ operands: 1,
89
+ check: true
90
+ };
91
+ METADATA[Op.Helper] = {
92
+ name: 'Helper',
93
+ mnemonic: 'ncall',
94
+ before: null,
95
+ stackChange: null,
96
+ ops: [{
97
+ name: 'helper',
98
+ type: 'handle'
99
+ }],
100
+ operands: 1,
101
+ check: true
102
+ };
103
+ METADATA[Op.DynamicHelper] = {
104
+ name: 'DynamicHelper',
105
+ mnemonic: 'dynamiccall',
106
+ before: null,
107
+ stackChange: null,
108
+ ops: [],
109
+ operands: 0,
110
+ check: true
111
+ };
112
+ METADATA[Op.SetNamedVariables] = {
113
+ name: 'SetNamedVariables',
114
+ mnemonic: 'vsargs',
115
+ before: null,
116
+ stackChange: 0,
117
+ ops: [{
118
+ name: 'register',
119
+ type: 'u32'
120
+ }],
121
+ operands: 1,
122
+ check: true
123
+ };
124
+ METADATA[Op.SetBlocks] = {
125
+ name: 'SetBlocks',
126
+ mnemonic: 'vbblocks',
127
+ before: null,
128
+ stackChange: 0,
129
+ ops: [{
130
+ name: 'register',
131
+ type: 'u32'
132
+ }],
133
+ operands: 1,
134
+ check: true
135
+ };
136
+ METADATA[Op.SetVariable] = {
137
+ name: 'SetVariable',
138
+ mnemonic: 'sbvar',
139
+ before: null,
140
+ stackChange: -1,
141
+ ops: [{
142
+ name: 'symbol',
143
+ type: 'u32'
144
+ }],
145
+ operands: 1,
146
+ check: true
147
+ };
148
+ METADATA[Op.SetBlock] = {
149
+ name: 'SetBlock',
150
+ mnemonic: 'sblock',
151
+ before: null,
152
+ stackChange: -3,
153
+ ops: [{
154
+ name: 'symbol',
155
+ type: 'u32'
156
+ }],
157
+ operands: 1,
158
+ check: true
159
+ };
160
+ METADATA[Op.GetVariable] = {
161
+ name: 'GetVariable',
162
+ mnemonic: 'symload',
163
+ before: null,
164
+ stackChange: 1,
165
+ ops: [{
166
+ name: 'symbol',
167
+ type: 'u32'
168
+ }],
169
+ operands: 1,
170
+ check: true
171
+ };
172
+ METADATA[Op.GetProperty] = {
173
+ name: 'GetProperty',
174
+ mnemonic: 'getprop',
175
+ before: null,
176
+ stackChange: 0,
177
+ ops: [{
178
+ name: 'property',
179
+ type: 'str'
180
+ }],
181
+ operands: 1,
182
+ check: true
183
+ };
184
+ METADATA[Op.GetBlock] = {
185
+ name: 'GetBlock',
186
+ mnemonic: 'blockload',
187
+ before: null,
188
+ stackChange: 1,
189
+ ops: [{
190
+ name: 'block',
191
+ type: 'u32'
192
+ }],
193
+ operands: 1,
194
+ check: true
195
+ };
196
+ METADATA[Op.SpreadBlock] = {
197
+ name: 'SpreadBlock',
198
+ mnemonic: 'blockspread',
199
+ before: null,
200
+ stackChange: 2,
201
+ ops: [],
202
+ operands: 0,
203
+ check: true
204
+ };
205
+ METADATA[Op.HasBlock] = {
206
+ name: 'HasBlock',
207
+ mnemonic: 'hasblockload',
208
+ before: null,
209
+ stackChange: 0,
210
+ ops: [],
211
+ operands: 0,
212
+ check: true
213
+ };
214
+ METADATA[Op.HasBlockParams] = {
215
+ name: 'HasBlockParams',
216
+ mnemonic: 'hasparamsload',
217
+ before: null,
218
+ stackChange: -2,
219
+ ops: [],
220
+ operands: 0,
221
+ check: true
222
+ };
223
+ METADATA[Op.Concat] = {
224
+ name: 'Concat',
225
+ mnemonic: 'concat',
226
+ before: null,
227
+ stackChange: null,
228
+ ops: [{
229
+ name: 'count',
230
+ type: 'u32'
231
+ }],
232
+ operands: 1,
233
+ check: true
234
+ };
235
+ METADATA[Op.IfInline] = {
236
+ name: 'IfInline',
237
+ mnemonic: 'ifinline',
238
+ before: null,
239
+ stackChange: -2,
240
+ ops: [{
241
+ name: 'count',
242
+ type: 'u32'
243
+ }],
244
+ operands: 1,
245
+ check: true
246
+ };
247
+ METADATA[Op.Not] = {
248
+ name: 'Not',
249
+ mnemonic: 'not',
250
+ before: null,
251
+ stackChange: 0,
252
+ ops: [{
253
+ name: 'count',
254
+ type: 'u32'
255
+ }],
256
+ operands: 1,
257
+ check: true
258
+ };
259
+ METADATA[Op.Constant] = {
260
+ name: 'Constant',
261
+ mnemonic: 'rconstload',
262
+ before: null,
263
+ stackChange: 1,
264
+ ops: [{
265
+ name: 'constant',
266
+ type: 'unknown'
267
+ }],
268
+ operands: 1,
269
+ check: true
270
+ };
271
+ METADATA[Op.ConstantReference] = {
272
+ name: 'ConstantReference',
273
+ mnemonic: 'rconstrefload',
274
+ before: null,
275
+ stackChange: 1,
276
+ ops: [{
277
+ name: 'constant',
278
+ type: 'unknown'
279
+ }],
280
+ operands: 1,
281
+ check: true
282
+ };
283
+ METADATA[Op.Primitive] = {
284
+ name: 'Primitive',
285
+ mnemonic: 'pconstload',
286
+ before: null,
287
+ stackChange: 1,
288
+ ops: [{
289
+ name: 'constant',
290
+ type: 'primitive'
291
+ }],
292
+ operands: 1,
293
+ check: true
294
+ };
295
+ METADATA[Op.PrimitiveReference] = {
296
+ name: 'PrimitiveReference',
297
+ mnemonic: 'ptoref',
298
+ before: null,
299
+ stackChange: 0,
300
+ ops: [],
301
+ operands: 0,
302
+ check: true
303
+ };
304
+ METADATA[Op.ReifyU32] = {
305
+ name: 'ReifyU32',
306
+ mnemonic: 'reifyload',
307
+ before: null,
308
+ stackChange: 1,
309
+ ops: [],
310
+ operands: 0,
311
+ check: true
312
+ };
313
+ METADATA[Op.Dup] = {
314
+ name: 'Dup',
315
+ mnemonic: 'dup',
316
+ before: null,
317
+ stackChange: 1,
318
+ ops: [{
319
+ name: 'register',
320
+ type: 'u32'
321
+ }, {
322
+ name: 'offset',
323
+ type: 'u32'
324
+ }],
325
+ operands: 2,
326
+ check: true
327
+ };
328
+ METADATA[Op.Pop] = {
329
+ name: 'Pop',
330
+ mnemonic: 'pop',
331
+ before: null,
332
+ stackChange: 0,
333
+ ops: [{
334
+ name: 'count',
335
+ type: 'u32'
336
+ }],
337
+ operands: 1,
338
+ check: false
339
+ };
340
+ METADATA[Op.Load] = {
341
+ name: 'Load',
342
+ mnemonic: 'put',
343
+ before: null,
344
+ stackChange: -1,
345
+ ops: [{
346
+ name: 'register',
347
+ type: 'u32'
348
+ }],
349
+ operands: 1,
350
+ check: true
351
+ };
352
+ METADATA[Op.Fetch] = {
353
+ name: 'Fetch',
354
+ mnemonic: 'regload',
355
+ before: null,
356
+ stackChange: 1,
357
+ ops: [{
358
+ name: 'register',
359
+ type: 'u32'
360
+ }],
361
+ operands: 1,
362
+ check: true
363
+ };
364
+ METADATA[Op.RootScope] = {
365
+ name: 'RootScope',
366
+ mnemonic: 'rscopepush',
367
+ before: null,
368
+ stackChange: 0,
369
+ ops: [{
370
+ name: 'symbols',
371
+ type: 'u32'
372
+ }],
373
+ operands: 1,
374
+ check: true
375
+ };
376
+ METADATA[Op.VirtualRootScope] = {
377
+ name: 'VirtualRootScope',
378
+ mnemonic: 'vrscopepush',
379
+ before: null,
380
+ stackChange: 0,
381
+ ops: [{
382
+ name: 'register',
383
+ type: 'u32'
384
+ }],
385
+ operands: 1,
386
+ check: true
387
+ };
388
+ METADATA[Op.ChildScope] = {
389
+ name: 'ChildScope',
390
+ mnemonic: 'cscopepush',
391
+ before: null,
392
+ stackChange: 0,
393
+ ops: [],
394
+ operands: 0,
395
+ check: true
396
+ };
397
+ METADATA[Op.PopScope] = {
398
+ name: 'PopScope',
399
+ mnemonic: 'scopepop',
400
+ before: null,
401
+ stackChange: 0,
402
+ ops: [],
403
+ operands: 0,
404
+ check: true
405
+ };
406
+ METADATA[Op.Text] = {
407
+ name: 'Text',
408
+ mnemonic: 'apnd_text',
409
+ before: null,
410
+ stackChange: 0,
411
+ ops: [{
412
+ name: 'contents',
413
+ type: 'str'
414
+ }],
415
+ operands: 1,
416
+ check: true
417
+ };
418
+ METADATA[Op.Comment] = {
419
+ name: 'Comment',
420
+ mnemonic: 'apnd_comment',
421
+ before: null,
422
+ stackChange: 0,
423
+ ops: [{
424
+ name: 'contents',
425
+ type: 'str'
426
+ }],
427
+ operands: 1,
428
+ check: true
429
+ };
430
+ METADATA[Op.AppendHTML] = {
431
+ name: 'AppendHTML',
432
+ mnemonic: 'apnd_dynhtml',
433
+ before: null,
434
+ stackChange: -1,
435
+ ops: [],
436
+ operands: 0,
437
+ check: true
438
+ };
439
+ METADATA[Op.AppendSafeHTML] = {
440
+ name: 'AppendSafeHTML',
441
+ mnemonic: 'apnd_dynshtml',
442
+ before: null,
443
+ stackChange: -1,
444
+ ops: [],
445
+ operands: 0,
446
+ check: true
447
+ };
448
+ METADATA[Op.AppendDocumentFragment] = {
449
+ name: 'AppendDocumentFragment',
450
+ mnemonic: 'apnd_dynfrag',
451
+ before: null,
452
+ stackChange: -1,
453
+ ops: [],
454
+ operands: 0,
455
+ check: true
456
+ };
457
+ METADATA[Op.AppendNode] = {
458
+ name: 'AppendNode',
459
+ mnemonic: 'apnd_dynnode',
460
+ before: null,
461
+ stackChange: -1,
462
+ ops: [],
463
+ operands: 0,
464
+ check: true
465
+ };
466
+ METADATA[Op.AppendText] = {
467
+ name: 'AppendText',
468
+ mnemonic: 'apnd_dyntext',
469
+ before: null,
470
+ stackChange: -1,
471
+ ops: [],
472
+ operands: 0,
473
+ check: true
474
+ };
475
+ METADATA[Op.OpenElement] = {
476
+ name: 'OpenElement',
477
+ mnemonic: 'apnd_tag',
478
+ before: null,
479
+ stackChange: 0,
480
+ ops: [{
481
+ name: 'tag',
482
+ type: 'str'
483
+ }],
484
+ operands: 1,
485
+ check: true
486
+ };
487
+ METADATA[Op.OpenDynamicElement] = {
488
+ name: 'OpenDynamicElement',
489
+ mnemonic: 'apnd_dyntag',
490
+ before: null,
491
+ stackChange: -1,
492
+ ops: [],
493
+ operands: 0,
494
+ check: true
495
+ };
496
+ METADATA[Op.PushRemoteElement] = {
497
+ name: 'PushRemoteElement',
498
+ mnemonic: 'apnd_remotetag',
499
+ before: null,
500
+ stackChange: -3,
501
+ ops: [],
502
+ operands: 0,
503
+ check: true
504
+ };
505
+ METADATA[Op.StaticAttr] = {
506
+ name: 'StaticAttr',
507
+ mnemonic: 'apnd_attr',
508
+ before: null,
509
+ stackChange: 0,
510
+ ops: [{
511
+ name: 'name',
512
+ type: 'str'
513
+ }, {
514
+ name: 'value',
515
+ type: 'str'
516
+ }, {
517
+ name: 'namespace',
518
+ type: 'option-str'
519
+ }],
520
+ operands: 3,
521
+ check: true
522
+ };
523
+ METADATA[Op.DynamicAttr] = {
524
+ name: 'DynamicAttr',
525
+ mnemonic: 'apnd_dynattr',
526
+ before: null,
527
+ stackChange: -1,
528
+ ops: [{
529
+ name: 'name',
530
+ type: 'str'
531
+ }, {
532
+ name: 'trusting',
533
+ type: 'bool'
534
+ }, {
535
+ name: 'namespace',
536
+ type: 'option-str'
537
+ }],
538
+ operands: 3,
539
+ check: true
540
+ };
541
+ METADATA[Op.ComponentAttr] = {
542
+ name: 'ComponentAttr',
543
+ mnemonic: 'apnd_cattr',
544
+ before: null,
545
+ stackChange: -1,
546
+ ops: [{
547
+ name: 'name',
548
+ type: 'str'
549
+ }, {
550
+ name: 'trusting',
551
+ type: 'bool'
552
+ }, {
553
+ name: 'namespace',
554
+ type: 'option-str'
555
+ }],
556
+ operands: 3,
557
+ check: true
558
+ };
559
+ METADATA[Op.FlushElement] = {
560
+ name: 'FlushElement',
561
+ mnemonic: 'apnd_flushtag',
562
+ before: null,
563
+ stackChange: 0,
564
+ ops: [],
565
+ operands: 0,
566
+ check: true
567
+ };
568
+ METADATA[Op.CloseElement] = {
569
+ name: 'CloseElement',
570
+ mnemonic: 'apnd_closetag',
571
+ before: null,
572
+ stackChange: 0,
573
+ ops: [],
574
+ operands: 0,
575
+ check: true
576
+ };
577
+ METADATA[Op.PopRemoteElement] = {
578
+ name: 'PopRemoteElement',
579
+ mnemonic: 'apnd_closeremotetag',
580
+ before: null,
581
+ stackChange: 0,
582
+ ops: [],
583
+ operands: 0,
584
+ check: true
585
+ };
586
+ METADATA[Op.Modifier] = {
587
+ name: 'Modifier',
588
+ mnemonic: 'apnd_modifier',
589
+ before: null,
590
+ stackChange: -1,
591
+ ops: [{
592
+ name: 'helper',
593
+ type: 'handle'
594
+ }],
595
+ operands: 1,
596
+ check: true
597
+ };
598
+ METADATA[Op.BindDynamicScope] = {
599
+ name: 'BindDynamicScope',
600
+ mnemonic: 'setdynscope',
601
+ before: null,
602
+ stackChange: null,
603
+ ops: [{
604
+ name: 'names',
605
+ type: 'str-array'
606
+ }],
607
+ operands: 1,
608
+ check: true
609
+ };
610
+ METADATA[Op.PushDynamicScope] = {
611
+ name: 'PushDynamicScope',
612
+ mnemonic: 'dynscopepush',
613
+ before: null,
614
+ stackChange: 0,
615
+ ops: [],
616
+ operands: 0,
617
+ check: true
618
+ };
619
+ METADATA[Op.PopDynamicScope] = {
620
+ name: 'PopDynamicScope',
621
+ mnemonic: 'dynscopepop',
622
+ before: null,
623
+ stackChange: 0,
624
+ ops: [],
625
+ operands: 0,
626
+ check: true
627
+ };
628
+ METADATA[Op.CompileBlock] = {
629
+ name: 'CompileBlock',
630
+ mnemonic: 'cmpblock',
631
+ before: null,
632
+ stackChange: 0,
633
+ ops: [],
634
+ operands: 0,
635
+ check: true
636
+ };
637
+ METADATA[Op.PushBlockScope] = {
638
+ name: 'PushBlockScope',
639
+ mnemonic: 'scopeload',
640
+ before: null,
641
+ stackChange: 1,
642
+ ops: [{
643
+ name: 'scope',
644
+ type: 'scope'
645
+ }],
646
+ operands: 1,
647
+ check: true
648
+ };
649
+ METADATA[Op.PushSymbolTable] = {
650
+ name: 'PushSymbolTable',
651
+ mnemonic: 'dsymload',
652
+ before: null,
653
+ stackChange: 1,
654
+ ops: [{
655
+ name: 'table',
656
+ type: 'symbol-table'
657
+ }],
658
+ operands: 1,
659
+ check: true
660
+ };
661
+ METADATA[Op.InvokeYield] = {
662
+ name: 'InvokeYield',
663
+ mnemonic: 'invokeyield',
664
+ before: null,
665
+ stackChange: null,
666
+ ops: [],
667
+ operands: 0,
668
+ check: true
669
+ };
670
+ METADATA[Op.JumpIf] = {
671
+ name: 'JumpIf',
672
+ mnemonic: 'iftrue',
673
+ before: null,
674
+ stackChange: -1,
675
+ ops: [{
676
+ name: 'to',
677
+ type: 'u32'
678
+ }],
679
+ operands: 1,
680
+ check: true
681
+ };
682
+ METADATA[Op.JumpUnless] = {
683
+ name: 'JumpUnless',
684
+ mnemonic: 'iffalse',
685
+ before: null,
686
+ stackChange: -1,
687
+ ops: [{
688
+ name: 'to',
689
+ type: 'u32'
690
+ }],
691
+ operands: 1,
692
+ check: true
693
+ };
694
+ METADATA[Op.JumpEq] = {
695
+ name: 'JumpEq',
696
+ mnemonic: 'ifeq',
697
+ before: null,
698
+ stackChange: 0,
699
+ ops: [{
700
+ name: 'to',
701
+ type: 'i32'
702
+ }, {
703
+ name: 'comparison',
704
+ type: 'i32'
705
+ }],
706
+ operands: 2,
707
+ check: true
708
+ };
709
+ METADATA[Op.AssertSame] = {
710
+ name: 'AssertSame',
711
+ mnemonic: 'assert_eq',
712
+ before: null,
713
+ stackChange: 0,
714
+ ops: [],
715
+ operands: 0,
716
+ check: true
717
+ };
718
+ METADATA[Op.Enter] = {
719
+ name: 'Enter',
720
+ mnemonic: 'blk_start',
721
+ before: null,
722
+ stackChange: 0,
723
+ ops: [{
724
+ name: 'args',
725
+ type: 'u32'
726
+ }],
727
+ operands: 1,
728
+ check: true
729
+ };
730
+ METADATA[Op.Exit] = {
731
+ name: 'Exit',
732
+ mnemonic: 'blk_end',
733
+ before: null,
734
+ stackChange: 0,
735
+ ops: [],
736
+ operands: 0,
737
+ check: true
738
+ };
739
+ METADATA[Op.ToBoolean] = {
740
+ name: 'ToBoolean',
741
+ mnemonic: 'anytobool',
742
+ before: null,
743
+ stackChange: 0,
744
+ ops: [],
745
+ operands: 0,
746
+ check: true
747
+ };
748
+ METADATA[Op.EnterList] = {
749
+ name: 'EnterList',
750
+ mnemonic: 'list_start',
751
+ before: null,
752
+ stackChange: null,
753
+ ops: [{
754
+ name: 'address',
755
+ type: 'u32'
756
+ }, {
757
+ name: 'address',
758
+ type: 'u32'
759
+ }],
760
+ operands: 2,
761
+ check: true
762
+ };
763
+ METADATA[Op.ExitList] = {
764
+ name: 'ExitList',
765
+ mnemonic: 'list_end',
766
+ before: null,
767
+ stackChange: 0,
768
+ ops: [],
769
+ operands: 0,
770
+ check: true
771
+ };
772
+ METADATA[Op.Iterate] = {
773
+ name: 'Iterate',
774
+ mnemonic: 'iter',
775
+ before: null,
776
+ stackChange: 0,
777
+ ops: [{
778
+ name: 'end',
779
+ type: 'u32'
780
+ }],
781
+ operands: 1,
782
+ check: false
783
+ };
784
+ METADATA[Op.Main] = {
785
+ name: 'Main',
786
+ mnemonic: 'main',
787
+ before: null,
788
+ stackChange: -2,
789
+ ops: [{
790
+ name: 'state',
791
+ type: 'register'
792
+ }],
793
+ operands: 1,
794
+ check: true
795
+ };
796
+ METADATA[Op.ContentType] = {
797
+ name: 'ContentType',
798
+ mnemonic: 'ctload',
799
+ before: null,
800
+ stackChange: 1,
801
+ ops: [],
802
+ operands: 0,
803
+ check: true
804
+ };
805
+ METADATA[Op.DynamicContentType] = {
806
+ name: 'DynamicContentType',
807
+ mnemonic: 'dctload',
808
+ before: null,
809
+ stackChange: 1,
810
+ ops: [],
811
+ operands: 0,
812
+ check: true
813
+ };
814
+ METADATA[Op.Curry] = {
815
+ name: 'Curry',
816
+ mnemonic: 'curry',
817
+ before: null,
818
+ stackChange: null,
819
+ ops: [{
820
+ name: 'type',
821
+ type: 'u32'
822
+ }, {
823
+ name: 'is-strict',
824
+ type: 'bool'
825
+ }],
826
+ operands: 2,
827
+ check: true
828
+ };
829
+ METADATA[Op.PushComponentDefinition] = {
830
+ name: 'PushComponentDefinition',
831
+ mnemonic: 'cmload',
832
+ before: null,
833
+ stackChange: 1,
834
+ ops: [{
835
+ name: 'spec',
836
+ type: 'handle'
837
+ }],
838
+ operands: 1,
839
+ check: true
840
+ };
841
+ METADATA[Op.PushDynamicComponentInstance] = {
842
+ name: 'PushDynamicComponentInstance',
843
+ mnemonic: 'dciload',
844
+ before: null,
845
+ stackChange: 0,
846
+ ops: [],
847
+ operands: 0,
848
+ check: true
849
+ };
850
+ METADATA[Op.ResolveDynamicComponent] = {
851
+ name: 'ResolveDynamicComponent',
852
+ mnemonic: 'cdload',
853
+ before: null,
854
+ stackChange: 0,
855
+ ops: [{
856
+ name: 'owner',
857
+ type: 'owner'
858
+ }],
859
+ operands: 1,
860
+ check: true
861
+ };
862
+ METADATA[Op.PushArgs] = {
863
+ name: 'PushArgs',
864
+ mnemonic: 'argsload',
865
+ before: null,
866
+ stackChange: null,
867
+ ops: [{
868
+ name: 'names',
869
+ type: 'str-array'
870
+ }, {
871
+ name: 'block-names',
872
+ type: 'str-array'
873
+ }, {
874
+ name: 'flags',
875
+ type: 'u32'
876
+ }],
877
+ operands: 3,
878
+ check: true
879
+ };
880
+ METADATA[Op.PushEmptyArgs] = {
881
+ name: 'PushEmptyArgs',
882
+ mnemonic: 'emptyargsload',
883
+ before: null,
884
+ stackChange: 1,
885
+ ops: [],
886
+ operands: 0,
887
+ check: true
888
+ };
889
+ METADATA[Op.PopArgs] = {
890
+ name: 'PopArgs',
891
+ mnemonic: 'argspop',
892
+ before: null,
893
+ stackChange: null,
894
+ ops: [],
895
+ operands: 0,
896
+ check: true
897
+ };
898
+ METADATA[Op.PrepareArgs] = {
899
+ name: 'PrepareArgs',
900
+ mnemonic: 'argsprep',
901
+ before: null,
902
+ stackChange: 0,
903
+ ops: [{
904
+ name: 'state',
905
+ type: 'register'
906
+ }],
907
+ operands: 1,
908
+ check: false
909
+ };
910
+ METADATA[Op.CaptureArgs] = {
911
+ name: 'CaptureArgs',
912
+ mnemonic: 'argscapture',
913
+ before: null,
914
+ stackChange: 0,
915
+ ops: [],
916
+ operands: 0,
917
+ check: true
918
+ };
919
+ METADATA[Op.CreateComponent] = {
920
+ name: 'CreateComponent',
921
+ mnemonic: 'comp_create',
922
+ before: null,
923
+ stackChange: 0,
924
+ ops: [{
925
+ name: 'flags',
926
+ type: 'u32'
927
+ }, {
928
+ name: 'state',
929
+ type: 'register'
930
+ }],
931
+ operands: 2,
932
+ check: true
933
+ };
934
+ METADATA[Op.RegisterComponentDestructor] = {
935
+ name: 'RegisterComponentDestructor',
936
+ mnemonic: 'comp_dest',
937
+ before: null,
938
+ stackChange: 0,
939
+ ops: [{
940
+ name: 'state',
941
+ type: 'register'
942
+ }],
943
+ operands: 1,
944
+ check: true
945
+ };
946
+ METADATA[Op.PutComponentOperations] = {
947
+ name: 'PutComponentOperations',
948
+ mnemonic: 'comp_elops',
949
+ before: null,
950
+ stackChange: 0,
951
+ ops: [],
952
+ operands: 0,
953
+ check: true
954
+ };
955
+ METADATA[Op.GetComponentSelf] = {
956
+ name: 'GetComponentSelf',
957
+ mnemonic: 'comp_selfload',
958
+ before: null,
959
+ stackChange: 1,
960
+ ops: [{
961
+ name: 'state',
962
+ type: 'register'
963
+ }],
964
+ operands: 1,
965
+ check: true
966
+ };
967
+ METADATA[Op.GetComponentTagName] = {
968
+ name: 'GetComponentTagName',
969
+ mnemonic: 'comp_tagload',
970
+ before: null,
971
+ stackChange: 1,
972
+ ops: [{
973
+ name: 'state',
974
+ type: 'register'
975
+ }],
976
+ operands: 1,
977
+ check: true
978
+ };
979
+ METADATA[Op.GetComponentLayout] = {
980
+ name: 'GetComponentLayout',
981
+ mnemonic: 'comp_layoutload',
982
+ before: null,
983
+ stackChange: 2,
984
+ ops: [{
985
+ name: 'state',
986
+ type: 'register'
987
+ }],
988
+ operands: 1,
989
+ check: true
990
+ };
991
+ METADATA[Op.BindEvalScope] = {
992
+ name: 'BindEvalScope',
993
+ mnemonic: 'eval_scope',
994
+ before: null,
995
+ stackChange: 0,
996
+ ops: [{
997
+ name: 'state',
998
+ type: 'register'
999
+ }],
1000
+ operands: 1,
1001
+ check: true
1002
+ };
1003
+ METADATA[Op.SetupForEval] = {
1004
+ name: 'SetupForEval',
1005
+ mnemonic: 'eval_setup',
1006
+ before: null,
1007
+ stackChange: 0,
1008
+ ops: [{
1009
+ name: 'state',
1010
+ type: 'register'
1011
+ }],
1012
+ operands: 1,
1013
+ check: true
1014
+ };
1015
+ METADATA[Op.PopulateLayout] = {
1016
+ name: 'PopulateLayout',
1017
+ mnemonic: 'comp_layoutput',
1018
+ before: null,
1019
+ stackChange: -2,
1020
+ ops: [{
1021
+ name: 'state',
1022
+ type: 'register'
1023
+ }],
1024
+ operands: 1,
1025
+ check: true
1026
+ };
1027
+ METADATA[Op.InvokeComponentLayout] = {
1028
+ name: 'InvokeComponentLayout',
1029
+ mnemonic: 'comp_invokelayout',
1030
+ before: null,
1031
+ stackChange: 0,
1032
+ ops: [{
1033
+ name: 'state',
1034
+ type: 'register'
1035
+ }],
1036
+ operands: 1,
1037
+ check: true
1038
+ };
1039
+ METADATA[Op.BeginComponentTransaction] = {
1040
+ name: 'BeginComponentTransaction',
1041
+ mnemonic: 'comp_begin',
1042
+ before: null,
1043
+ stackChange: 0,
1044
+ ops: [],
1045
+ operands: 0,
1046
+ check: true
1047
+ };
1048
+ METADATA[Op.CommitComponentTransaction] = {
1049
+ name: 'CommitComponentTransaction',
1050
+ mnemonic: 'comp_commit',
1051
+ before: null,
1052
+ stackChange: 0,
1053
+ ops: [],
1054
+ operands: 0,
1055
+ check: true
1056
+ };
1057
+ METADATA[Op.DidCreateElement] = {
1058
+ name: 'DidCreateElement',
1059
+ mnemonic: 'comp_created',
1060
+ before: null,
1061
+ stackChange: 0,
1062
+ ops: [{
1063
+ name: 'state',
1064
+ type: 'register'
1065
+ }],
1066
+ operands: 1,
1067
+ check: true
1068
+ };
1069
+ METADATA[Op.DidRenderLayout] = {
1070
+ name: 'DidRenderLayout',
1071
+ mnemonic: 'comp_rendered',
1072
+ before: null,
1073
+ stackChange: 0,
1074
+ ops: [{
1075
+ name: 'state',
1076
+ type: 'register'
1077
+ }],
1078
+ operands: 1,
1079
+ check: true
1080
+ };
1081
+ METADATA[Op.ResolveMaybeLocal] = {
1082
+ name: 'ResolveMaybeLocal',
1083
+ mnemonic: 'eval_varload',
1084
+ before: null,
1085
+ stackChange: 1,
1086
+ ops: [{
1087
+ name: 'local',
1088
+ type: 'str'
1089
+ }],
1090
+ operands: 1,
1091
+ check: true
1092
+ };
1093
+ METADATA[Op.Debugger] = {
1094
+ name: 'Debugger',
1095
+ mnemonic: 'debugger',
1096
+ before: null,
1097
+ stackChange: 0,
1098
+ ops: [{
1099
+ name: 'symbols',
1100
+ type: 'str-array'
1101
+ }, {
1102
+ name: 'debugInfo',
1103
+ type: 'array'
1104
+ }],
1105
+ operands: 2,
1106
+ check: true
1107
+ };
1108
+
1109
+ function debugSlice(context, start, end) {
1110
+ }
1111
+ function logOpcode(type, params) {
1112
+ }
1113
+ function debug(c, op, isMachine) {
1114
+ return undefined;
1115
+ }
1116
+
1117
+ // TODO: How do these map onto constant and machine types?
1118
+ const OPERAND_TYPES = ['u32', 'i32', 'owner', 'handle', 'str', 'option-str', 'array', 'str-array', 'bool', 'primitive', 'register', 'unknown', 'symbol-table', 'scope'];
1119
+ function isOperandType(s) {
1120
+ return OPERAND_TYPES.indexOf(s) !== -1;
1121
+ }
1122
+ function normalize(key, input) {
1123
+ let name;
1124
+ if (input.format === undefined) {
1125
+ throw new Error(`Missing format in ${JSON.stringify(input)}`);
1126
+ }
1127
+ if (Array.isArray(input.format)) {
1128
+ name = input.format[0];
1129
+ } else {
1130
+ name = input.format;
1131
+ }
1132
+ let ops = Array.isArray(input.format) ? operands(input.format.slice(1)) : [];
1133
+ return {
1134
+ name,
1135
+ mnemonic: key,
1136
+ before: null,
1137
+ stackChange: stackChange(input['operand-stack']),
1138
+ ops,
1139
+ operands: ops.length,
1140
+ check: input.skip === true ? false : true
1141
+ };
1142
+ }
1143
+ function stackChange(stack) {
1144
+ if (stack === undefined) {
1145
+ return 0;
1146
+ }
1147
+ let before = stack[0];
1148
+ let after = stack[1];
1149
+ if (hasRest(before) || hasRest(after)) {
1150
+ return null;
1151
+ }
1152
+ return after.length - before.length;
1153
+ }
1154
+ function hasRest(input) {
1155
+ if (!Array.isArray(input)) {
1156
+ throw new Error(`Unexpected stack entry: ${JSON.stringify(input)}`);
1157
+ }
1158
+ return input.some(s => s.slice(-3) === '...');
1159
+ }
1160
+ function operands(input) {
1161
+ if (!Array.isArray(input)) {
1162
+ throw new Error(`Expected operands array, got ${JSON.stringify(input)}`);
1163
+ }
1164
+ return input.map(op);
1165
+ }
1166
+ function op(input) {
1167
+ let [name, type] = input.split(':');
1168
+ if (isOperandType(type)) {
1169
+ return {
1170
+ name,
1171
+ type
1172
+ };
1173
+ } else {
1174
+ throw new Error(`Expected operand, found ${JSON.stringify(input)}`);
1175
+ }
1176
+ }
1177
+ function normalizeAll(parsed) {
1178
+ let machine = normalizeParsed(parsed.machine);
1179
+ let syscall = normalizeParsed(parsed.syscall);
1180
+ return {
1181
+ machine,
1182
+ syscall
1183
+ };
1184
+ }
1185
+ function normalizeParsed(parsed) {
1186
+ let out = Object.create(null);
1187
+ for (const [key, value] of Object.entries(parsed)) {
1188
+ out[key] = normalize(key, value);
1189
+ }
1190
+ return out;
1191
+ }
1192
+ function buildEnum(name, parsed, offset, max) {
1193
+ let e = [`export enum ${name} {`];
1194
+ let last;
1195
+ Object.values(parsed).forEach((value, i) => {
1196
+ e.push(` ${value.name} = ${offset + i},`);
1197
+ last = i;
1198
+ });
1199
+ e.push(` Size = ${last + offset + 1},`);
1200
+ e.push('}');
1201
+ let enumString = e.join('\n');
1202
+ let predicate;
1203
+ if (max) {
1204
+ predicate = strip`
1205
+ export function is${name}(value: number): value is ${name} {
1206
+ return value >= ${offset} && value <= ${max};
1207
+ }
1208
+ `;
1209
+ } else {
1210
+ predicate = strip`
1211
+ export function is${name}(value: number): value is ${name} {
1212
+ return value >= ${offset};
1213
+ }
1214
+ `;
1215
+ }
1216
+ return {
1217
+ enumString,
1218
+ predicate
1219
+ };
1220
+ }
1221
+ function strip(strings) {
1222
+ let out = '';
1223
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
1224
+ args[_key - 1] = arguments[_key];
1225
+ }
1226
+ for (let i = 0; i < strings.length; i++) {
1227
+ let string = strings[i];
1228
+ let dynamic = args[i] !== undefined ? String(args[i]) : '';
1229
+ out += `${string}${dynamic}`;
1230
+ }
1231
+
1232
+ // eslint-disable-next-line regexp/no-super-linear-backtracking
1233
+ out = /^\s*?\n?([\s\S]*?)\s*$/u.exec(out)[1];
1234
+ let min = 9007199254740991; // Number.MAX_SAFE_INTEGER isn't available on IE11
1235
+
1236
+ for (let line of out.split('\n')) {
1237
+ let leading = /^\s*/u.exec(line)[0].length;
1238
+ min = Math.min(min, leading);
1239
+ }
1240
+ let stripped = '';
1241
+ for (let line of out.split('\n')) {
1242
+ stripped += line.slice(min) + '\n';
1243
+ }
1244
+ return stripped;
1245
+ }
1246
+ const META_KIND = ['METADATA', 'MACHINE_METADATA'];
1247
+ function buildSingleMeta(kind, all, key) {
1248
+ let e = kind === 'MACHINE_METADATA' ? 'MachineOp' : 'Op';
1249
+ return `${kind}[${e}.${all[key].name}] = ${stringify(all[key], 0)};`;
1250
+ }
1251
+ function stringify(o, pad) {
1252
+ if (typeof o !== 'object' || o === null) {
1253
+ if (typeof o === 'string') {
1254
+ return `'${o}'`;
1255
+ }
1256
+ return JSON.stringify(o);
1257
+ }
1258
+ if (Array.isArray(o)) {
1259
+ return `[${o.map(v => stringify(v, pad)).join(', ')}]`;
1260
+ }
1261
+ let out = ['{'];
1262
+ for (let key of Object.keys(o)) {
1263
+ out.push(`${' '.repeat(pad + 2)}${key}: ${stringify(o[key], pad + 2)},`);
1264
+ }
1265
+ out.push(`${' '.repeat(pad)}}`);
1266
+ return out.join('\n');
1267
+ }
1268
+ function buildMetas(kind, all) {
1269
+ let out = [];
1270
+ for (let key of Object.keys(all)) {
1271
+ out.push(buildSingleMeta(kind, all, key));
1272
+ }
1273
+ return out.join('\n\n');
1274
+ }
1275
+
1276
+ function wrap(checker) {
1277
+ class Wrapped {
1278
+ validate(value) {
1279
+ return checker().validate(value);
1280
+ }
1281
+ expected() {
1282
+ return checker().expected();
1283
+ }
1284
+ }
1285
+ return new Wrapped();
1286
+ }
1287
+ class TypeofChecker {
1288
+ constructor(expectedType) {
1289
+ this.expectedType = expectedType;
1290
+ }
1291
+ validate(value) {
1292
+ return typeof value === this.expectedType;
1293
+ }
1294
+ expected() {
1295
+ return `typeof ${this.expectedType}`;
1296
+ }
1297
+ }
1298
+ class PrimitiveChecker {
1299
+ validate(value) {
1300
+ return typeof value !== 'string' || typeof value === 'number' || typeof value === 'string' || value === undefined || value === null;
1301
+ }
1302
+ expected() {
1303
+ return `a primitive`;
1304
+ }
1305
+ }
1306
+ class NullChecker {
1307
+ validate(value) {
1308
+ return value === null;
1309
+ }
1310
+ expected() {
1311
+ return `null`;
1312
+ }
1313
+ }
1314
+ class InstanceofChecker {
1315
+ constructor(Class) {
1316
+ this.Class = Class;
1317
+ }
1318
+ validate(value) {
1319
+ return value ? value instanceof this.Class : false;
1320
+ }
1321
+ expected() {
1322
+ return `an instance of ${this.Class.name}`;
1323
+ }
1324
+ }
1325
+ class OptionChecker {
1326
+ constructor(checker, emptyValue) {
1327
+ this.checker = checker;
1328
+ this.emptyValue = emptyValue;
1329
+ }
1330
+ validate(value) {
1331
+ if (value === this.emptyValue) return true;
1332
+ return this.checker.validate(value);
1333
+ }
1334
+ expected() {
1335
+ return `${this.checker.expected()} or null`;
1336
+ }
1337
+ }
1338
+ class MaybeChecker {
1339
+ constructor(checker) {
1340
+ this.checker = checker;
1341
+ }
1342
+ validate(value) {
1343
+ if (value === null || value === undefined) return true;
1344
+ return this.checker.validate(value);
1345
+ }
1346
+ expected() {
1347
+ return `${this.checker.expected()} or null or undefined`;
1348
+ }
1349
+ }
1350
+ class OrChecker {
1351
+ constructor(left, right) {
1352
+ this.left = left;
1353
+ this.right = right;
1354
+ }
1355
+ validate(value) {
1356
+ return this.left.validate(value) || this.right.validate(value);
1357
+ }
1358
+ expected() {
1359
+ return `${this.left.expected()} or ${this.right.expected()}`;
1360
+ }
1361
+ }
1362
+ class ExactValueChecker {
1363
+ constructor(value, desc) {
1364
+ this.value = value;
1365
+ this.desc = desc;
1366
+ }
1367
+ validate(obj) {
1368
+ return obj === this.value;
1369
+ }
1370
+ expected() {
1371
+ return this.desc;
1372
+ }
1373
+ }
1374
+ class PropertyChecker {
1375
+ constructor(checkers) {
1376
+ this.checkers = checkers;
1377
+ }
1378
+ validate(obj) {
1379
+ if (typeof obj !== 'object') return false;
1380
+ if (obj === null || obj === undefined) return false;
1381
+ return Object.entries(this.checkers).every(_ref => {
1382
+ let [k, checker] = _ref;
1383
+ return k in obj ? checker.validate(obj[k]) : false;
1384
+ });
1385
+ }
1386
+ expected() {
1387
+ let pairs = Object.entries(this.checkers).map(_ref2 => {
1388
+ let [k, checker] = _ref2;
1389
+ return `${k}: ${checker.expected()}`;
1390
+ });
1391
+ return `{ ${pairs.join(',')} }`;
1392
+ }
1393
+ }
1394
+ class ArrayChecker {
1395
+ constructor(checker) {
1396
+ this.checker = checker;
1397
+ }
1398
+ validate(obj) {
1399
+ if (obj === null || obj === undefined) return false;
1400
+ if (!Array.isArray(obj)) return false;
1401
+ return obj.every(item => this.checker.validate(item));
1402
+ }
1403
+ expected() {
1404
+ return `Array<${this.checker.expected()}>`;
1405
+ }
1406
+ }
1407
+ class DictChecker {
1408
+ constructor(checker) {
1409
+ this.checker = checker;
1410
+ }
1411
+ validate(value) {
1412
+ let isDict = typeof value === 'object' && value !== null && Object.getPrototypeOf(value) === null;
1413
+ if (!isDict) return false;
1414
+ let {
1415
+ checker
1416
+ } = this;
1417
+ for (let key in value) {
1418
+ if (!checker.validate(value[key])) {
1419
+ return false;
1420
+ }
1421
+ }
1422
+ return true;
1423
+ }
1424
+ expected() {
1425
+ return `a primitive`;
1426
+ }
1427
+ }
1428
+ class OpaqueChecker {
1429
+ type;
1430
+ validate(_obj) {
1431
+ return true;
1432
+ }
1433
+ expected() {
1434
+ return `any`;
1435
+ }
1436
+ }
1437
+ class ObjectChecker {
1438
+ validate(obj) {
1439
+ return typeof obj === 'function' || typeof obj === 'object' && obj !== null;
1440
+ }
1441
+ expected() {
1442
+ return `an object or function (valid WeakMap key)`;
1443
+ }
1444
+ }
1445
+ class SafeStringChecker {
1446
+ validate(value) {
1447
+ return typeof value === 'object' && value !== null && typeof value.toHTML === 'function';
1448
+ }
1449
+ expected() {
1450
+ return `SafeString`;
1451
+ }
1452
+ }
1453
+ function CheckInstanceof(Class) {
1454
+ return new InstanceofChecker(Class);
1455
+ }
1456
+ function CheckOption(checker) {
1457
+ return new OptionChecker(checker, null);
1458
+ }
1459
+ function CheckMaybe(checker) {
1460
+ return new MaybeChecker(checker);
1461
+ }
1462
+ function CheckInterface(obj) {
1463
+ return new PropertyChecker(obj);
1464
+ }
1465
+ function CheckArray(obj) {
1466
+ return new ArrayChecker(obj);
1467
+ }
1468
+ function CheckDict(obj) {
1469
+ return new DictChecker(obj);
1470
+ }
1471
+ function defaultMessage(value, expected) {
1472
+ return `Got ${value}, expected:\n${expected}`;
1473
+ }
1474
+ function check(value, checker) {
1475
+ let message = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultMessage;
1476
+ if (typeof checker === 'function') {
1477
+ checker(value);
1478
+ return value;
1479
+ }
1480
+ if (checker.validate(value)) {
1481
+ return value;
1482
+ } else {
1483
+ throw new Error(message(value, checker.expected()));
1484
+ }
1485
+ }
1486
+ let size = 0;
1487
+ function recordStackSize(sp) {
1488
+ size = sp;
1489
+ }
1490
+ function expectStackChange(stack, expected, name) {
1491
+ let actual = stack.sp - size;
1492
+ if (actual === expected) return;
1493
+ throw new Error(`Expected stack to change by ${expected}, but it changed by ${actual} in ${name}`);
1494
+ }
1495
+ const CheckPrimitive = new PrimitiveChecker();
1496
+ const CheckFunction = new TypeofChecker('function');
1497
+ const CheckNumber = new TypeofChecker('number');
1498
+ const CheckBoolean = new TypeofChecker('boolean');
1499
+ const CheckHandle = CheckNumber;
1500
+ const CheckString = new TypeofChecker('string');
1501
+ const CheckNull = new NullChecker();
1502
+ const CheckUnknown = new OpaqueChecker();
1503
+ const CheckSafeString = new SafeStringChecker();
1504
+ const CheckObject = new ObjectChecker();
1505
+ function CheckOr(left, right) {
1506
+ return new OrChecker(left, right);
1507
+ }
1508
+ function CheckValue(value) {
1509
+ let desc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(value);
1510
+ return new ExactValueChecker(value, desc);
1511
+ }
1512
+ const CheckBlockSymbolTable = CheckInterface({
1513
+ parameters: CheckArray(CheckNumber)
1514
+ });
1515
+ const CheckProgramSymbolTable = CheckInterface({
1516
+ hasEval: CheckBoolean,
1517
+ symbols: CheckArray(CheckString)
1518
+ });
1519
+ const CheckElement = CheckInterface({
1520
+ nodeType: CheckValue(1),
1521
+ tagName: CheckString,
1522
+ nextSibling: CheckUnknown
1523
+ });
1524
+ const CheckDocumentFragment = CheckInterface({
1525
+ nodeType: CheckValue(11),
1526
+ nextSibling: CheckUnknown
1527
+ });
1528
+ const CheckNode = CheckInterface({
1529
+ nodeType: CheckNumber,
1530
+ nextSibling: CheckUnknown
1531
+ });
1532
+
1533
+ export { CheckArray, CheckBlockSymbolTable, CheckBoolean, CheckDict, CheckDocumentFragment, CheckElement, CheckFunction, CheckHandle, CheckInstanceof, CheckInterface, CheckMaybe, CheckNode, CheckNull, CheckNumber, CheckObject, CheckOption, CheckOr, CheckPrimitive, CheckProgramSymbolTable, CheckSafeString, CheckString, CheckUnknown, CheckValue, META_KIND, OPERAND_TYPES, buildEnum, buildMetas, buildSingleMeta, check, debug, debugSlice, expectStackChange, logOpcode, normalize, normalizeAll, normalizeParsed, opcodeMetadata, recordStackSize, strip, wrap };