@@ -3058,14 +3058,16 @@ Module['getExpressionType'] = function(expr) {
3058
3058
Module [ 'getExpressionInfo' ] = function ( expr ) {
3059
3059
const id = Module [ '_BinaryenExpressionGetId' ] ( expr ) ;
3060
3060
const type = Module [ '_BinaryenExpressionGetType' ] ( expr ) ;
3061
- switch ( id ) { // TODO: GC instructions
3062
- case Module [ 'BlockId' ] :
3061
+ switch ( id ) {
3062
+ case Module [ 'BlockId' ] : {
3063
+ const name = Module [ '_BinaryenBlockGetName' ] ( expr ) ;
3063
3064
return {
3064
3065
'id' : id ,
3065
3066
'type' : type ,
3066
- 'name' : UTF8ToString ( Module [ '_BinaryenBlockGetName' ] ( expr ) ) ,
3067
+ 'name' : name ? UTF8ToString ( name ) : null ,
3067
3068
'children' : getAllNested ( expr , Module [ '_BinaryenBlockGetNumChildren' ] , Module [ '_BinaryenBlockGetChildAt' ] )
3068
3069
} ;
3070
+ }
3069
3071
case Module [ 'IfId' ] :
3070
3072
return {
3071
3073
'id' : id ,
@@ -3074,21 +3076,25 @@ Module['getExpressionInfo'] = function(expr) {
3074
3076
'ifTrue' : Module [ '_BinaryenIfGetIfTrue' ] ( expr ) ,
3075
3077
'ifFalse' : Module [ '_BinaryenIfGetIfFalse' ] ( expr )
3076
3078
} ;
3077
- case Module [ 'LoopId' ] :
3079
+ case Module [ 'LoopId' ] : {
3080
+ const name = Module [ '_BinaryenLoopGetName' ] ( expr ) ;
3078
3081
return {
3079
3082
'id' : id ,
3080
3083
'type' : type ,
3081
- 'name' : UTF8ToString ( Module [ '_BinaryenLoopGetName' ] ( expr ) ) ,
3084
+ 'name' : name ? UTF8ToString ( name ) : null ,
3082
3085
'body' : Module [ '_BinaryenLoopGetBody' ] ( expr )
3083
3086
} ;
3084
- case Module [ 'BreakId' ] :
3087
+ }
3088
+ case Module [ 'BreakId' ] : {
3089
+ const name = Module [ '_BinaryenBreakGetName' ] ( expr ) ;
3085
3090
return {
3086
3091
'id' : id ,
3087
3092
'type' : type ,
3088
- 'name' : UTF8ToString ( Module [ '_BinaryenBreakGetName' ] ( expr ) ) ,
3093
+ 'name' : name ? UTF8ToString ( name ) : null ,
3089
3094
'condition' : Module [ '_BinaryenBreakGetCondition' ] ( expr ) ,
3090
3095
'value' : Module [ '_BinaryenBreakGetValue' ] ( expr )
3091
3096
} ;
3097
+ }
3092
3098
case Module [ 'SwitchId' ] :
3093
3099
return {
3094
3100
'id' : id ,
@@ -3113,8 +3119,10 @@ Module['getExpressionInfo'] = function(expr) {
3113
3119
'type' : type ,
3114
3120
'isReturn' : Boolean ( Module [ '_BinaryenCallIndirectIsReturn' ] ( expr ) ) ,
3115
3121
'target' : Module [ '_BinaryenCallIndirectGetTarget' ] ( expr ) ,
3116
- 'table' : Module [ '_BinaryenCallIndirectGetTable' ] ( expr ) ,
3117
- 'operands' : getAllNested ( expr , Module [ '_BinaryenCallIndirectGetNumOperands' ] , Module [ '_BinaryenCallIndirectGetOperandAt' ] )
3122
+ 'table' : UTF8ToString ( Module [ '_BinaryenCallIndirectGetTable' ] ( expr ) ) ,
3123
+ 'operands' : getAllNested ( expr , Module [ '_BinaryenCallIndirectGetNumOperands' ] , Module [ '_BinaryenCallIndirectGetOperandAt' ] ) ,
3124
+ 'params' : Module [ '_BinaryenCallIndirectGetParams' ] ( expr ) ,
3125
+ 'results' : Module [ '_BinaryenCallIndirectGetResults' ] ( expr )
3118
3126
} ;
3119
3127
case Module [ 'LocalGetId' ] :
3120
3128
return {
@@ -3192,7 +3200,8 @@ Module['getExpressionInfo'] = function(expr) {
3192
3200
'bytes' : Module [ '_BinaryenStoreGetBytes' ] ( expr ) ,
3193
3201
'align' : Module [ '_BinaryenStoreGetAlign' ] ( expr ) ,
3194
3202
'ptr' : Module [ '_BinaryenStoreGetPtr' ] ( expr ) ,
3195
- 'value' : Module [ '_BinaryenStoreGetValue' ] ( expr )
3203
+ 'value' : Module [ '_BinaryenStoreGetValue' ] ( expr ) ,
3204
+ 'valueType' : Module [ '_BinaryenStoreGetValueType' ] ( expr )
3196
3205
} ;
3197
3206
case Module [ 'ConstId' ] : {
3198
3207
let value ;
@@ -3386,11 +3395,13 @@ Module['getExpressionInfo'] = function(expr) {
3386
3395
'align' : Module [ '_BinaryenSIMDLoadStoreLaneGetAlign' ] ( expr ) ,
3387
3396
'index' : Module [ '_BinaryenSIMDLoadStoreLaneGetIndex' ] ( expr ) ,
3388
3397
'ptr' : Module [ '_BinaryenSIMDLoadStoreLaneGetPtr' ] ( expr ) ,
3389
- 'vec' : Module [ '_BinaryenSIMDLoadStoreLaneGetVec' ] ( expr )
3398
+ 'vec' : Module [ '_BinaryenSIMDLoadStoreLaneGetVec' ] ( expr ) ,
3399
+ 'isStore' : Boolean ( Module [ '_BinaryenSIMDLoadStoreLaneIsStore' ] ( expr ) )
3390
3400
} ;
3391
3401
case Module [ 'MemoryInitId' ] :
3392
3402
return {
3393
3403
'id' : id ,
3404
+ 'type' : type ,
3394
3405
'segment' : UTF8ToString ( Module [ '_BinaryenMemoryInitGetSegment' ] ( expr ) ) ,
3395
3406
'dest' : Module [ '_BinaryenMemoryInitGetDest' ] ( expr ) ,
3396
3407
'offset' : Module [ '_BinaryenMemoryInitGetOffset' ] ( expr ) ,
@@ -3399,18 +3410,21 @@ Module['getExpressionInfo'] = function(expr) {
3399
3410
case Module [ 'DataDropId' ] :
3400
3411
return {
3401
3412
'id' : id ,
3413
+ 'type' : type ,
3402
3414
'segment' : UTF8ToString ( Module [ '_BinaryenDataDropGetSegment' ] ( expr ) ) ,
3403
3415
} ;
3404
3416
case Module [ 'MemoryCopyId' ] :
3405
3417
return {
3406
3418
'id' : id ,
3419
+ 'type' : type ,
3407
3420
'dest' : Module [ '_BinaryenMemoryCopyGetDest' ] ( expr ) ,
3408
3421
'source' : Module [ '_BinaryenMemoryCopyGetSource' ] ( expr ) ,
3409
3422
'size' : Module [ '_BinaryenMemoryCopyGetSize' ] ( expr )
3410
3423
} ;
3411
3424
case Module [ 'MemoryFillId' ] :
3412
3425
return {
3413
3426
'id' : id ,
3427
+ 'type' : type ,
3414
3428
'dest' : Module [ '_BinaryenMemoryFillGetDest' ] ( expr ) ,
3415
3429
'value' : Module [ '_BinaryenMemoryFillGetValue' ] ( expr ) ,
3416
3430
'size' : Module [ '_BinaryenMemoryFillGetSize' ] ( expr )
@@ -3446,18 +3460,155 @@ Module['getExpressionInfo'] = function(expr) {
3446
3460
'left' : Module [ '_BinaryenRefEqGetLeft' ] ( expr ) ,
3447
3461
'right' : Module [ '_BinaryenRefEqGetRight' ] ( expr )
3448
3462
} ;
3449
- case Module [ 'TryId' ] :
3463
+ case Module [ 'RefTestId' ] :
3464
+ return {
3465
+ 'id' : id ,
3466
+ 'type' : type ,
3467
+ 'ref' : Module [ '_BinaryenRefTestGetRef' ] ( expr ) ,
3468
+ 'castType' : Module [ '_BinaryenRefTestGetCastType' ] ( expr )
3469
+ } ;
3470
+ case Module [ 'RefCastId' ] :
3471
+ return {
3472
+ 'id' : id ,
3473
+ 'type' : type ,
3474
+ 'ref' : Module [ '_BinaryenRefCastGetRef' ] ( expr )
3475
+ } ;
3476
+ case Module [ 'BrOnId' ] :
3477
+ return {
3478
+ 'id' : id ,
3479
+ 'type' : type ,
3480
+ 'op' : Module [ '_BinaryenBrOnGetOp' ] ( expr ) ,
3481
+ 'name' : UTF8ToString ( Module [ '_BinaryenBrOnGetName' ] ( expr ) ) ,
3482
+ 'ref' : Module [ '_BinaryenBrOnGetRef' ] ( expr ) ,
3483
+ 'castType' : Module [ '_BinaryenBrOnGetCastType' ] ( expr )
3484
+ } ;
3485
+ case Module [ 'StructNewId' ] :
3486
+ return {
3487
+ 'id' : id ,
3488
+ 'type' : type ,
3489
+ 'operands' : getAllNested ( expr , Module [ '_BinaryenStructNewGetNumOperands' ] , Module [ '_BinaryenStructNewGetOperandAt' ] ) ,
3490
+ } ;
3491
+ case Module [ 'StructGetId' ] :
3492
+ return {
3493
+ 'id' : id ,
3494
+ 'type' : type ,
3495
+ 'index' : Module [ '_BinaryenStructGetGetIndex' ] ( expr ) ,
3496
+ 'ref' : Module [ '_BinaryenStructGetGetRef' ] ( expr ) ,
3497
+ 'isSigned' : Boolean ( Module [ '_BinaryenStructGetIsSigned' ] ( expr ) )
3498
+ } ;
3499
+ case Module [ 'StructSetId' ] :
3500
+ return {
3501
+ 'id' : id ,
3502
+ 'type' : type ,
3503
+ 'index' : Module [ '_BinaryenStructSetGetIndex' ] ( expr ) ,
3504
+ 'ref' : Module [ '_BinaryenStructSetGetRef' ] ( expr ) ,
3505
+ 'value' : Module [ '_BinaryenStructSetGetValue' ] ( expr )
3506
+ } ;
3507
+ case Module [ 'ArrayNewId' ] :
3508
+ return {
3509
+ 'id' : id ,
3510
+ 'type' : type ,
3511
+ 'init' : Module [ '_BinaryenArrayNewGetInit' ] ( expr ) ,
3512
+ 'size' : Module [ '_BinaryenArrayNewGetSize' ] ( expr )
3513
+ } ;
3514
+ case Module [ 'ArrayNewFixedId' ] :
3515
+ return {
3516
+ 'id' : id ,
3517
+ 'type' : type ,
3518
+ 'values' : getAllNested ( expr , Module [ '_BinaryenArrayNewFixedGetNumValues' ] , Module [ '_BinaryenArrayNewFixedGetValueAt' ] )
3519
+ } ;
3520
+ case Module [ 'ArrayNewDataId' ] :
3521
+ return {
3522
+ 'id' : id ,
3523
+ 'type' : type ,
3524
+ 'segment' : UTF8ToString ( Module [ '_BinaryenArrayNewDataGetSegment' ] ( expr ) ) ,
3525
+ 'offset' : Module [ '_BinaryenArrayNewDataGetOffset' ] ( expr ) ,
3526
+ 'size' : Module [ '_BinaryenArrayNewDataGetSize' ] ( expr )
3527
+ } ;
3528
+ case Module [ 'ArrayNewElemId' ] :
3529
+ return {
3530
+ 'id' : id ,
3531
+ 'type' : type ,
3532
+ 'segment' : UTF8ToString ( Module [ '_BinaryenArrayNewElemGetSegment' ] ( expr ) ) ,
3533
+ 'offset' : Module [ '_BinaryenArrayNewElemGetOffset' ] ( expr ) ,
3534
+ 'size' : Module [ '_BinaryenArrayNewElemGetSize' ] ( expr )
3535
+ } ;
3536
+ case Module [ 'ArrayGetId' ] :
3537
+ return {
3538
+ 'id' : id ,
3539
+ 'type' : type ,
3540
+ 'ref' : Module [ '_BinaryenArrayGetGetRef' ] ( expr ) ,
3541
+ 'index' : Module [ '_BinaryenArrayGetGetIndex' ] ( expr ) ,
3542
+ 'isSigned' : Boolean ( Module [ '_BinaryenArrayGetIsSigned' ] ( expr ) )
3543
+ } ;
3544
+ case Module [ 'ArraySetId' ] :
3545
+ return {
3546
+ 'id' : id ,
3547
+ 'type' : type ,
3548
+ 'ref' : Module [ '_BinaryenArraySetGetRef' ] ( expr ) ,
3549
+ 'index' : Module [ '_BinaryenArraySetGetIndex' ] ( expr ) ,
3550
+ 'value' : Module [ '_BinaryenArraySetGetValue' ] ( expr )
3551
+ } ;
3552
+ case Module [ 'ArrayLenId' ] :
3553
+ return {
3554
+ 'id' : id ,
3555
+ 'type' : type ,
3556
+ 'ref' : Module [ '_BinaryenArrayLenGetRef' ] ( expr )
3557
+ } ;
3558
+ case Module [ 'ArrayFillId' ] :
3559
+ return {
3560
+ 'id' : id ,
3561
+ 'type' : type ,
3562
+ 'ref' : Module [ '_BinaryenArrayFillGetRef' ] ( expr ) ,
3563
+ 'index' : Module [ '_BinaryenArrayFillGetIndex' ] ( expr ) ,
3564
+ 'value' : Module [ '_BinaryenArrayFillGetValue' ] ( expr ) ,
3565
+ 'size' : Module [ '_BinaryenArrayFillGetSize' ] ( expr )
3566
+ } ;
3567
+ case Module [ 'ArrayCopyId' ] :
3568
+ return {
3569
+ 'id' : id ,
3570
+ 'type' : type ,
3571
+ 'destRef' : Module [ '_BinaryenArrayCopyGetDestRef' ] ( expr ) ,
3572
+ 'destIndex' : Module [ '_BinaryenArrayCopyGetDestIndex' ] ( expr ) ,
3573
+ 'srcRef' : Module [ '_BinaryenArrayCopyGetSrcRef' ] ( expr ) ,
3574
+ 'srcIndex' : Module [ '_BinaryenArrayCopyGetSrcIndex' ] ( expr ) ,
3575
+ 'length' : Module [ '_BinaryenArrayCopyGetLength' ] ( expr )
3576
+ } ;
3577
+ case Module [ 'ArrayInitDataId' ] :
3450
3578
return {
3451
3579
'id' : id ,
3452
3580
'type' : type ,
3453
- 'name' : UTF8ToString ( Module [ '_BinaryenTryGetName' ] ( expr ) ) ,
3581
+ 'segment' : UTF8ToString ( Module [ '_BinaryenArrayInitDataGetSegment' ] ( expr ) ) ,
3582
+ 'ref' : Module [ '_BinaryenArrayInitDataGetRef' ] ( expr ) ,
3583
+ 'index' : Module [ '_BinaryenArrayInitDataGetIndex' ] ( expr ) ,
3584
+ 'offset' : Module [ '_BinaryenArrayInitDataGetOffset' ] ( expr ) ,
3585
+ 'size' : Module [ '_BinaryenArrayInitDataGetSize' ] ( expr )
3586
+ } ;
3587
+ case Module [ 'ArrayInitElemId' ] :
3588
+ return {
3589
+ 'id' : id ,
3590
+ 'type' : type ,
3591
+ 'segment' : UTF8ToString ( Module [ '_BinaryenArrayInitElemGetSegment' ] ( expr ) ) ,
3592
+ 'ref' : Module [ '_BinaryenArrayInitElemGetRef' ] ( expr ) ,
3593
+ 'index' : Module [ '_BinaryenArrayInitElemGetIndex' ] ( expr ) ,
3594
+ 'offset' : Module [ '_BinaryenArrayInitElemGetOffset' ] ( expr ) ,
3595
+ 'size' : Module [ '_BinaryenArrayInitElemGetSize' ] ( expr )
3596
+ } ;
3597
+ case Module [ 'TryId' ] : {
3598
+ const name = Module [ '_BinaryenTryGetName' ] ( expr ) ;
3599
+ const delegateTarget = Module [ '_BinaryenTryGetDelegateTarget' ] ( expr ) ;
3600
+ return {
3601
+ 'id' : id ,
3602
+ 'type' : type ,
3603
+ 'name' : name ? UTF8ToString ( name ) : null ,
3454
3604
'body' : Module [ '_BinaryenTryGetBody' ] ( expr ) ,
3455
- 'catchTags' : getAllNested ( expr , Module [ '_BinaryenTryGetNumCatchTags' ] , Module [ '_BinaryenTryGetCatchTagAt' ] ) ,
3605
+ 'catchTags' : getAllNested ( expr , Module [ '_BinaryenTryGetNumCatchTags' ] , Module [ '_BinaryenTryGetCatchTagAt' ] ) . map ( p => UTF8ToString ( p ) ) ,
3456
3606
'catchBodies' : getAllNested ( expr , Module [ '_BinaryenTryGetNumCatchBodies' ] , Module [ '_BinaryenTryGetCatchBodyAt' ] ) ,
3457
- 'hasCatchAll' : Module [ '_BinaryenTryHasCatchAll' ] ( expr ) ,
3458
- 'delegateTarget' : UTF8ToString ( Module [ '_BinaryenTryGetDelegateTarget' ] ( expr ) ) ,
3459
- 'isDelegate' : Module [ '_BinaryenTryIsDelegate' ] ( expr )
3607
+ 'hasCatchAll' : Boolean ( Module [ '_BinaryenTryHasCatchAll' ] ( expr ) ) ,
3608
+ 'delegateTarget' : delegateTarget ? UTF8ToString ( delegateTarget ) : null ,
3609
+ 'isDelegate' : Boolean ( Module [ '_BinaryenTryIsDelegate' ] ( expr ) )
3460
3610
} ;
3611
+ }
3461
3612
case Module [ 'ThrowId' ] :
3462
3613
return {
3463
3614
'id' : id ,
0 commit comments