@mintplayer/polyglot-target-python 0.9.5 → 0.9.6

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 (2) hide show
  1. package/package.json +1 -1
  2. package/polyglot-plugin.json +491 -81
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mintplayer/polyglot-target-python",
3
- "version": "0.9.5",
3
+ "version": "0.9.6",
4
4
  "description": "MintPlayer Polyglot Python target — a pure-JSON language plugin (spec + emission rules + capabilities + std bindings) for the polyglot transpiler.",
5
5
  "keywords": [
6
6
  "polyglot",
@@ -113,6 +113,9 @@
113
113
  "__c*",
114
114
  "__o*",
115
115
  "__e",
116
+ "__handled",
117
+ "__pgm*",
118
+ "__dw*",
116
119
  "tag",
117
120
  "__opt*",
118
121
  "__w*"
@@ -311,7 +314,8 @@
311
314
  },
312
315
  ".get(",
313
316
  {
314
- "emit": "node.index"
317
+ "map": "node.indices",
318
+ "sep": ", "
315
319
  },
316
320
  ")"
317
321
  ]
@@ -333,6 +337,48 @@
333
337
  }
334
338
  }
335
339
  },
340
+ "IndexAssign": {
341
+ "line": {
342
+ "tmpl": [
343
+ {
344
+ "emitChild": "stmt.receiver",
345
+ "side": "recv"
346
+ },
347
+ ".set(",
348
+ {
349
+ "map": "stmt.indices",
350
+ "sep": ", "
351
+ },
352
+ ", ",
353
+ {
354
+ "emit": "stmt.value"
355
+ },
356
+ ")"
357
+ ]
358
+ }
359
+ },
360
+ "TupleLet": {
361
+ "line": {
362
+ "tmpl": [
363
+ {
364
+ "map": "stmt.names",
365
+ "sep": ", ",
366
+ "item": {
367
+ "fn": "ident",
368
+ "args": [
369
+ {
370
+ "get": "item"
371
+ }
372
+ ]
373
+ }
374
+ },
375
+ " = ",
376
+ {
377
+ "emit": "stmt.init"
378
+ }
379
+ ]
380
+ }
381
+ },
336
382
  "Cond": {
337
383
  "tmpl": [
338
384
  "(",
@@ -426,6 +472,41 @@
426
472
  ]
427
473
  }
428
474
  },
475
+ {
476
+ "case": {
477
+ "when": [
478
+ [
479
+ {
480
+ "and": [
481
+ {
482
+ "not": {
483
+ "eq": [ "node.params.count", "0" ]
484
+ }
485
+ },
486
+ {
487
+ "not": {
488
+ "eq": [ "node.byValueCaptures.count", "0" ]
489
+ }
490
+ }
491
+ ]
492
+ },
493
+ ", "
494
+ ]
495
+ ],
496
+ "else": ""
497
+ }
498
+ },
499
+ {
500
+ "map": "node.byValueCaptures",
501
+ "sep": ", ",
502
+ "item": {
503
+ "tmpl": [
504
+ { "fn": "ident", "args": [ { "get": "item" } ] },
505
+ "=",
506
+ { "fn": "ident", "args": [ { "get": "item" } ] }
507
+ ]
508
+ }
509
+ },
429
510
  ": ",
430
511
  {
431
512
  "emit": "node.body"
@@ -769,89 +850,222 @@
769
850
  }
770
851
  },
