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