1{
2  "type": "Program",
3  "statements": [
4    {
5      "type": "ClassDeclaration",
6      "definition": {
7        "id": {
8          "type": "Identifier",
9          "name": "Tup",
10          "decorators": [],
11          "loc": {
12            "start": {
13              "line": 17,
14              "column": 7
15            },
16            "end": {
17              "line": 17,
18              "column": 10
19            }
20          }
21        },
22        "typeParameters": {
23          "type": "TSTypeParameterDeclaration",
24          "params": [
25            {
26              "type": "TSTypeParameter",
27              "name": {
28                "type": "Identifier",
29                "name": "A",
30                "decorators": [],
31                "loc": {
32                  "start": {
33                    "line": 17,
34                    "column": 11
35                  },
36                  "end": {
37                    "line": 17,
38                    "column": 12
39                  }
40                }
41              },
42              "loc": {
43                "start": {
44                  "line": 17,
45                  "column": 11
46                },
47                "end": {
48                  "line": 17,
49                  "column": 13
50                }
51              }
52            }
53          ],
54          "loc": {
55            "start": {
56              "line": 17,
57              "column": 10
58            },
59            "end": {
60              "line": 17,
61              "column": 13
62            }
63          }
64        },
65        "superClass": null,
66        "implements": [],
67        "body": [
68          {
69            "type": "MethodDefinition",
70            "key": {
71              "type": "Identifier",
72              "name": "constructor",
73              "decorators": [],
74              "loc": {
75                "start": {
76                  "line": 1,
77                  "column": 1
78                },
79                "end": {
80                  "line": 1,
81                  "column": 1
82                }
83              }
84            },
85            "kind": "constructor",
86            "static": false,
87            "optional": false,
88            "computed": false,
89            "value": {
90              "type": "FunctionExpression",
91              "function": {
92                "type": "ScriptFunction",
93                "id": {
94                  "type": "Identifier",
95                  "name": "constructor",
96                  "decorators": [],
97                  "loc": {
98                    "start": {
99                      "line": 1,
100                      "column": 1
101                    },
102                    "end": {
103                      "line": 1,
104                      "column": 1
105                    }
106                  }
107                },
108                "generator": false,
109                "async": false,
110                "expression": false,
111                "params": [],
112                "body": {
113                  "type": "BlockStatement",
114                  "statements": [],
115                  "loc": {
116                    "start": {
117                      "line": 1,
118                      "column": 1
119                    },
120                    "end": {
121                      "line": 1,
122                      "column": 1
123                    }
124                  }
125                },
126                "loc": {
127                  "start": {
128                    "line": 1,
129                    "column": 1
130                  },
131                  "end": {
132                    "line": 1,
133                    "column": 1
134                  }
135                }
136              },
137              "loc": {
138                "start": {
139                  "line": 1,
140                  "column": 1
141                },
142                "end": {
143                  "line": 1,
144                  "column": 1
145                }
146              }
147            },
148            "overloads": [],
149            "decorators": [],
150            "loc": {
151              "start": {
152                "line": 17,
153                "column": 16
154              },
155              "end": {
156                "line": 17,
157                "column": 16
158              }
159            }
160          }
161        ],
162        "loc": {
163          "start": {
164            "line": 17,
165            "column": 14
166          },
167          "end": {
168            "line": 17,
169            "column": 16
170          }
171        }
172      },
173      "loc": {
174        "start": {
175          "line": 17,
176          "column": 1
177        },
178        "end": {
179          "line": 17,
180          "column": 16
181        }
182      }
183    },
184    {
185      "type": "ClassDeclaration",
186      "definition": {
187        "id": {
188          "type": "Identifier",
189          "name": "ETSGLOBAL",
190          "decorators": [],
191          "loc": {
192            "start": {
193              "line": 1,
194              "column": 1
195            },
196            "end": {
197              "line": 1,
198              "column": 1
199            }
200          }
201        },
202        "superClass": null,
203        "implements": [],
204        "body": [
205          {
206            "type": "MethodDefinition",
207            "key": {
208              "type": "Identifier",
209              "name": "_$init$_",
210              "decorators": [],
211              "loc": {
212                "start": {
213                  "line": 1,
214                  "column": 1
215                },
216                "end": {
217                  "line": 1,
218                  "column": 1
219                }
220              }
221            },
222            "kind": "method",
223            "accessibility": "public",
224            "static": true,
225            "optional": false,
226            "computed": false,
227            "value": {
228              "type": "FunctionExpression",
229              "function": {
230                "type": "ScriptFunction",
231                "id": {
232                  "type": "Identifier",
233                  "name": "_$init$_",
234                  "decorators": [],
235                  "loc": {
236                    "start": {
237                      "line": 1,
238                      "column": 1
239                    },
240                    "end": {
241                      "line": 1,
242                      "column": 1
243                    }
244                  }
245                },
246                "generator": false,
247                "async": false,
248                "expression": false,
249                "params": [],
250                "body": {
251                  "type": "BlockStatement",
252                  "statements": [],
253                  "loc": {
254                    "start": {
255                      "line": 1,
256                      "column": 1
257                    },
258                    "end": {
259                      "line": 1,
260                      "column": 1
261                    }
262                  }
263                },
264                "loc": {
265                  "start": {
266                    "line": 1,
267                    "column": 1
268                  },
269                  "end": {
270                    "line": 1,
271                    "column": 1
272                  }
273                }
274              },
275              "loc": {
276                "start": {
277                  "line": 1,
278                  "column": 1
279                },
280                "end": {
281                  "line": 1,
282                  "column": 1
283                }
284              }
285            },
286            "overloads": [],
287            "decorators": [],
288            "loc": {
289              "start": {
290                "line": 1,
291                "column": 1
292              },
293              "end": {
294                "line": 1,
295                "column": 1
296              }
297            }
298          },
299          {
300            "type": "MethodDefinition",
301            "key": {
302              "type": "Identifier",
303              "name": "foo",
304              "decorators": [],
305              "loc": {
306                "start": {
307                  "line": 16,
308                  "column": 10
309                },
310                "end": {
311                  "line": 16,
312                  "column": 13
313                }
314              }
315            },
316            "kind": "method",
317            "accessibility": "public",
318            "static": true,
319            "optional": false,
320            "computed": false,
321            "value": {
322              "type": "FunctionExpression",
323              "function": {
324                "type": "ScriptFunction",
325                "id": {
326                  "type": "Identifier",
327                  "name": "foo",
328                  "decorators": [],
329                  "loc": {
330                    "start": {
331                      "line": 16,
332                      "column": 10
333                    },
334                    "end": {
335                      "line": 16,
336                      "column": 13
337                    }
338                  }
339                },
340                "generator": false,
341                "async": false,
342                "expression": false,
343                "params": [
344                  {
345                    "type": "ETSParameterExpression",
346                    "name": {
347                      "type": "Identifier",
348                      "name": "x",
349                      "typeAnnotation": {
350                        "type": "ETSFunctionType",
351                        "params": [],
352                        "returnType": {
353                          "type": "ETSTypeReference",
354                          "part": {
355                            "type": "ETSTypeReferencePart",
356                            "name": {
357                              "type": "Identifier",
358                              "name": "T",
359                              "decorators": [],
360                              "loc": {
361                                "start": {
362                                  "line": 16,
363                                  "column": 26
364                                },
365                                "end": {
366                                  "line": 16,
367                                  "column": 27
368                                }
369                              }
370                            },
371                            "loc": {
372                              "start": {
373                                "line": 16,
374                                "column": 26
375                              },
376                              "end": {
377                                "line": 16,
378                                "column": 28
379                              }
380                            }
381                          },
382                          "loc": {
383                            "start": {
384                              "line": 16,
385                              "column": 26
386                            },
387                            "end": {
388                              "line": 16,
389                              "column": 28
390                            }
391                          }
392                        },
393                        "loc": {
394                          "start": {
395                            "line": 16,
396                            "column": 20
397                          },
398                          "end": {
399                            "line": 16,
400                            "column": 28
401                          }
402                        }
403                      },
404                      "decorators": [],
405                      "loc": {
406                        "start": {
407                          "line": 16,
408                          "column": 17
409                        },
410                        "end": {
411                          "line": 16,
412                          "column": 28
413                        }
414                      }
415                    },
416                    "loc": {
417                      "start": {
418                        "line": 16,
419                        "column": 17
420                      },
421                      "end": {
422                        "line": 16,
423                        "column": 28
424                      }
425                    }
426                  }
427                ],
428                "returnType": {
429                  "type": "ETSPrimitiveType",
430                  "loc": {
431                    "start": {
432                      "line": 16,
433                      "column": 30
434                    },
435                    "end": {
436                      "line": 16,
437                      "column": 34
438                    }
439                  }
440                },
441                "typeParameters": {
442                  "type": "TSTypeParameterDeclaration",
443                  "params": [
444                    {
445                      "type": "TSTypeParameter",
446                      "name": {
447                        "type": "Identifier",
448                        "name": "T",
449                        "decorators": [],
450                        "loc": {
451                          "start": {
452                            "line": 16,
453                            "column": 14
454                          },
455                          "end": {
456                            "line": 16,
457                            "column": 15
458                          }
459                        }
460                      },
461                      "loc": {
462                        "start": {
463                          "line": 16,
464                          "column": 14
465                        },
466                        "end": {
467                          "line": 16,
468                          "column": 16
469                        }
470                      }
471                    }
472                  ],
473                  "loc": {
474                    "start": {
475                      "line": 16,
476                      "column": 13
477                    },
478                    "end": {
479                      "line": 16,
480                      "column": 16
481                    }
482                  }
483                },
484                "body": {
485                  "type": "BlockStatement",
486                  "statements": [],
487                  "loc": {
488                    "start": {
489                      "line": 16,
490                      "column": 35
491                    },
492                    "end": {
493                      "line": 16,
494                      "column": 37
495                    }
496                  }
497                },
498                "loc": {
499                  "start": {
500                    "line": 16,
501                    "column": 13
502                  },
503                  "end": {
504                    "line": 16,
505                    "column": 37
506                  }
507                }
508              },
509              "loc": {
510                "start": {
511                  "line": 16,
512                  "column": 13
513                },
514                "end": {
515                  "line": 16,
516                  "column": 37
517                }
518              }
519            },
520            "overloads": [],
521            "decorators": [],
522            "loc": {
523              "start": {
524                "line": 16,
525                "column": 1
526              },
527              "end": {
528                "line": 16,
529                "column": 37
530              }
531            }
532          },
533          {
534            "type": "MethodDefinition",
535            "key": {
536              "type": "Identifier",
537              "name": "main",
538              "decorators": [],
539              "loc": {
540                "start": {
541                  "line": 18,
542                  "column": 10
543                },
544                "end": {
545                  "line": 18,
546                  "column": 14
547                }
548              }
549            },
550            "kind": "method",
551            "accessibility": "public",
552            "static": true,
553            "optional": false,
554            "computed": false,
555            "value": {
556              "type": "FunctionExpression",
557              "function": {
558                "type": "ScriptFunction",
559                "id": {
560                  "type": "Identifier",
561                  "name": "main",
562                  "decorators": [],
563                  "loc": {
564                    "start": {
565                      "line": 18,
566                      "column": 10
567                    },
568                    "end": {
569                      "line": 18,
570                      "column": 14
571                    }
572                  }
573                },
574                "generator": false,
575                "async": false,
576                "expression": false,
577                "params": [],
578                "returnType": {
579                  "type": "ETSPrimitiveType",
580                  "loc": {
581                    "start": {
582                      "line": 18,
583                      "column": 18
584                    },
585                    "end": {
586                      "line": 18,
587                      "column": 22
588                    }
589                  }
590                },
591                "body": {
592                  "type": "BlockStatement",
593                  "statements": [
594                    {
595                      "type": "ExpressionStatement",
596                      "expression": {
597                        "type": "CallExpression",
598                        "callee": {
599                          "type": "Identifier",
600                          "name": "foo",
601                          "decorators": [],
602                          "loc": {
603                            "start": {
604                              "line": 19,
605                              "column": 3
606                            },
607                            "end": {
608                              "line": 19,
609                              "column": 6
610                            }
611                          }
612                        },
613                        "arguments": [
614                          {
615                            "type": "ArrowFunctionExpression",
616                            "function": {
617                              "type": "ScriptFunction",
618                              "id": null,
619                              "generator": false,
620                              "async": false,
621                              "expression": false,
622                              "params": [],
623                              "returnType": {
624                                "type": "ETSTypeReference",
625                                "part": {
626                                  "type": "ETSTypeReferencePart",
627                                  "name": {
628                                    "type": "Identifier",
629                                    "name": "Tup",
630                                    "decorators": [],
631                                    "loc": {
632                                      "start": {
633                                        "line": 19,
634                                        "column": 24
635                                      },
636                                      "end": {
637                                        "line": 19,
638                                        "column": 27
639                                      }
640                                    }
641                                  },
642                                  "typeParams": {
643                                    "type": "TSTypeParameterInstantiation",
644                                    "params": [
645                                      {
646                                        "type": "ETSTypeReference",
647                                        "part": {
648                                          "type": "ETSTypeReferencePart",
649                                          "name": {
650                                            "type": "Identifier",
651                                            "name": "number",
652                                            "decorators": [],
653                                            "loc": {
654                                              "start": {
655                                                "line": 19,
656                                                "column": 28
657                                              },
658                                              "end": {
659                                                "line": 19,
660                                                "column": 34
661                                              }
662                                            }
663                                          },
664                                          "loc": {
665                                            "start": {
666                                              "line": 19,
667                                              "column": 28
668                                            },
669                                            "end": {
670                                              "line": 19,
671                                              "column": 35
672                                            }
673                                          }
674                                        },
675                                        "loc": {
676                                          "start": {
677                                            "line": 19,
678                                            "column": 28
679                                          },
680                                          "end": {
681                                            "line": 19,
682                                            "column": 35
683                                          }
684                                        }
685                                      }
686                                    ],
687                                    "loc": {
688                                      "start": {
689                                        "line": 19,
690                                        "column": 27
691                                      },
692                                      "end": {
693                                        "line": 19,
694                                        "column": 35
695                                      }
696                                    }
697                                  },
698                                  "loc": {
699                                    "start": {
700                                      "line": 19,
701                                      "column": 24
702                                    },
703                                    "end": {
704                                      "line": 19,
705                                      "column": 38
706                                    }
707                                  }
708                                },
709                                "loc": {
710                                  "start": {
711                                    "line": 19,
712                                    "column": 24
713                                  },
714                                  "end": {
715                                    "line": 19,
716                                    "column": 38
717                                  }
718                                }
719                              },
720                              "body": {
721                                "type": "BlockStatement",
722                                "statements": [
723                                  {
724                                    "type": "ThrowStatement",
725                                    "argument": {
726                                      "type": "ETSNewClassInstanceExpression",
727                                      "typeReference": {
728                                        "type": "ETSTypeReference",
729                                        "part": {
730                                          "type": "ETSTypeReferencePart",
731                                          "name": {
732                                            "type": "Identifier",
733                                            "name": "Error",
734                                            "decorators": [],
735                                            "loc": {
736                                              "start": {
737                                                "line": 19,
738                                                "column": 51
739                                              },
740                                              "end": {
741                                                "line": 19,
742                                                "column": 56
743                                              }
744                                            }
745                                          },
746                                          "loc": {
747                                            "start": {
748                                              "line": 19,
749                                              "column": 51
750                                            },
751                                            "end": {
752                                              "line": 19,
753                                              "column": 57
754                                            }
755                                          }
756                                        },
757                                        "loc": {
758                                          "start": {
759                                            "line": 19,
760                                            "column": 51
761                                          },
762                                          "end": {
763                                            "line": 19,
764                                            "column": 57
765                                          }
766                                        }
767                                      },
768                                      "arguments": [],
769                                      "loc": {
770                                        "start": {
771                                          "line": 19,
772                                          "column": 47
773                                        },
774                                        "end": {
775                                          "line": 19,
776                                          "column": 60
777                                        }
778                                      }
779                                    },
780                                    "loc": {
781                                      "start": {
782                                        "line": 19,
783                                        "column": 41
784                                      },
785                                      "end": {
786                                        "line": 19,
787                                        "column": 60
788                                      }
789                                    }
790                                  }
791                                ],
792                                "loc": {
793                                  "start": {
794                                    "line": 19,
795                                    "column": 39
796                                  },
797                                  "end": {
798                                    "line": 19,
799                                    "column": 60
800                                  }
801                                }
802                              },
803                              "loc": {
804                                "start": {
805                                  "line": 19,
806                                  "column": 20
807                                },
808                                "end": {
809                                  "line": 19,
810                                  "column": 60
811                                }
812                              }
813                            },
814                            "loc": {
815                              "start": {
816                                "line": 19,
817                                "column": 20
818                              },
819                              "end": {
820                                "line": 19,
821                                "column": 60
822                              }
823                            }
824                          }
825                        ],
826                        "optional": false,
827                        "typeParameters": {
828                          "type": "TSTypeParameterInstantiation",
829                          "params": [
830                            {
831                              "type": "ETSTypeReference",
832                              "part": {
833                                "type": "ETSTypeReferencePart",
834                                "name": {
835                                  "type": "Identifier",
836                                  "name": "Tup",
837                                  "decorators": [],
838                                  "loc": {
839                                    "start": {
840                                      "line": 19,
841                                      "column": 7
842                                    },
843                                    "end": {
844                                      "line": 19,
845                                      "column": 10
846                                    }
847                                  }
848                                },
849                                "typeParams": {
850                                  "type": "TSTypeParameterInstantiation",
851                                  "params": [
852                                    {
853                                      "type": "ETSTypeReference",
854                                      "part": {
855                                        "type": "ETSTypeReferencePart",
856                                        "name": {
857                                          "type": "Identifier",
858                                          "name": "number",
859                                          "decorators": [],
860                                          "loc": {
861                                            "start": {
862                                              "line": 19,
863                                              "column": 11
864                                            },
865                                            "end": {
866                                              "line": 19,
867                                              "column": 17
868                                            }
869                                          }
870                                        },
871                                        "loc": {
872                                          "start": {
873                                            "line": 19,
874                                            "column": 11
875                                          },
876                                          "end": {
877                                            "line": 19,
878                                            "column": 19
879                                          }
880                                        }
881                                      },
882                                      "loc": {
883                                        "start": {
884                                          "line": 19,
885                                          "column": 11
886                                        },
887                                        "end": {
888                                          "line": 19,
889                                          "column": 19
890                                        }
891                                      }
892                                    }
893                                  ],
894                                  "loc": {
895                                    "start": {
896                                      "line": 19,
897                                      "column": 10
898                                    },
899                                    "end": {
900                                      "line": 19,
901                                      "column": 19
902                                    }
903                                  }
904                                },
905                                "loc": {
906                                  "start": {
907                                    "line": 19,
908                                    "column": 7
909                                  },
910                                  "end": {
911                                    "line": 19,
912                                    "column": 19
913                                  }
914                                }
915                              },
916                              "loc": {
917                                "start": {
918                                  "line": 19,
919                                  "column": 7
920                                },
921                                "end": {
922                                  "line": 19,
923                                  "column": 19
924                                }
925                              }
926                            }
927                          ],
928                          "loc": {
929                            "start": {
930                              "line": 19,
931                              "column": 6
932                            },
933                            "end": {
934                              "line": 19,
935                              "column": 19
936                            }
937                          }
938                        },
939                        "loc": {
940                          "start": {
941                            "line": 19,
942                            "column": 3
943                          },
944                          "end": {
945                            "line": 19,
946                            "column": 61
947                          }
948                        }
949                      },
950                      "loc": {
951                        "start": {
952                          "line": 19,
953                          "column": 3
954                        },
955                        "end": {
956                          "line": 19,
957                          "column": 62
958                        }
959                      }
960                    }
961                  ],
962                  "loc": {
963                    "start": {
964                      "line": 18,
965                      "column": 23
966                    },
967                    "end": {
968                      "line": 20,
969                      "column": 2
970                    }
971                  }
972                },
973                "loc": {
974                  "start": {
975                    "line": 18,
976                    "column": 14
977                  },
978                  "end": {
979                    "line": 20,
980                    "column": 2
981                  }
982                }
983              },
984              "loc": {
985                "start": {
986                  "line": 18,
987                  "column": 14
988                },
989                "end": {
990                  "line": 20,
991                  "column": 2
992                }
993              }
994            },
995            "overloads": [],
996            "decorators": [],
997            "loc": {
998              "start": {
999                "line": 18,
1000                "column": 1
1001              },
1002              "end": {
1003                "line": 20,
1004                "column": 2
1005              }
1006            }
1007          }
1008        ],
1009        "loc": {
1010          "start": {
1011            "line": 1,
1012            "column": 1
1013          },
1014          "end": {
1015            "line": 1,
1016            "column": 1
1017          }
1018        }
1019      },
1020      "loc": {
1021        "start": {
1022          "line": 1,
1023          "column": 1
1024        },
1025        "end": {
1026          "line": 1,
1027          "column": 1
1028        }
1029      }
1030    }
1031  ],
1032  "loc": {
1033    "start": {
1034      "line": 1,
1035      "column": 1
1036    },
1037    "end": {
1038      "line": 22,
1039      "column": 1
1040    }
1041  }
1042}
1043