771
852
  {
772
- "mapDecl": "stmt.catches",
773
- "each": {
774
- "block": {
775
- "head": {
776
- "tmpl": [
777
- "except ",
778
- {
779
- "case": {
780
- "when": [
781
- [
782
- {
783
- "eq": [
784
- "item.hasType",
785
- "true"
786
- ]
787
- },
788
- {
789
- "type": "item.type"
790
- }
791
- ]
792
- ],
793
- "else": "Exception"
794
- }
795
- },
796
- {
797
- "case": {
798
- "when": [
799
- [
800
- {
801
- "eq": [
802
- "item.hasBinding",
803
- "true"
804
- ]
805
- },
806
- {
807
- "tmpl": [
808
- " as ",
853
+ "case": {
854
+ "when": [
855
+ [
856
+ {
857
+ "eq": [
858
+ "stmt.catchesHaveGuard",
859
+ "true"
860
+ ]
861
+ },
862
+ {
863
+ "block": {
864
+ "head": "except Exception as __e",
865
+ "body": [
866
+ {
867
+ "line": "__handled = False"
868
+ },
869
+ {
870
+ "mapDecl": "stmt.catches",
871
+ "each": {
872
+ "block": {
873
+ "head": {
874
+ "tmpl": [
875
+ "if not __handled",
876
+ {
877
+ "case": {
878
+ "when": [
879
+ [
880
+ {
881
+ "eq": [
882
+ "item.hasType",
883
+ "true"
884
+ ]
885
+ },
886
+ {
887
+ "tmpl": [
888
+ " and isinstance(__e, ",
889
+ {
890
+ "type": "item.type"
891
+ },
892
+ ")"
893
+ ]
894
+ }
895
+ ]
896
+ ]
897
+ }
898
+ }
899
+ ]
900
+ },
901
+ "body": [
809
902
  {
810
- "fn": "ident",
811
- "args": [
812
- {
813
- "get": "item.binding"
903
+ "case": {
904
+ "when": [
905
+ [
906
+ {
907
+ "eq": [
908
+ "item.hasBinding",
909
+ "true"
910
+ ]
911
+ },
912
+ {
913
+ "line": {
914
+ "tmpl": [
915
+ {
916
+ "fn": "ident",
917
+ "args": [
918
+ {
919
+ "get": "item.binding"
920
+ }
921
+ ]
922
+ },
923
+ " = __e"
924
+ ]
925
+ }
926
+ }
927
+ ]
928
+ ]
929
+ }
930
+ },
931
+ {
932
+ "case": {
933
+ "when": [
934
+ [
935
+ {
936
+ "eq": [
937
+ "item.hasGuard",
938
+ "true"
939
+ ]
940
+ },
941
+ {
942
+ "block": {
943
+ "head": {
944
+ "tmpl": [
945
+ "if ",
946
+ {
947
+ "emit": "item.guard"
948
+ }
949
+ ]
950
+ },
951
+ "body": [
952
+ {
953
+ "line": "__handled = True"
954
+ },
955
+ {
956
+ "stmts": "item.body"
957
+ }
958
+ ]
959
+ }
960
+ }
961
+ ]
962
+ ],
963
+ "else": {
964
+ "seq": [
965
+ {
966
+ "line": "__handled = True"
967
+ },
968
+ {
969
+ "stmts": "item.body"
970
+ }
971
+ ]
814
972
  }
815
- ]
973
+ }
816
974
  }
817
975
  ]
818
976
  }
819
- ]
820
- ]
821
- }
822
- }
823
- ]
824
- },
825
- "body": [
826
- {
827
- "case": {
828
- "when": [
829
- [
830
- {
831
- "eq": [
832
- "item.hasGuard",
833
- "true"
834
- ]
835
- },
836
- {
837
- "line": {
838
- "tmpl": [
839
- "if not (",
977
+ }
978
+ },
979
+ {
980
+ "case": {
981
+ "when": [
982
+ [
840
983
  {
841
- "emit": "item.guard"
984
+ "eq": [
985
+ "stmt.hasCatchAll",
986
+ "false"
987
+ ]
842
988
  },
843
- "): raise"
989
+ {
990
+ "block": {
991
+ "head": "if not __handled",
992
+ "body": [
993
+ {
994
+ "line": "raise"
995
+ }
996
+ ]
997
+ }
998
+ }
844
999
  ]
845
- }
1000
+ ]
846
1001
  }
847
- ]
1002
+ }
848
1003
  ]
849
1004
  }
850
- },
851
- {
852
- "call": "pyItemBody"
853
1005
  }
854
1006
  ]
1007
+ ],
1008
+ "else": {
1009
+ "mapDecl": "stmt.catches",
1010
+ "each": {
1011
+ "block": {
1012
+ "head": {
1013
+ "tmpl": [
1014
+ "except ",
1015
+ {
1016
+ "case": {
1017
+ "when": [
1018
+ [
1019
+ {
1020
+ "eq": [
1021
+ "item.hasType",
1022
+ "true"
1023
+ ]
1024
+ },
1025
+ {
1026
+ "type": "item.type"
1027
+ }
1028
+ ]
1029
+ ],
1030
+ "else": "Exception"
1031
+ }
1032
+ },
1033
+ {
1034
+ "case": {
1035
+ "when": [
1036
+ [
1037
+ {
1038
+ "eq": [
1039
+ "item.hasBinding",
1040
+ "true"
1041
+ ]
1042
+ },
1043
+ {
1044
+ "tmpl": [
1045
+ " as ",
1046
+ {
1047
+ "fn": "ident",
1048
+ "args": [
1049
+ {
1050
+ "get": "item.binding"
1051
+ }
1052
+ ]
1053
+ }
1054
+ ]
1055
+ }
1056
+ ]
1057
+ ]
1058
+ }
1059
+ }
1060
+ ]
1061
+ },
1062
+ "body": [
1063
+ {
1064
+ "call": "pyItemBody"
1065
+ }
1066
+ ]
1067
+ }
1068
+ }
855
1069
  }
856
1070
  }
857
1071
  },
@@ -2012,6 +2226,48 @@
2012
2226
  }
2013
2227
  }
2014
2228
  }
2229
+ },
2230
+ {
2231
+ "case": {
2232
+ "when": [
2233
+ [
2234
+ {
2235
+ "eq": [
2236
+ "decl.propHasSetter",
2237
+ "true"
2238
+ ]
2239
+ },
2240
+ {
2241
+ "seq": [
2242
+ {
2243
+ "line": {
2244
+ "tmpl": [
2245
+ "@",
2246
+ { "fn": "ident", "args": [ { "get": "decl.name" } ] },
2247
+ ".setter"
2248
+ ]
2249
+ }
2250
+ },
2251
+ {
2252
+ "block": {
2253
+ "head": {
2254
+ "tmpl": [
2255
+ "def ",
2256
+ { "fn": "ident", "args": [ { "get": "decl.name" } ] },
2257
+ "(self, ",
2258
+ { "fn": "ident", "args": [ { "get": "decl.propSetterParam" } ] },
2259
+ ")"
2260
+ ]
2261
+ },
2262
+ "body": [ { "stmts": "decl.propSetterBody" } ]
2263
+ }
2264
+ }
2265
+ ]
2266
+ }
2267
+ ]
2268
+ ],
2269
+ "else": ""
2270
+ }
2015
2271
  }
2016
2272
  ]
2017
2273
  },
@@ -2473,6 +2729,23 @@
2473
2729
  "pyArmValue": {
2474
2730
  "case": {
2475
2731
  "when": [
2732
+ [
2733
+ {
2734
+ "eq": [
2735
+ "item.pattern.kind",
2736
+ "typeTest"
2737
+ ]
2738
+ },
2739
+ {
2740
+ "tmpl": [
2741
+ "(lambda ",
2742
+ { "fn": "ident", "args": [ { "get": "item.pattern.binding" } ] },
2743
+ ": ",
2744
+ { "emit": "item.body" },
2745
+ ")(_m)"
2746
+ ]
2747
+ }
2748
+ ],
2476
2749
  [
2477
2750
  {
2478
2751
  "eq": [
@@ -2525,12 +2798,49 @@
2525
2798
  "map": "item.pattern.binders",
2526
2799
  "sep": ", ",
2527
2800
  "item": {
2528
- "fn": "ident",
2529
- "args": [
2530
- {
2531
- "get": "item.binding"
2801
+ "case": {
2802
+ "when": [
2803
+ [
2804
+ {
2805
+ "or": [
2806
+ {
2807
+ "eq": [
2808
+ "item.isLiteral",
2809
+ "true"
2810
+ ]
2811
+ },
2812
+ {
2813
+ "eq": [
2814
+ "item.isWildcard",
2815
+ "true"
2816
+ ]
2817
+ }
2818
+ ]
2819
+ },
2820
+ {
2821
+ "tmpl": [
2822
+ "__pgm_",
2823
+ {
2824
+ "fn": "ident",
2825
+ "args": [
2826
+ {
2827
+ "get": "item.field"
2828
+ }
2829
+ ]
2830
+ }
2831
+ ]
2832
+ }
2833
+ ]
2834
+ ],
2835
+ "else": {
2836
+ "fn": "ident",
2837
+ "args": [
2838
+ {
2839
+ "get": "item.binding"
2840
+ }
2841
+ ]
2532
2842
  }
2533
- ]
2843
+ }
2534
2844
  }
2535
2845
  },
2536
2846
  ": ",
@@ -2564,6 +2874,23 @@
2564
2874
  "pyArmGuard": {
2565
2875
  "case": {
2566
2876
  "when": [
2877
+ [
2878
+ {
2879
+ "eq": [
2880
+ "item.pattern.kind",
2881
+ "typeTest"
2882
+ ]
2883
+ },
2884
+ {
2885
+ "tmpl": [
2886
+ "(lambda ",
2887
+ { "fn": "ident", "args": [ { "get": "item.pattern.binding" } ] },
2888
+ ": ",
2889
+ { "emit": "item.guard" },
2890
+ ")(_m)"
2891
+ ]
2892
+ }
2893
+ ],
2567
2894
  [
2568
2895
  {
2569
2896
  "eq": [
@@ -2616,12 +2943,49 @@
2616
2943
  "map": "item.pattern.binders",
2617
2944
  "sep": ", ",
2618
2945
  "item": {
2619
- "fn": "ident",
2620
- "args": [
2621
- {
2622
- "get": "item.binding"
2946
+ "case": {
2947
+ "when": [
2948
+ [
2949
+ {
2950
+ "or": [
2951
+ {
2952
+ "eq": [
2953
+ "item.isLiteral",
2954
+ "true"
2955
+ ]
2956
+ },
2957
+ {
2958
+ "eq": [
2959
+ "item.isWildcard",
2960
+ "true"
2961
+ ]
2962
+ }
2963
+ ]
2964
+ },
2965
+ {
2966
+ "tmpl": [
2967
+ "__pgm_",
2968
+ {
2969
+ "fn": "ident",
2970
+ "args": [
2971
+ {
2972
+ "get": "item.field"
2973
+ }
2974
+ ]
2975
+ }
2976
+ ]
2977
+ }
2978
+ ]
2979
+ ],
2980
+ "else": {
2981
+ "fn": "ident",
2982
+ "args": [
2983
+ {
2984
+ "get": "item.binding"
2985
+ }
2986
+ ]
2623
2987
  }
2624
- ]
2988
+ }
2625
2989
  }
2626
2990
  },
2627
2991
  ": ",
@@ -2655,6 +3019,21 @@
2655
3019
  "pyArmBase": {
2656
3020
  "case": {
2657
3021
  "when": [
3022
+ [
3023
+ {
3024
+ "eq": [
3025
+ "item.pattern.kind",
3026
+ "typeTest"
3027
+ ]
3028
+ },
3029
+ {
3030
+ "tmpl": [
3031
+ "isinstance(_m, ",
3032
+ { "type": "item.pattern.testType" },
3033
+ ")"
3034
+ ]
3035
+ }
3036
+ ],
2658
3037
  [
2659
3038
  {
2660
3039
  "eq": [
@@ -2708,6 +3087,37 @@
2708
3087
  "get": "item.pattern.ctorCase"
2709
3088
  }
2710
3089
  ]
3090
+ },
3091
+ {
3092
+ "map": "item.pattern.binders",
3093
+ "sep": "",
3094
+ "item": {
3095
+ "case": {
3096
+ "when": [
3097
+ [
3098
+ {
3099
+ "eq": [
3100
+ "item.isLiteral",
3101
+ "true"
3102
+ ]
3103
+ },
3104
+ {
3105
+ "tmpl": [
3106
+ " and _m[\"",
3107
+ {
3108
+ "get": "item.field"
3109
+ },
3110
+ "\"] == ",
3111
+ {
3112
+ "emit": "item.literal"
3113
+ }
3114
+ ]
3115
+ }
3116
+ ]
3117
+ ],
3118
+ "else": ""
3119
+ }
3120
+ }
2711
3121
  }
2712
3122
  ]
2713
3123
  }