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