1{
2  "type": "Program",
3  "statements": [
4    {
5      "type": "TSInterfaceDeclaration",
6      "body": {
7        "type": "TSInterfaceBody",
8        "body": [
9          {
10            "type": "MethodDefinition",
11            "key": {
12              "type": "Identifier",
13              "name": "foo1",
14              "decorators": [],
15              "loc": {
16                "start": {
17                  "line": 17,
18                  "column": 5
19                },
20                "end": {
21                  "line": 17,
22                  "column": 9
23                }
24              }
25            },
26            "kind": "method",
27            "accessibility": "public",
28            "static": false,
29            "optional": false,
30            "computed": false,
31            "value": {
32              "type": "FunctionExpression",
33              "function": {
34                "type": "ScriptFunction",
35                "id": {
36                  "type": "Identifier",
37                  "name": "foo1",
38                  "decorators": [],
39                  "loc": {
40                    "start": {
41                      "line": 17,
42                      "column": 5
43                    },
44                    "end": {
45                      "line": 17,
46                      "column": 9
47                    }
48                  }
49                },
50                "generator": false,
51                "async": false,
52                "expression": false,
53                "params": [],
54                "returnType": {
55                  "type": "ETSPrimitiveType",
56                  "loc": {
57                    "start": {
58                      "line": 17,
59                      "column": 13
60                    },
61                    "end": {
62                      "line": 17,
63                      "column": 17
64                    }
65                  }
66                },
67                "declare": true
68                "throwMarker": "throws",
69                "loc": {
70                  "start": {
71                    "line": 17,
72                    "column": 9
73                  },
74                  "end": {
75                    "line": 17,
76                    "column": 17
77                  }
78                }
79              },
80              "loc": {
81                "start": {
82                  "line": 17,
83                  "column": 9
84                },
85                "end": {
86                  "line": 17,
87                  "column": 17
88                }
89              }
90            },
91            "overloads": [],
92            "decorators": [],
93            "loc": {
94              "start": {
95                "line": 17,
96                "column": 5
97              },
98              "end": {
99                "line": 17,
100                "column": 25
101              }
102            }
103          },
104          {
105            "type": "MethodDefinition",
106            "key": {
107              "type": "Identifier",
108              "name": "foo2",
109              "decorators": [],
110              "loc": {
111                "start": {
112                  "line": 18,
113                  "column": 5
114                },
115                "end": {
116                  "line": 18,
117                  "column": 9
118                }
119              }
120            },
121            "kind": "method",
122            "accessibility": "public",
123            "static": false,
124            "optional": false,
125            "computed": false,
126            "value": {
127              "type": "FunctionExpression",
128              "function": {
129                "type": "ScriptFunction",
130                "id": {
131                  "type": "Identifier",
132                  "name": "foo2",
133                  "decorators": [],
134                  "loc": {
135                    "start": {
136                      "line": 18,
137                      "column": 5
138                    },
139                    "end": {
140                      "line": 18,
141                      "column": 9
142                    }
143                  }
144                },
145                "generator": false,
146                "async": false,
147                "expression": false,
148                "params": [
149                  {
150                    "type": "ETSParameterExpression",
151                    "name": {
152                      "type": "Identifier",
153                      "name": "param",
154                      "typeAnnotation": {
155                        "type": "ETSFunctionType",
156                        "params": [],
157                        "returnType": {
158                          "type": "ETSPrimitiveType",
159                          "loc": {
160                            "start": {
161                              "line": 18,
162                              "column": 23
163                            },
164                            "end": {
165                              "line": 18,
166                              "column": 27
167                            }
168                          }
169                        }
170                        "throwMarker": "throws",
171                        "loc": {
172                          "start": {
173                            "line": 18,
174                            "column": 17
175                          },
176                          "end": {
177                            "line": 18,
178                            "column": 27
179                          }
180                        }
181                      },
182                      "decorators": [],
183                      "loc": {
184                        "start": {
185                          "line": 18,
186                          "column": 10
187                        },
188                        "end": {
189                          "line": 18,
190                          "column": 27
191                        }
192                      }
193                    },
194                    "loc": {
195                      "start": {
196                        "line": 18,
197                        "column": 10
198                      },
199                      "end": {
200                        "line": 18,
201                        "column": 27
202                      }
203                    }
204                  }
205                ],
206                "returnType": {
207                  "type": "ETSPrimitiveType",
208                  "loc": {
209                    "start": {
210                      "line": 18,
211                      "column": 37
212                    },
213                    "end": {
214                      "line": 18,
215                      "column": 41
216                    }
217                  }
218                },
219                "declare": true
220                "throwMarker": "rethrows",
221                "loc": {
222                  "start": {
223                    "line": 18,
224                    "column": 9
225                  },
226                  "end": {
227                    "line": 18,
228                    "column": 41
229                  }
230                }
231              },
232              "loc": {
233                "start": {
234                  "line": 18,
235                  "column": 9
236                },
237                "end": {
238                  "line": 18,
239                  "column": 41
240                }
241              }
242            },
243            "overloads": [],
244            "decorators": [],
245            "loc": {
246              "start": {
247                "line": 18,
248                "column": 5
249              },
250              "end": {
251                "line": 18,
252                "column": 51
253              }
254            }
255          },
256          {
257            "type": "MethodDefinition",
258            "key": {
259              "type": "Identifier",
260              "name": "foo3",
261              "decorators": [],
262              "loc": {
263                "start": {
264                  "line": 19,
265                  "column": 5
266                },
267                "end": {
268                  "line": 19,
269                  "column": 9
270                }
271              }
272            },
273            "kind": "method",
274            "accessibility": "public",
275            "static": false,
276            "optional": false,
277            "computed": false,
278            "value": {
279              "type": "FunctionExpression",
280              "function": {
281                "type": "ScriptFunction",
282                "id": {
283                  "type": "Identifier",
284                  "name": "foo3",
285                  "decorators": [],
286                  "loc": {
287                    "start": {
288                      "line": 19,
289                      "column": 5
290                    },
291                    "end": {
292                      "line": 19,
293                      "column": 9
294                    }
295                  }
296                },
297                "generator": false,
298                "async": false,
299                "expression": false,
300                "params": [],
301                "returnType": {
302                  "type": "ETSPrimitiveType",
303                  "loc": {
304                    "start": {
305                      "line": 19,
306                      "column": 13
307                    },
308                    "end": {
309                      "line": 19,
310                      "column": 17
311                    }
312                  }
313                },
314                "declare": true,
315                "loc": {
316                  "start": {
317                    "line": 19,
318                    "column": 9
319                  },
320                  "end": {
321                    "line": 19,
322                    "column": 17
323                  }
324                }
325              },
326              "loc": {
327                "start": {
328                  "line": 19,
329                  "column": 9
330                },
331                "end": {
332                  "line": 19,
333                  "column": 17
334                }
335              }
336            },
337            "overloads": [],
338            "decorators": [],
339            "loc": {
340              "start": {
341                "line": 19,
342                "column": 5
343              },
344              "end": {
345                "line": 19,
346                "column": 18
347              }
348            }
349          }
350        ],
351        "loc": {
352          "start": {
353            "line": 16,
354            "column": 13
355          },
356          "end": {
357            "line": 20,
358            "column": 2
359          }
360        }
361      },
362      "id": {
363        "type": "Identifier",
364        "name": "A",
365        "decorators": [],
366        "loc": {
367          "start": {
368            "line": 16,
369            "column": 11
370          },
371          "end": {
372            "line": 16,
373            "column": 12
374          }
375        }
376      },
377      "extends": [],
378      "loc": {
379        "start": {
380          "line": 16,
381          "column": 1
382        },
383        "end": {
384          "line": 22,
385          "column": 6
386        }
387      }
388    },
389    {
390      "type": "ClassDeclaration",
391      "definition": {
392        "id": {
393          "type": "Identifier",
394          "name": "AClass",
395          "decorators": [],
396          "loc": {
397            "start": {
398              "line": 22,
399              "column": 7
400            },
401            "end": {
402              "line": 22,
403              "column": 13
404            }
405          }
406        },
407        "superClass": null,
408        "implements": [
409          {
410            "type": "TSClassImplements",
411            "expression": {
412              "type": "ETSTypeReference",
413              "part": {
414                "type": "ETSTypeReferencePart",
415                "name": {
416                  "type": "Identifier",
417                  "name": "A",
418                  "decorators": [],
419                  "loc": {
420                    "start": {
421                      "line": 22,
422                      "column": 25
423                    },
424                    "end": {
425                      "line": 22,
426                      "column": 26
427                    }
428                  }
429                },
430                "loc": {
431                  "start": {
432                    "line": 22,
433                    "column": 25
434                  },
435                  "end": {
436                    "line": 22,
437                    "column": 28
438                  }
439                }
440              },
441              "loc": {
442                "start": {
443                  "line": 22,
444                  "column": 25
445                },
446                "end": {
447                  "line": 22,
448                  "column": 28
449                }
450              }
451            },
452            "loc": {
453              "start": {
454                "line": 22,
455                "column": 25
456              },
457              "end": {
458                "line": 22,
459                "column": 28
460              }
461            }
462          }
463        ],
464        "body": [
465          {
466            "type": "MethodDefinition",
467            "key": {
468              "type": "Identifier",
469              "name": "foo1",
470              "decorators": [],
471              "loc": {
472                "start": {
473                  "line": 23,
474                  "column": 14
475                },
476                "end": {
477                  "line": 23,
478                  "column": 18
479                }
480              }
481            },
482            "kind": "method",
483            "accessibility": "public",
484            "static": false,
485            "optional": false,
486            "computed": false,
487            "value": {
488              "type": "FunctionExpression",
489              "function": {
490                "type": "ScriptFunction",
491                "id": {
492                  "type": "Identifier",
493                  "name": "foo1",
494                  "decorators": [],
495                  "loc": {
496                    "start": {
497                      "line": 23,
498                      "column": 14
499                    },
500                    "end": {
501                      "line": 23,
502                      "column": 18
503                    }
504                  }
505                },
506                "generator": false,
507                "async": false,
508                "expression": false,
509                "params": [],
510                "returnType": {
511                  "type": "ETSPrimitiveType",
512                  "loc": {
513                    "start": {
514                      "line": 23,
515                      "column": 22
516                    },
517                    "end": {
518                      "line": 23,
519                      "column": 26
520                    }
521                  }
522                },
523                "body": {
524                  "type": "BlockStatement",
525                  "statements": [],
526                  "loc": {
527                    "start": {
528                      "line": 23,
529                      "column": 34
530                    },
531                    "end": {
532                      "line": 23,
533                      "column": 36
534                    }
535                  }
536                }
537                "throwMarker": "throws",
538                "loc": {
539                  "start": {
540                    "line": 23,
541                    "column": 18
542                  },
543                  "end": {
544                    "line": 23,
545                    "column": 36
546                  }
547                }
548              },
549              "loc": {
550                "start": {
551                  "line": 23,
552                  "column": 18
553                },
554                "end": {
555                  "line": 23,
556                  "column": 36
557                }
558              }
559            },
560            "overloads": [],
561            "decorators": [],
562            "loc": {
563              "start": {
564                "line": 23,
565                "column": 5
566              },
567              "end": {
568                "line": 23,
569                "column": 36
570              }
571            }
572          },
573          {
574            "type": "MethodDefinition",
575            "key": {
576              "type": "Identifier",
577              "name": "foo2",
578              "decorators": [],
579              "loc": {
580                "start": {
581                  "line": 24,
582                  "column": 14
583                },
584                "end": {
585                  "line": 24,
586                  "column": 18
587                }
588              }
589            },
590            "kind": "method",
591            "accessibility": "public",
592            "static": false,
593            "optional": false,
594            "computed": false,
595            "value": {
596              "type": "FunctionExpression",
597              "function": {
598                "type": "ScriptFunction",
599                "id": {
600                  "type": "Identifier",
601                  "name": "foo2",
602                  "decorators": [],
603                  "loc": {
604                    "start": {
605                      "line": 24,
606                      "column": 14
607                    },
608                    "end": {
609                      "line": 24,
610                      "column": 18
611                    }
612                  }
613                },
614                "generator": false,
615                "async": false,
616                "expression": false,
617                "params": [
618                  {
619                    "type": "ETSParameterExpression",
620                    "name": {
621                      "type": "Identifier",
622                      "name": "param",
623                      "typeAnnotation": {
624                        "type": "ETSFunctionType",
625                        "params": [],
626                        "returnType": {
627                          "type": "ETSPrimitiveType",
628                          "loc": {
629                            "start": {
630                              "line": 24,
631                              "column": 32
632                            },
633                            "end": {
634                              "line": 24,
635                              "column": 36
636                            }
637                          }
638                        }
639                        "throwMarker": "throws",
640                        "loc": {
641                          "start": {
642                            "line": 24,
643                            "column": 26
644                          },
645                          "end": {
646                            "line": 24,
647                            "column": 36
648                          }
649                        }
650                      },
651                      "decorators": [],
652                      "loc": {
653                        "start": {
654                          "line": 24,
655                          "column": 19
656                        },
657                        "end": {
658                          "line": 24,
659                          "column": 36
660                        }
661                      }
662                    },
663                    "loc": {
664                      "start": {
665                        "line": 24,
666                        "column": 19
667                      },
668                      "end": {
669                        "line": 24,
670                        "column": 36
671                      }
672                    }
673                  }
674                ],
675                "returnType": {
676                  "type": "ETSPrimitiveType",
677                  "loc": {
678                    "start": {
679                      "line": 24,
680                      "column": 46
681                    },
682                    "end": {
683                      "line": 24,
684                      "column": 50
685                    }
686                  }
687                },
688                "body": {
689                  "type": "BlockStatement",
690                  "statements": [],
691                  "loc": {
692                    "start": {
693                      "line": 24,
694                      "column": 60
695                    },
696                    "end": {
697                      "line": 24,
698                      "column": 62
699                    }
700                  }
701                }
702                "throwMarker": "rethrows",
703                "loc": {
704                  "start": {
705                    "line": 24,
706                    "column": 18
707                  },
708                  "end": {
709                    "line": 24,
710                    "column": 62
711                  }
712                }
713              },
714              "loc": {
715                "start": {
716                  "line": 24,
717                  "column": 18
718                },
719                "end": {
720                  "line": 24,
721                  "column": 62
722                }
723              }
724            },
725            "overloads": [],
726            "decorators": [],
727            "loc": {
728              "start": {
729                "line": 24,
730                "column": 5
731              },
732              "end": {
733                "line": 24,
734                "column": 62
735              }
736            }
737          },
738          {
739            "type": "MethodDefinition",
740            "key": {
741              "type": "Identifier",
742              "name": "foo3",
743              "decorators": [],
744              "loc": {
745                "start": {
746                  "line": 25,
747                  "column": 14
748                },
749                "end": {
750                  "line": 25,
751                  "column": 18
752                }
753              }
754            },
755            "kind": "method",
756            "accessibility": "public",
757            "static": false,
758            "optional": false,
759            "computed": false,
760            "value": {
761              "type": "FunctionExpression",
762              "function": {
763                "type": "ScriptFunction",
764                "id": {
765                  "type": "Identifier",
766                  "name": "foo3",
767                  "decorators": [],
768                  "loc": {
769                    "start": {
770                      "line": 25,
771                      "column": 14
772                    },
773                    "end": {
774                      "line": 25,
775                      "column": 18
776                    }
777                  }
778                },
779                "generator": false,
780                "async": false,
781                "expression": false,
782                "params": [],
783                "returnType": {
784                  "type": "ETSPrimitiveType",
785                  "loc": {
786                    "start": {
787                      "line": 25,
788                      "column": 22
789                    },
790                    "end": {
791                      "line": 25,
792                      "column": 26
793                    }
794                  }
795                },
796                "body": {
797                  "type": "BlockStatement",
798                  "statements": [],
799                  "loc": {
800                    "start": {
801                      "line": 25,
802                      "column": 27
803                    },
804                    "end": {
805                      "line": 25,
806                      "column": 29
807                    }
808                  }
809                },
810                "loc": {
811                  "start": {
812                    "line": 25,
813                    "column": 18
814                  },
815                  "end": {
816                    "line": 25,
817                    "column": 29
818                  }
819                }
820              },
821              "loc": {
822                "start": {
823                  "line": 25,
824                  "column": 18
825                },
826                "end": {
827                  "line": 25,
828                  "column": 29
829                }
830              }
831            },
832            "overloads": [],
833            "decorators": [],
834            "loc": {
835              "start": {
836                "line": 25,
837                "column": 5
838              },
839              "end": {
840                "line": 25,
841                "column": 29
842              }
843            }
844          },
845          {
846            "type": "MethodDefinition",
847            "key": {
848              "type": "Identifier",
849              "name": "constructor",
850              "decorators": [],
851              "loc": {
852                "start": {
853                  "line": 1,
854                  "column": 1
855                },
856                "end": {
857                  "line": 1,
858                  "column": 1
859                }
860              }
861            },
862            "kind": "constructor",
863            "static": false,
864            "optional": false,
865            "computed": false,
866            "value": {
867              "type": "FunctionExpression",
868              "function": {
869                "type": "ScriptFunction",
870                "id": {
871                  "type": "Identifier",
872                  "name": "constructor",
873                  "decorators": [],
874                  "loc": {
875                    "start": {
876                      "line": 1,
877                      "column": 1
878                    },
879                    "end": {
880                      "line": 1,
881                      "column": 1
882                    }
883                  }
884                },
885                "generator": false,
886                "async": false,
887                "expression": false,
888                "params": [],
889                "body": {
890                  "type": "BlockStatement",
891                  "statements": [],
892                  "loc": {
893                    "start": {
894                      "line": 1,
895                      "column": 1
896                    },
897                    "end": {
898                      "line": 1,
899                      "column": 1
900                    }
901                  }
902                },
903                "loc": {
904                  "start": {
905                    "line": 1,
906                    "column": 1
907                  },
908                  "end": {
909                    "line": 1,
910                    "column": 1
911                  }
912                }
913              },
914              "loc": {
915                "start": {
916                  "line": 1,
917                  "column": 1
918                },
919                "end": {
920                  "line": 1,
921                  "column": 1
922                }
923              }
924            },
925            "overloads": [],
926            "decorators": [],
927            "loc": {
928              "start": {
929                "line": 26,
930                "column": 2
931              },
932              "end": {
933                "line": 26,
934                "column": 2
935              }
936            }
937          }
938        ],
939        "loc": {
940          "start": {
941            "line": 22,
942            "column": 27
943          },
944          "end": {
945            "line": 26,
946            "column": 2
947          }
948        }
949      },
950      "loc": {
951        "start": {
952          "line": 22,
953          "column": 1
954        },
955        "end": {
956          "line": 26,
957          "column": 2
958        }
959      }
960    },
961    {
962      "type": "ClassDeclaration",
963      "definition": {
964        "id": {
965          "type": "Identifier",
966          "name": "BClass",
967          "decorators": [],
968          "loc": {
969            "start": {
970              "line": 28,
971              "column": 7
972            },
973            "end": {
974              "line": 28,
975              "column": 13
976            }
977          }
978        },
979        "superClass": null,
980        "implements": [],
981        "body": [
982          {
983            "type": "MethodDefinition",
984            "key": {
985              "type": "Identifier",
986              "name": "foo1",
987              "decorators": [],
988              "loc": {
989                "start": {
990                  "line": 29,
991                  "column": 5
992                },
993                "end": {
994                  "line": 29,
995                  "column": 9
996                }
997              }
998            },
999            "kind": "method",
1000            "accessibility": "public",
1001            "static": false,
1002            "optional": false,
1003            "computed": false,
1004            "value": {
1005              "type": "FunctionExpression",
1006              "function": {
1007                "type": "ScriptFunction",
1008                "id": {
1009                  "type": "Identifier",
1010                  "name": "foo1",
1011                  "decorators": [],
1012                  "loc": {
1013                    "start": {
1014                      "line": 29,
1015                      "column": 5
1016                    },
1017                    "end": {
1018                      "line": 29,
1019                      "column": 9
1020                    }
1021                  }
1022                },
1023                "generator": false,
1024                "async": false,
1025                "expression": false,
1026                "params": [],
1027                "returnType": {
1028                  "type": "ETSPrimitiveType",
1029                  "loc": {
1030                    "start": {
1031                      "line": 29,
1032                      "column": 13
1033                    },
1034                    "end": {
1035                      "line": 29,
1036                      "column": 17
1037                    }
1038                  }
1039                },
1040                "body": {
1041                  "type": "BlockStatement",
1042                  "statements": [],
1043                  "loc": {
1044                    "start": {
1045                      "line": 29,
1046                      "column": 25
1047                    },
1048                    "end": {
1049                      "line": 29,
1050                      "column": 27
1051                    }
1052                  }
1053                }
1054                "throwMarker": "throws",
1055                "loc": {
1056                  "start": {
1057                    "line": 29,
1058                    "column": 9
1059                  },
1060                  "end": {
1061                    "line": 29,
1062                    "column": 27
1063                  }
1064                }
1065              },
1066              "loc": {
1067                "start": {
1068                  "line": 29,
1069                  "column": 9
1070                },
1071                "end": {
1072                  "line": 29,
1073                  "column": 27
1074                }
1075              }
1076            },
1077            "overloads": [],
1078            "decorators": [],
1079            "loc": {
1080              "start": {
1081                "line": 29,
1082                "column": 5
1083              },
1084              "end": {
1085                "line": 29,
1086                "column": 27
1087              }
1088            }
1089          },
1090          {
1091            "type": "MethodDefinition",
1092            "key": {
1093              "type": "Identifier",
1094              "name": "foo2",
1095              "decorators": [],
1096              "loc": {
1097                "start": {
1098                  "line": 30,
1099                  "column": 5
1100                },
1101                "end": {
1102                  "line": 30,
1103                  "column": 9
1104                }
1105              }
1106            },
1107            "kind": "method",
1108            "accessibility": "public",
1109            "static": false,
1110            "optional": false,
1111            "computed": false,
1112            "value": {
1113              "type": "FunctionExpression",
1114              "function": {
1115                "type": "ScriptFunction",
1116                "id": {
1117                  "type": "Identifier",
1118                  "name": "foo2",
1119                  "decorators": [],
1120                  "loc": {
1121                    "start": {
1122                      "line": 30,
1123                      "column": 5
1124                    },
1125                    "end": {
1126                      "line": 30,
1127                      "column": 9
1128                    }
1129                  }
1130                },
1131                "generator": false,
1132                "async": false,
1133                "expression": false,
1134                "params": [
1135                  {
1136                    "type": "ETSParameterExpression",
1137                    "name": {
1138                      "type": "Identifier",
1139                      "name": "param",
1140                      "typeAnnotation": {
1141                        "type": "ETSFunctionType",
1142                        "params": [],
1143                        "returnType": {
1144                          "type": "ETSPrimitiveType",
1145                          "loc": {
1146                            "start": {
1147                              "line": 30,
1148                              "column": 23
1149                            },
1150                            "end": {
1151                              "line": 30,
1152                              "column": 27
1153                            }
1154                          }
1155                        }
1156                        "throwMarker": "throws",
1157                        "loc": {
1158                          "start": {
1159                            "line": 30,
1160                            "column": 17
1161                          },
1162                          "end": {
1163                            "line": 30,
1164                            "column": 27
1165                          }
1166                        }
1167                      },
1168                      "decorators": [],
1169                      "loc": {
1170                        "start": {
1171                          "line": 30,
1172                          "column": 10
1173                        },
1174                        "end": {
1175                          "line": 30,
1176                          "column": 27
1177                        }
1178                      }
1179                    },
1180                    "loc": {
1181                      "start": {
1182                        "line": 30,
1183                        "column": 10
1184                      },
1185                      "end": {
1186                        "line": 30,
1187                        "column": 27
1188                      }
1189                    }
1190                  }
1191                ],
1192                "returnType": {
1193                  "type": "ETSPrimitiveType",
1194                  "loc": {
1195                    "start": {
1196                      "line": 30,
1197                      "column": 37
1198                    },
1199                    "end": {
1200                      "line": 30,
1201                      "column": 41
1202                    }
1203                  }
1204                },
1205                "body": {
1206                  "type": "BlockStatement",
1207                  "statements": [],
1208                  "loc": {
1209                    "start": {
1210                      "line": 30,
1211                      "column": 51
1212                    },
1213                    "end": {
1214                      "line": 30,
1215                      "column": 53
1216                    }
1217                  }
1218                }
1219                "throwMarker": "rethrows",
1220                "loc": {
1221                  "start": {
1222                    "line": 30,
1223                    "column": 9
1224                  },
1225                  "end": {
1226                    "line": 30,
1227                    "column": 53
1228                  }
1229                }
1230              },
1231              "loc": {
1232                "start": {
1233                  "line": 30,
1234                  "column": 9
1235                },
1236                "end": {
1237                  "line": 30,
1238                  "column": 53
1239                }
1240              }
1241            },
1242            "overloads": [],
1243            "decorators": [],
1244            "loc": {
1245              "start": {
1246                "line": 30,
1247                "column": 5
1248              },
1249              "end": {
1250                "line": 30,
1251                "column": 53
1252              }
1253            }
1254          },
1255          {
1256            "type": "MethodDefinition",
1257            "key": {
1258              "type": "Identifier",
1259              "name": "foo3",
1260              "decorators": [],
1261              "loc": {
1262                "start": {
1263                  "line": 31,
1264                  "column": 5
1265                },
1266                "end": {
1267                  "line": 31,
1268                  "column": 9
1269                }
1270              }
1271            },
1272            "kind": "method",
1273            "accessibility": "public",
1274            "static": false,
1275            "optional": false,
1276            "computed": false,
1277            "value": {
1278              "type": "FunctionExpression",
1279              "function": {
1280                "type": "ScriptFunction",
1281                "id": {
1282                  "type": "Identifier",
1283                  "name": "foo3",
1284                  "decorators": [],
1285                  "loc": {
1286                    "start": {
1287                      "line": 31,
1288                      "column": 5
1289                    },
1290                    "end": {
1291                      "line": 31,
1292                      "column": 9
1293                    }
1294                  }
1295                },
1296                "generator": false,
1297                "async": false,
1298                "expression": false,
1299                "params": [],
1300                "returnType": {
1301                  "type": "ETSPrimitiveType",
1302                  "loc": {
1303                    "start": {
1304                      "line": 31,
1305                      "column": 13
1306                    },
1307                    "end": {
1308                      "line": 31,
1309                      "column": 17
1310                    }
1311                  }
1312                },
1313                "body": {
1314                  "type": "BlockStatement",
1315                  "statements": [],
1316                  "loc": {
1317                    "start": {
1318                      "line": 31,
1319                      "column": 18
1320                    },
1321                    "end": {
1322                      "line": 31,
1323                      "column": 20
1324                    }
1325                  }
1326                },
1327                "loc": {
1328                  "start": {
1329                    "line": 31,
1330                    "column": 9
1331                  },
1332                  "end": {
1333                    "line": 31,
1334                    "column": 20
1335                  }
1336                }
1337              },
1338              "loc": {
1339                "start": {
1340                  "line": 31,
1341                  "column": 9
1342                },
1343                "end": {
1344                  "line": 31,
1345                  "column": 20
1346                }
1347              }
1348            },
1349            "overloads": [],
1350            "decorators": [],
1351            "loc": {
1352              "start": {
1353                "line": 31,
1354                "column": 5
1355              },
1356              "end": {
1357                "line": 31,
1358                "column": 20
1359              }
1360            }
1361          },
1362          {
1363            "type": "MethodDefinition",
1364            "key": {
1365              "type": "Identifier",
1366              "name": "constructor",
1367              "decorators": [],
1368              "loc": {
1369                "start": {
1370                  "line": 1,
1371                  "column": 1
1372                },
1373                "end": {
1374                  "line": 1,
1375                  "column": 1
1376                }
1377              }
1378            },
1379            "kind": "constructor",
1380            "static": false,
1381            "optional": false,
1382            "computed": false,
1383            "value": {
1384              "type": "FunctionExpression",
1385              "function": {
1386                "type": "ScriptFunction",
1387                "id": {
1388                  "type": "Identifier",
1389                  "name": "constructor",
1390                  "decorators": [],
1391                  "loc": {
1392                    "start": {
1393                      "line": 1,
1394                      "column": 1
1395                    },
1396                    "end": {
1397                      "line": 1,
1398                      "column": 1
1399                    }
1400                  }
1401                },
1402                "generator": false,
1403                "async": false,
1404                "expression": false,
1405                "params": [],
1406                "body": {
1407                  "type": "BlockStatement",
1408                  "statements": [],
1409                  "loc": {
1410                    "start": {
1411                      "line": 1,
1412                      "column": 1
1413                    },
1414                    "end": {
1415                      "line": 1,
1416                      "column": 1
1417                    }
1418                  }
1419                },
1420                "loc": {
1421                  "start": {
1422                    "line": 1,
1423                    "column": 1
1424                  },
1425                  "end": {
1426                    "line": 1,
1427                    "column": 1
1428                  }
1429                }
1430              },
1431              "loc": {
1432                "start": {
1433                  "line": 1,
1434                  "column": 1
1435                },
1436                "end": {
1437                  "line": 1,
1438                  "column": 1
1439                }
1440              }
1441            },
1442            "overloads": [],
1443            "decorators": [],
1444            "loc": {
1445              "start": {
1446                "line": 32,
1447                "column": 2
1448              },
1449              "end": {
1450                "line": 32,
1451                "column": 2
1452              }
1453            }
1454          }
1455        ],
1456        "loc": {
1457          "start": {
1458            "line": 28,
1459            "column": 14
1460          },
1461          "end": {
1462            "line": 32,
1463            "column": 2
1464          }
1465        }
1466      },
1467      "loc": {
1468        "start": {
1469          "line": 28,
1470          "column": 1
1471        },
1472        "end": {
1473          "line": 32,
1474          "column": 2
1475        }
1476      }
1477    },
1478    {
1479      "type": "ClassDeclaration",
1480      "definition": {
1481        "id": {
1482          "type": "Identifier",
1483          "name": "CClass",
1484          "decorators": [],
1485          "loc": {
1486            "start": {
1487              "line": 34,
1488              "column": 13
1489            },
1490            "end": {
1491              "line": 34,
1492              "column": 19
1493            }
1494          }
1495        },
1496        "superClass": {
1497          "type": "ETSTypeReference",
1498          "part": {
1499            "type": "ETSTypeReferencePart",
1500            "name": {
1501              "type": "Identifier",
1502              "name": "BClass",
1503              "decorators": [],
1504              "loc": {
1505                "start": {
1506                  "line": 34,
1507                  "column": 28
1508                },
1509                "end": {
1510                  "line": 34,
1511                  "column": 34
1512                }
1513              }
1514            },
1515            "loc": {
1516              "start": {
1517                "line": 34,
1518                "column": 28
1519              },
1520              "end": {
1521                "line": 34,
1522                "column": 36
1523              }
1524            }
1525          },
1526          "loc": {
1527            "start": {
1528              "line": 34,
1529              "column": 28
1530            },
1531            "end": {
1532              "line": 34,
1533              "column": 36
1534            }
1535          }
1536        },
1537        "implements": [],
1538        "body": [
1539          {
1540            "type": "MethodDefinition",
1541            "key": {
1542              "type": "Identifier",
1543              "name": "foo1",
1544              "decorators": [],
1545              "loc": {
1546                "start": {
1547                  "line": 35,
1548                  "column": 14
1549                },
1550                "end": {
1551                  "line": 35,
1552                  "column": 18
1553                }
1554              }
1555            },
1556            "kind": "method",
1557            "accessibility": "public",
1558            "static": false,
1559            "optional": false,
1560            "computed": false,
1561            "value": {
1562              "type": "FunctionExpression",
1563              "function": {
1564                "type": "ScriptFunction",
1565                "id": {
1566                  "type": "Identifier",
1567                  "name": "foo1",
1568                  "decorators": [],
1569                  "loc": {
1570                    "start": {
1571                      "line": 35,
1572                      "column": 14
1573                    },
1574                    "end": {
1575                      "line": 35,
1576                      "column": 18
1577                    }
1578                  }
1579                },
1580                "generator": false,
1581                "async": false,
1582                "expression": false,
1583                "params": [],
1584                "returnType": {
1585                  "type": "ETSPrimitiveType",
1586                  "loc": {
1587                    "start": {
1588                      "line": 35,
1589                      "column": 22
1590                    },
1591                    "end": {
1592                      "line": 35,
1593                      "column": 26
1594                    }
1595                  }
1596                },
1597                "body": {
1598                  "type": "BlockStatement",
1599                  "statements": [],
1600                  "loc": {
1601                    "start": {
1602                      "line": 35,
1603                      "column": 34
1604                    },
1605                    "end": {
1606                      "line": 35,
1607                      "column": 36
1608                    }
1609                  }
1610                }
1611                "throwMarker": "throws",
1612                "loc": {
1613                  "start": {
1614                    "line": 35,
1615                    "column": 18
1616                  },
1617                  "end": {
1618                    "line": 35,
1619                    "column": 36
1620                  }
1621                }
1622              },
1623              "loc": {
1624                "start": {
1625                  "line": 35,
1626                  "column": 18
1627                },
1628                "end": {
1629                  "line": 35,
1630                  "column": 36
1631                }
1632              }
1633            },
1634            "overloads": [],
1635            "decorators": [],
1636            "loc": {
1637              "start": {
1638                "line": 35,
1639                "column": 5
1640              },
1641              "end": {
1642                "line": 35,
1643                "column": 36
1644              }
1645            }
1646          },
1647          {
1648            "type": "MethodDefinition",
1649            "key": {
1650              "type": "Identifier",
1651              "name": "foo2",
1652              "decorators": [],
1653              "loc": {
1654                "start": {
1655                  "line": 36,
1656                  "column": 14
1657                },
1658                "end": {
1659                  "line": 36,
1660                  "column": 18
1661                }
1662              }
1663            },
1664            "kind": "method",
1665            "accessibility": "public",
1666            "static": false,
1667            "optional": false,
1668            "computed": false,
1669            "value": {
1670              "type": "FunctionExpression",
1671              "function": {
1672                "type": "ScriptFunction",
1673                "id": {
1674                  "type": "Identifier",
1675                  "name": "foo2",
1676                  "decorators": [],
1677                  "loc": {
1678                    "start": {
1679                      "line": 36,
1680                      "column": 14
1681                    },
1682                    "end": {
1683                      "line": 36,
1684                      "column": 18
1685                    }
1686                  }
1687                },
1688                "generator": false,
1689                "async": false,
1690                "expression": false,
1691                "params": [
1692                  {
1693                    "type": "ETSParameterExpression",
1694                    "name": {
1695                      "type": "Identifier",
1696                      "name": "param",
1697                      "typeAnnotation": {
1698                        "type": "ETSFunctionType",
1699                        "params": [],
1700                        "returnType": {
1701                          "type": "ETSPrimitiveType",
1702                          "loc": {
1703                            "start": {
1704                              "line": 36,
1705                              "column": 32
1706                            },
1707                            "end": {
1708                              "line": 36,
1709                              "column": 36
1710                            }
1711                          }
1712                        }
1713                        "throwMarker": "throws",
1714                        "loc": {
1715                          "start": {
1716                            "line": 36,
1717                            "column": 26
1718                          },
1719                          "end": {
1720                            "line": 36,
1721                            "column": 36
1722                          }
1723                        }
1724                      },
1725                      "decorators": [],
1726                      "loc": {
1727                        "start": {
1728                          "line": 36,
1729                          "column": 19
1730                        },
1731                        "end": {
1732                          "line": 36,
1733                          "column": 36
1734                        }
1735                      }
1736                    },
1737                    "loc": {
1738                      "start": {
1739                        "line": 36,
1740                        "column": 19
1741                      },
1742                      "end": {
1743                        "line": 36,
1744                        "column": 36
1745                      }
1746                    }
1747                  }
1748                ],
1749                "returnType": {
1750                  "type": "ETSPrimitiveType",
1751                  "loc": {
1752                    "start": {
1753                      "line": 36,
1754                      "column": 46
1755                    },
1756                    "end": {
1757                      "line": 36,
1758                      "column": 50
1759                    }
1760                  }
1761                },
1762                "body": {
1763                  "type": "BlockStatement",
1764                  "statements": [],
1765                  "loc": {
1766                    "start": {
1767                      "line": 36,
1768                      "column": 60
1769                    },
1770                    "end": {
1771                      "line": 36,
1772                      "column": 62
1773                    }
1774                  }
1775                }
1776                "throwMarker": "rethrows",
1777                "loc": {
1778                  "start": {
1779                    "line": 36,
1780                    "column": 18
1781                  },
1782                  "end": {
1783                    "line": 36,
1784                    "column": 62
1785                  }
1786                }
1787              },
1788              "loc": {
1789                "start": {
1790                  "line": 36,
1791                  "column": 18
1792                },
1793                "end": {
1794                  "line": 36,
1795                  "column": 62
1796                }
1797              }
1798            },
1799            "overloads": [],
1800            "decorators": [],
1801            "loc": {
1802              "start": {
1803                "line": 36,
1804                "column": 5
1805              },
1806              "end": {
1807                "line": 36,
1808                "column": 62
1809              }
1810            }
1811          },
1812          {
1813            "type": "MethodDefinition",
1814            "key": {
1815              "type": "Identifier",
1816              "name": "foo3",
1817              "decorators": [],
1818              "loc": {
1819                "start": {
1820                  "line": 37,
1821                  "column": 14
1822                },
1823                "end": {
1824                  "line": 37,
1825                  "column": 18
1826                }
1827              }
1828            },
1829            "kind": "method",
1830            "accessibility": "public",
1831            "static": false,
1832            "optional": false,
1833            "computed": false,
1834            "value": {
1835              "type": "FunctionExpression",
1836              "function": {
1837                "type": "ScriptFunction",
1838                "id": {
1839                  "type": "Identifier",
1840                  "name": "foo3",
1841                  "decorators": [],
1842                  "loc": {
1843                    "start": {
1844                      "line": 37,
1845                      "column": 14
1846                    },
1847                    "end": {
1848                      "line": 37,
1849                      "column": 18
1850                    }
1851                  }
1852                },
1853                "generator": false,
1854                "async": false,
1855                "expression": false,
1856                "params": [],
1857                "returnType": {
1858                  "type": "ETSPrimitiveType",
1859                  "loc": {
1860                    "start": {
1861                      "line": 37,
1862                      "column": 22
1863                    },
1864                    "end": {
1865                      "line": 37,
1866                      "column": 26
1867                    }
1868                  }
1869                },
1870                "body": {
1871                  "type": "BlockStatement",
1872                  "statements": [],
1873                  "loc": {
1874                    "start": {
1875                      "line": 37,
1876                      "column": 27
1877                    },
1878                    "end": {
1879                      "line": 37,
1880                      "column": 29
1881                    }
1882                  }
1883                },
1884                "loc": {
1885                  "start": {
1886                    "line": 37,
1887                    "column": 18
1888                  },
1889                  "end": {
1890                    "line": 37,
1891                    "column": 29
1892                  }
1893                }
1894              },
1895              "loc": {
1896                "start": {
1897                  "line": 37,
1898                  "column": 18
1899                },
1900                "end": {
1901                  "line": 37,
1902                  "column": 29
1903                }
1904              }
1905            },
1906            "overloads": [],
1907            "decorators": [],
1908            "loc": {
1909              "start": {
1910                "line": 37,
1911                "column": 5
1912              },
1913              "end": {
1914                "line": 37,
1915                "column": 29
1916              }
1917            }
1918          },
1919          {
1920            "type": "MethodDefinition",
1921            "key": {
1922              "type": "Identifier",
1923              "name": "constructor",
1924              "decorators": [],
1925              "loc": {
1926                "start": {
1927                  "line": 1,
1928                  "column": 1
1929                },
1930                "end": {
1931                  "line": 1,
1932                  "column": 1
1933                }
1934              }
1935            },
1936            "kind": "constructor",
1937            "static": false,
1938            "optional": false,
1939            "computed": false,
1940            "value": {
1941              "type": "FunctionExpression",
1942              "function": {
1943                "type": "ScriptFunction",
1944                "id": {
1945                  "type": "Identifier",
1946                  "name": "constructor",
1947                  "decorators": [],
1948                  "loc": {
1949                    "start": {
1950                      "line": 1,
1951                      "column": 1
1952                    },
1953                    "end": {
1954                      "line": 1,
1955                      "column": 1
1956                    }
1957                  }
1958                },
1959                "generator": false,
1960                "async": false,
1961                "expression": false,
1962                "params": [],
1963                "body": {
1964                  "type": "BlockStatement",
1965                  "statements": [],
1966                  "loc": {
1967                    "start": {
1968                      "line": 1,
1969                      "column": 1
1970                    },
1971                    "end": {
1972                      "line": 1,
1973                      "column": 1
1974                    }
1975                  }
1976                },
1977                "loc": {
1978                  "start": {
1979                    "line": 1,
1980                    "column": 1
1981                  },
1982                  "end": {
1983                    "line": 1,
1984                    "column": 1
1985                  }
1986                }
1987              },
1988              "loc": {
1989                "start": {
1990                  "line": 1,
1991                  "column": 1
1992                },
1993                "end": {
1994                  "line": 1,
1995                  "column": 1
1996                }
1997              }
1998            },
1999            "overloads": [],
2000            "decorators": [],
2001            "loc": {
2002              "start": {
2003                "line": 38,
2004                "column": 2
2005              },
2006              "end": {
2007                "line": 38,
2008                "column": 2
2009              }
2010            }
2011          }
2012        ],
2013        "loc": {
2014          "start": {
2015            "line": 34,
2016            "column": 35
2017          },
2018          "end": {
2019            "line": 38,
2020            "column": 2
2021          }
2022        }
2023      },
2024      "loc": {
2025        "start": {
2026          "line": 34,
2027          "column": 7
2028        },
2029        "end": {
2030          "line": 38,
2031          "column": 2
2032        }
2033      }
2034    },
2035    {
2036      "type": "ClassDeclaration",
2037      "definition": {
2038        "id": {
2039          "type": "Identifier",
2040          "name": "ETSGLOBAL",
2041          "decorators": [],
2042          "loc": {
2043            "start": {
2044              "line": 1,
2045              "column": 1
2046            },
2047            "end": {
2048              "line": 1,
2049              "column": 1
2050            }
2051          }
2052        },
2053        "superClass": null,
2054        "implements": [],
2055        "body": [
2056          {
2057            "type": "MethodDefinition",
2058            "key": {
2059              "type": "Identifier",
2060              "name": "_$init$_",
2061              "decorators": [],
2062              "loc": {
2063                "start": {
2064                  "line": 1,
2065                  "column": 1
2066                },
2067                "end": {
2068                  "line": 1,
2069                  "column": 1
2070                }
2071              }
2072            },
2073            "kind": "method",
2074            "accessibility": "public",
2075            "static": true,
2076            "optional": false,
2077            "computed": false,
2078            "value": {
2079              "type": "FunctionExpression",
2080              "function": {
2081                "type": "ScriptFunction",
2082                "id": {
2083                  "type": "Identifier",
2084                  "name": "_$init$_",
2085                  "decorators": [],
2086                  "loc": {
2087                    "start": {
2088                      "line": 1,
2089                      "column": 1
2090                    },
2091                    "end": {
2092                      "line": 1,
2093                      "column": 1
2094                    }
2095                  }
2096                },
2097                "generator": false,
2098                "async": false,
2099                "expression": false,
2100                "params": [],
2101                "body": {
2102                  "type": "BlockStatement",
2103                  "statements": [],
2104                  "loc": {
2105                    "start": {
2106                      "line": 1,
2107                      "column": 1
2108                    },
2109                    "end": {
2110                      "line": 1,
2111                      "column": 1
2112                    }
2113                  }
2114                },
2115                "loc": {
2116                  "start": {
2117                    "line": 1,
2118                    "column": 1
2119                  },
2120                  "end": {
2121                    "line": 1,
2122                    "column": 1
2123                  }
2124                }
2125              },
2126              "loc": {
2127                "start": {
2128                  "line": 1,
2129                  "column": 1
2130                },
2131                "end": {
2132                  "line": 1,
2133                  "column": 1
2134                }
2135              }
2136            },
2137            "overloads": [],
2138            "decorators": [],
2139            "loc": {
2140              "start": {
2141                "line": 1,
2142                "column": 1
2143              },
2144              "end": {
2145                "line": 1,
2146                "column": 1
2147              }
2148            }
2149          }
2150        ],
2151        "loc": {
2152          "start": {
2153            "line": 1,
2154            "column": 1
2155          },
2156          "end": {
2157            "line": 1,
2158            "column": 1
2159          }
2160        }
2161      },
2162      "loc": {
2163        "start": {
2164          "line": 1,
2165          "column": 1
2166        },
2167        "end": {
2168          "line": 1,
2169          "column": 1
2170        }
2171      }
2172    }
2173  ],
2174  "loc": {
2175    "start": {
2176      "line": 1,
2177      "column": 1
2178    },
2179    "end": {
2180      "line": 39,
2181      "column": 1
2182    }
2183  }
2184}
2185