tests: fix model serialization tests
[nit.git] / src / model / test_model_json.sav / test_props_to_full_json.res
1 {
2         "name": "OTHER",
3         "class_name": "MVirtualTypeProp",
4         "full_name": "test_prog::Object::OTHER",
5         "mdoc": {
6                 "content": "Used for comparisons.",
7                 "location": {
8                         "column_end": 0,
9                         "column_start": 2,
10                         "line_end": 23,
11                         "line_start": 22,
12                         "file": "test_location"
13                 }
14         },
15         "visibility": "public",
16         "modifiers": ["type"],
17         "location": {
18                 "column_end": 28,
19                 "column_start": 2,
20                 "line_end": 23,
21                 "line_start": 22,
22                 "file": "test_location"
23         },
24         "intro": {
25                 "full_name": "test_prog$Object$OTHER"
26         },
27         "intro_mclassdef": {
28                 "full_name": "test_prog$Object"
29         },
30         "mpropdefs": [{
31                 "full_name": "test_prog$Object$OTHER"
32         }],
33         "intro_mclass": {
34                 "full_name": "test_prog::Object"
35         },
36         "mpackage": {
37                 "full_name": "test_prog"
38         },
39         "mvirtualtype": {
40                 "full_name": "test_prog::Object::OTHER"
41         },
42         "bound": {
43                 "full_name": "nullable test_prog::Object"
44         }
45 }
46 {
47         "name": "==",
48         "class_name": "MMethod",
49         "full_name": "test_prog::Object::==",
50         "mdoc": {
51                 "content": "Is `other` equqls to `self`?",
52                 "location": {
53                         "column_end": 0,
54                         "column_start": 2,
55                         "line_end": 26,
56                         "line_start": 25,
57                         "file": "test_location"
58                 }
59         },
60         "visibility": "public",
61         "modifiers": ["intern", "fun"],
62         "location": {
63                 "column_end": 37,
64                 "column_start": 2,
65                 "line_end": 26,
66                 "line_start": 25,
67                 "file": "test_location"
68         },
69         "intro": {
70                 "full_name": "test_prog$Object$=="
71         },
72         "intro_mclassdef": {
73                 "full_name": "test_prog$Object"
74         },
75         "mpropdefs": [{
76                 "full_name": "test_prog$Object$=="
77         }],
78         "intro_mclass": {
79                 "full_name": "test_prog::Object"
80         },
81         "mpackage": {
82                 "full_name": "test_prog"
83         },
84         "is_init": false,
85         "msignature": {
86                 "arity": 1,
87                 "mparams": [{
88                         "is_vararg": false,
89                         "name": "other",
90                         "mtype": {
91                                 "full_name": "test_prog::Object::OTHER"
92                         }
93                 }],
94                 "return_mtype": {
95                         "full_name": "test_prog::Bool"
96                 },
97                 "vararg_rank": -1
98         }
99 }
100 {
101         "name": "!=",
102         "class_name": "MMethod",
103         "full_name": "test_prog::Object::!=",
104         "mdoc": {
105                 "content": "Is `other` different from `self`?",
106                 "location": {
107                         "column_end": 0,
108                         "column_start": 2,
109                         "line_end": 29,
110                         "line_start": 28,
111                         "file": "test_location"
112                 }
113         },
114         "visibility": "public",
115         "modifiers": ["fun"],
116         "location": {
117                 "column_end": 55,
118                 "column_start": 2,
119                 "line_end": 29,
120                 "line_start": 28,
121                 "file": "test_location"
122         },
123         "intro": {
124                 "full_name": "test_prog$Object$!="
125         },
126         "intro_mclassdef": {
127                 "full_name": "test_prog$Object"
128         },
129         "mpropdefs": [{
130                 "full_name": "test_prog$Object$!="
131         }],
132         "intro_mclass": {
133                 "full_name": "test_prog::Object"
134         },
135         "mpackage": {
136                 "full_name": "test_prog"
137         },
138         "is_init": false,
139         "msignature": {
140                 "arity": 1,
141                 "mparams": [{
142                         "is_vararg": false,
143                         "name": "other",
144                         "mtype": {
145                                 "full_name": "test_prog::Object::OTHER"
146                         }
147                 }],
148                 "return_mtype": {
149                         "full_name": "test_prog::Bool"
150                 },
151                 "vararg_rank": -1
152         }
153 }
154 {
155         "name": "init",
156         "class_name": "MMethod",
157         "full_name": "test_prog::Object::init",
158         "mdoc": null,
159         "visibility": "public",
160         "modifiers": ["init"],
161         "location": {
162                 "column_end": 3,
163                 "column_start": 1,
164                 "line_end": 30,
165                 "line_start": 20,
166                 "file": "test_location"
167         },
168         "intro": {
169                 "full_name": "test_prog$Object$init"
170         },
171         "intro_mclassdef": {
172                 "full_name": "test_prog$Object"
173         },
174         "mpropdefs": [{
175                 "full_name": "test_prog$Elf$Object::init"
176         }, {
177                 "full_name": "test_prog$Career$Object::init"
178         }, {
179                 "full_name": "test_prog$Warrior$Object::init"
180         }, {
181                 "full_name": "test_prog$Magician$Object::init"
182         }, {
183                 "full_name": "test_prog$Alcoholic$Object::init"
184         }, {
185                 "full_name": "test_prog$Race$Object::init"
186         }, {
187                 "full_name": "test_prog$Human$Object::init"
188         }, {
189                 "full_name": "test_prog$Dwarf$Object::init"
190         }, {
191                 "full_name": "test_prog$Character$Object::init"
192         }, {
193                 "full_name": "test_prog$Object$init"
194         }],
195         "intro_mclass": {
196                 "full_name": "test_prog::Object"
197         },
198         "mpackage": {
199                 "full_name": "test_prog"
200         },
201         "is_init": true,
202         "msignature": {
203                 "arity": 0,
204                 "mparams": [],
205                 "return_mtype": null,
206                 "vararg_rank": -1
207         }
208 }
209 {
210         "name": "unary -",
211         "class_name": "MMethod",
212         "full_name": "test_prog::Int::unary -",
213         "mdoc": null,
214         "visibility": "public",
215         "modifiers": ["intern", "fun"],
216         "location": {
217                 "column_end": 21,
218                 "column_start": 2,
219                 "line_end": 34,
220                 "line_start": 34,
221                 "file": "test_location"
222         },
223         "intro": {
224                 "full_name": "test_prog$Int$unary -"
225         },
226         "intro_mclassdef": {
227                 "full_name": "test_prog$Int"
228         },
229         "mpropdefs": [{
230                 "full_name": "test_prog$Int$unary -"
231         }],
232         "intro_mclass": {
233                 "full_name": "test_prog::Int"
234         },
235         "mpackage": {
236                 "full_name": "test_prog"
237         },
238         "is_init": false,
239         "msignature": {
240                 "arity": 0,
241                 "mparams": [],
242                 "return_mtype": {
243                         "full_name": "test_prog::Int"
244                 },
245                 "vararg_rank": -1
246         }
247 }
248 {
249         "name": "+",
250         "class_name": "MMethod",
251         "full_name": "test_prog::Int::+",
252         "mdoc": null,
253         "visibility": "public",
254         "modifiers": ["intern", "fun"],
255         "location": {
256                 "column_end": 29,
257                 "column_start": 2,
258                 "line_end": 35,
259                 "line_start": 35,
260                 "file": "test_location"
261         },
262         "intro": {
263                 "full_name": "test_prog$Int$+"
264         },
265         "intro_mclassdef": {
266                 "full_name": "test_prog$Int"
267         },
268         "mpropdefs": [{
269                 "full_name": "test_prog$Int$+"
270         }],
271         "intro_mclass": {
272                 "full_name": "test_prog::Int"
273         },
274         "mpackage": {
275                 "full_name": "test_prog"
276         },
277         "is_init": false,
278         "msignature": {
279                 "arity": 1,
280                 "mparams": [{
281                         "is_vararg": false,
282                         "name": "i",
283                         "mtype": {
284                                 "full_name": "test_prog::Int"
285                         }
286                 }],
287                 "return_mtype": {
288                         "full_name": "test_prog::Int"
289                 },
290                 "vararg_rank": -1
291         }
292 }
293 {
294         "name": "-",
295         "class_name": "MMethod",
296         "full_name": "test_prog::Int::-",
297         "mdoc": null,
298         "visibility": "public",
299         "modifiers": ["intern", "fun"],
300         "location": {
301                 "column_end": 29,
302                 "column_start": 2,
303                 "line_end": 36,
304                 "line_start": 36,
305                 "file": "test_location"
306         },
307         "intro": {
308                 "full_name": "test_prog$Int$-"
309         },
310         "intro_mclassdef": {
311                 "full_name": "test_prog$Int"
312         },
313         "mpropdefs": [{
314                 "full_name": "test_prog$Int$-"
315         }],
316         "intro_mclass": {
317                 "full_name": "test_prog::Int"
318         },
319         "mpackage": {
320                 "full_name": "test_prog"
321         },
322         "is_init": false,
323         "msignature": {
324                 "arity": 1,
325                 "mparams": [{
326                         "is_vararg": false,
327                         "name": "i",
328                         "mtype": {
329                                 "full_name": "test_prog::Int"
330                         }
331                 }],
332                 "return_mtype": {
333                         "full_name": "test_prog::Int"
334                 },
335                 "vararg_rank": -1
336         }
337 }
338 {
339         "name": "*",
340         "class_name": "MMethod",
341         "full_name": "test_prog::Int::*",
342         "mdoc": null,
343         "visibility": "public",
344         "modifiers": ["intern", "fun"],
345         "location": {
346                 "column_end": 29,
347                 "column_start": 2,
348                 "line_end": 37,
349                 "line_start": 37,
350                 "file": "test_location"
351         },
352         "intro": {
353                 "full_name": "test_prog$Int$*"
354         },
355         "intro_mclassdef": {
356                 "full_name": "test_prog$Int"
357         },
358         "mpropdefs": [{
359                 "full_name": "test_prog$Int$*"
360         }],
361         "intro_mclass": {
362                 "full_name": "test_prog::Int"
363         },
364         "mpackage": {
365                 "full_name": "test_prog"
366         },
367         "is_init": false,
368         "msignature": {
369                 "arity": 1,
370                 "mparams": [{
371                         "is_vararg": false,
372                         "name": "i",
373                         "mtype": {
374                                 "full_name": "test_prog::Int"
375                         }
376                 }],
377                 "return_mtype": {
378                         "full_name": "test_prog::Int"
379                 },
380                 "vararg_rank": -1
381         }
382 }
383 {
384         "name": "/",
385         "class_name": "MMethod",
386         "full_name": "test_prog::Int::/",
387         "mdoc": null,
388         "visibility": "public",
389         "modifiers": ["intern", "fun"],
390         "location": {
391                 "column_end": 29,
392                 "column_start": 2,
393                 "line_end": 38,
394                 "line_start": 38,
395                 "file": "test_location"
396         },
397         "intro": {
398                 "full_name": "test_prog$Int$/"
399         },
400         "intro_mclassdef": {
401                 "full_name": "test_prog$Int"
402         },
403         "mpropdefs": [{
404                 "full_name": "test_prog$Int$/"
405         }],
406         "intro_mclass": {
407                 "full_name": "test_prog::Int"
408         },
409         "mpackage": {
410                 "full_name": "test_prog"
411         },
412         "is_init": false,
413         "msignature": {
414                 "arity": 1,
415                 "mparams": [{
416                         "is_vararg": false,
417                         "name": "i",
418                         "mtype": {
419                                 "full_name": "test_prog::Int"
420                         }
421                 }],
422                 "return_mtype": {
423                         "full_name": "test_prog::Int"
424                 },
425                 "vararg_rank": -1
426         }
427 }
428 {
429         "name": ">",
430         "class_name": "MMethod",
431         "full_name": "test_prog::Int::>",
432         "mdoc": null,
433         "visibility": "public",
434         "modifiers": ["intern", "fun"],
435         "location": {
436                 "column_end": 30,
437                 "column_start": 2,
438                 "line_end": 39,
439                 "line_start": 39,
440                 "file": "test_location"
441         },
442         "intro": {
443                 "full_name": "test_prog$Int$>"
444         },
445         "intro_mclassdef": {
446                 "full_name": "test_prog$Int"
447         },
448         "mpropdefs": [{
449                 "full_name": "test_prog$Int$>"
450         }],
451         "intro_mclass": {
452                 "full_name": "test_prog::Int"
453         },
454         "mpackage": {
455                 "full_name": "test_prog"
456         },
457         "is_init": false,
458         "msignature": {
459                 "arity": 1,
460                 "mparams": [{
461                         "is_vararg": false,
462                         "name": "i",
463                         "mtype": {
464                                 "full_name": "test_prog::Int"
465                         }
466                 }],
467                 "return_mtype": {
468                         "full_name": "test_prog::Bool"
469                 },
470                 "vararg_rank": -1
471         }
472 }
473 {
474         "name": "to_f",
475         "class_name": "MMethod",
476         "full_name": "test_prog::Int::to_f",
477         "mdoc": null,
478         "visibility": "public",
479         "modifiers": ["intern", "fun"],
480         "location": {
481                 "column_end": 26,
482                 "column_start": 2,
483                 "line_end": 40,
484                 "line_start": 40,
485                 "file": "test_location"
486         },
487         "intro": {
488                 "full_name": "test_prog$Int$to_f"
489         },
490         "intro_mclassdef": {
491                 "full_name": "test_prog$Int"
492         },
493         "mpropdefs": [{
494                 "full_name": "test_prog$Int$to_f"
495         }],
496         "intro_mclass": {
497                 "full_name": "test_prog::Int"
498         },
499         "mpackage": {
500                 "full_name": "test_prog"
501         },
502         "is_init": false,
503         "msignature": {
504                 "arity": 0,
505                 "mparams": [],
506                 "return_mtype": {
507                         "full_name": "test_prog::Float"
508                 },
509                 "vararg_rank": -1
510         }
511 }
512 {
513         "name": "+",
514         "class_name": "MMethod",
515         "full_name": "test_prog::Float::+",
516         "mdoc": null,
517         "visibility": "public",
518         "modifiers": ["intern", "fun"],
519         "location": {
520                 "column_end": 33,
521                 "column_start": 2,
522                 "line_end": 45,
523                 "line_start": 45,
524                 "file": "test_location"
525         },
526         "intro": {
527                 "full_name": "test_prog$Float$+"
528         },
529         "intro_mclassdef": {
530                 "full_name": "test_prog$Float"
531         },
532         "mpropdefs": [{
533                 "full_name": "test_prog$Float$+"
534         }],
535         "intro_mclass": {
536                 "full_name": "test_prog::Float"
537         },
538         "mpackage": {
539                 "full_name": "test_prog"
540         },
541         "is_init": false,
542         "msignature": {
543                 "arity": 1,
544                 "mparams": [{
545                         "is_vararg": false,
546                         "name": "f",
547                         "mtype": {
548                                 "full_name": "test_prog::Float"
549                         }
550                 }],
551                 "return_mtype": {
552                         "full_name": "test_prog::Float"
553                 },
554                 "vararg_rank": -1
555         }
556 }
557 {
558         "name": "-",
559         "class_name": "MMethod",
560         "full_name": "test_prog::Float::-",
561         "mdoc": null,
562         "visibility": "public",
563         "modifiers": ["intern", "fun"],
564         "location": {
565                 "column_end": 33,
566                 "column_start": 2,
567                 "line_end": 46,
568                 "line_start": 46,
569                 "file": "test_location"
570         },
571         "intro": {
572                 "full_name": "test_prog$Float$-"
573         },
574         "intro_mclassdef": {
575                 "full_name": "test_prog$Float"
576         },
577         "mpropdefs": [{
578                 "full_name": "test_prog$Float$-"
579         }],
580         "intro_mclass": {
581                 "full_name": "test_prog::Float"
582         },
583         "mpackage": {
584                 "full_name": "test_prog"
585         },
586         "is_init": false,
587         "msignature": {
588                 "arity": 1,
589                 "mparams": [{
590                         "is_vararg": false,
591                         "name": "f",
592                         "mtype": {
593                                 "full_name": "test_prog::Float"
594                         }
595                 }],
596                 "return_mtype": {
597                         "full_name": "test_prog::Float"
598                 },
599                 "vararg_rank": -1
600         }
601 }
602 {
603         "name": "*",
604         "class_name": "MMethod",
605         "full_name": "test_prog::Float::*",
606         "mdoc": null,
607         "visibility": "public",
608         "modifiers": ["intern", "fun"],
609         "location": {
610                 "column_end": 33,
611                 "column_start": 2,
612                 "line_end": 47,
613                 "line_start": 47,
614                 "file": "test_location"
615         },
616         "intro": {
617                 "full_name": "test_prog$Float$*"
618         },
619         "intro_mclassdef": {
620                 "full_name": "test_prog$Float"
621         },
622         "mpropdefs": [{
623                 "full_name": "test_prog$Float$*"
624         }],
625         "intro_mclass": {
626                 "full_name": "test_prog::Float"
627         },
628         "mpackage": {
629                 "full_name": "test_prog"
630         },
631         "is_init": false,
632         "msignature": {
633                 "arity": 1,
634                 "mparams": [{
635                         "is_vararg": false,
636                         "name": "f",
637                         "mtype": {
638                                 "full_name": "test_prog::Float"
639                         }
640                 }],
641                 "return_mtype": {
642                         "full_name": "test_prog::Float"
643                 },
644                 "vararg_rank": -1
645         }
646 }
647 {
648         "name": "/",
649         "class_name": "MMethod",
650         "full_name": "test_prog::Float::/",
651         "mdoc": null,
652         "visibility": "public",
653         "modifiers": ["intern", "fun"],
654         "location": {
655                 "column_end": 33,
656                 "column_start": 2,
657                 "line_end": 48,
658                 "line_start": 48,
659                 "file": "test_location"
660         },
661         "intro": {
662                 "full_name": "test_prog$Float$/"
663         },
664         "intro_mclassdef": {
665                 "full_name": "test_prog$Float"
666         },
667         "mpropdefs": [{
668                 "full_name": "test_prog$Float$/"
669         }],
670         "intro_mclass": {
671                 "full_name": "test_prog::Float"
672         },
673         "mpackage": {
674                 "full_name": "test_prog"
675         },
676         "is_init": false,
677         "msignature": {
678                 "arity": 1,
679                 "mparams": [{
680                         "is_vararg": false,
681                         "name": "f",
682                         "mtype": {
683                                 "full_name": "test_prog::Float"
684                         }
685                 }],
686                 "return_mtype": {
687                         "full_name": "test_prog::Float"
688                 },
689                 "vararg_rank": -1
690         }
691 }
692 {
693         "name": ">",
694         "class_name": "MMethod",
695         "full_name": "test_prog::Float::>",
696         "mdoc": null,
697         "visibility": "public",
698         "modifiers": ["intern", "fun"],
699         "location": {
700                 "column_end": 32,
701                 "column_start": 2,
702                 "line_end": 49,
703                 "line_start": 49,
704                 "file": "test_location"
705         },
706         "intro": {
707                 "full_name": "test_prog$Float$>"
708         },
709         "intro_mclassdef": {
710                 "full_name": "test_prog$Float"
711         },
712         "mpropdefs": [{
713                 "full_name": "test_prog$Float$>"
714         }],
715         "intro_mclass": {
716                 "full_name": "test_prog::Float"
717         },
718         "mpackage": {
719                 "full_name": "test_prog"
720         },
721         "is_init": false,
722         "msignature": {
723                 "arity": 1,
724                 "mparams": [{
725                         "is_vararg": false,
726                         "name": "f",
727                         "mtype": {
728                                 "full_name": "test_prog::Float"
729                         }
730                 }],
731                 "return_mtype": {
732                         "full_name": "test_prog::Bool"
733                 },
734                 "vararg_rank": -1
735         }
736 }
737 {
738         "name": "_strength_bonus",
739         "class_name": "MAttribute",
740         "full_name": "test_prog::careers::Career::_strength_bonus",
741         "mdoc": null,
742         "visibility": "private",
743         "modifiers": ["private", "var"],
744         "location": {
745                 "column_end": 24,
746                 "column_start": 2,
747                 "line_end": 31,
748                 "line_start": 31,
749                 "file": "test_location"
750         },
751         "intro": {
752                 "full_name": "test_prog$Career$_strength_bonus"
753         },
754         "intro_mclassdef": {
755                 "full_name": "test_prog$Career"
756         },
757         "mpropdefs": [{
758                 "full_name": "test_prog$Career$_strength_bonus"
759         }],
760         "intro_mclass": {
761                 "full_name": "test_prog::Career"
762         },
763         "mpackage": {
764                 "full_name": "test_prog"
765         },
766         "static_mtype": {
767                 "full_name": "test_prog::Int"
768         }
769 }
770 {
771         "name": "strength_bonus",
772         "class_name": "MMethod",
773         "full_name": "test_prog::Career::strength_bonus",
774         "mdoc": null,
775         "visibility": "public",
776         "modifiers": ["fun"],
777         "location": {
778                 "column_end": 24,
779                 "column_start": 2,
780                 "line_end": 31,
781                 "line_start": 31,
782                 "file": "test_location"
783         },
784         "intro": {
785                 "full_name": "test_prog$Career$strength_bonus"
786         },
787         "intro_mclassdef": {
788                 "full_name": "test_prog$Career"
789         },
790         "mpropdefs": [{
791                 "full_name": "test_prog$Career$strength_bonus"
792         }],
793         "intro_mclass": {
794                 "full_name": "test_prog::Career"
795         },
796         "mpackage": {
797                 "full_name": "test_prog"
798         },
799         "is_init": false,
800         "msignature": {
801                 "arity": 0,
802                 "mparams": [],
803                 "return_mtype": {
804                         "full_name": "test_prog::Int"
805                 },
806                 "vararg_rank": -1
807         }
808 }
809 {
810         "name": "strength_bonus=",
811         "class_name": "MMethod",
812         "full_name": "test_prog::Career::strength_bonus=",
813         "mdoc": null,
814         "visibility": "protected",
815         "modifiers": ["protected", "fun"],
816         "location": {
817                 "column_end": 24,
818                 "column_start": 2,
819                 "line_end": 31,
820                 "line_start": 31,
821                 "file": "test_location"
822         },
823         "intro": {
824                 "full_name": "test_prog$Career$strength_bonus="
825         },
826         "intro_mclassdef": {
827                 "full_name": "test_prog$Career"
828         },
829         "mpropdefs": [{
830                 "full_name": "test_prog$Career$strength_bonus="
831         }],
832         "intro_mclass": {
833                 "full_name": "test_prog::Career"
834         },
835         "mpackage": {
836                 "full_name": "test_prog"
837         },
838         "is_init": false,
839         "msignature": {
840                 "arity": 1,
841                 "mparams": [{
842                         "is_vararg": false,
843                         "name": "strength_bonus",
844                         "mtype": {
845                                 "full_name": "test_prog::Int"
846                         }
847                 }],
848                 "return_mtype": null,
849                 "vararg_rank": -1
850         }
851 }
852 {
853         "name": "_endurance_bonus",
854         "class_name": "MAttribute",
855         "full_name": "test_prog::careers::Career::_endurance_bonus",
856         "mdoc": null,
857         "visibility": "private",
858         "modifiers": ["private", "var"],
859         "location": {
860                 "column_end": 25,
861                 "column_start": 2,
862                 "line_end": 32,
863                 "line_start": 32,
864                 "file": "test_location"
865         },
866         "intro": {
867                 "full_name": "test_prog$Career$_endurance_bonus"
868         },
869         "intro_mclassdef": {
870                 "full_name": "test_prog$Career"
871         },
872         "mpropdefs": [{
873                 "full_name": "test_prog$Career$_endurance_bonus"
874         }],
875         "intro_mclass": {
876                 "full_name": "test_prog::Career"
877         },
878         "mpackage": {
879                 "full_name": "test_prog"
880         },
881         "static_mtype": {
882                 "full_name": "test_prog::Int"
883         }
884 }
885 {
886         "name": "endurance_bonus",
887         "class_name": "MMethod",
888         "full_name": "test_prog::Career::endurance_bonus",
889         "mdoc": null,
890         "visibility": "public",
891         "modifiers": ["fun"],
892         "location": {
893                 "column_end": 25,
894                 "column_start": 2,
895                 "line_end": 32,
896                 "line_start": 32,
897                 "file": "test_location"
898         },
899         "intro": {
900                 "full_name": "test_prog$Career$endurance_bonus"
901         },
902         "intro_mclassdef": {
903                 "full_name": "test_prog$Career"
904         },
905         "mpropdefs": [{
906                 "full_name": "test_prog$Career$endurance_bonus"
907         }],
908         "intro_mclass": {
909                 "full_name": "test_prog::Career"
910         },
911         "mpackage": {
912                 "full_name": "test_prog"
913         },
914         "is_init": false,
915         "msignature": {
916                 "arity": 0,
917                 "mparams": [],
918                 "return_mtype": {
919                         "full_name": "test_prog::Int"
920                 },
921                 "vararg_rank": -1
922         }
923 }
924 {
925         "name": "endurance_bonus=",
926         "class_name": "MMethod",
927         "full_name": "test_prog::Career::endurance_bonus=",
928         "mdoc": null,
929         "visibility": "protected",
930         "modifiers": ["protected", "fun"],
931         "location": {
932                 "column_end": 25,
933                 "column_start": 2,
934                 "line_end": 32,
935                 "line_start": 32,
936                 "file": "test_location"
937         },
938         "intro": {
939                 "full_name": "test_prog$Career$endurance_bonus="
940         },
941         "intro_mclassdef": {
942                 "full_name": "test_prog$Career"
943         },
944         "mpropdefs": [{
945                 "full_name": "test_prog$Career$endurance_bonus="
946         }],
947         "intro_mclass": {
948                 "full_name": "test_prog::Career"
949         },
950         "mpackage": {
951                 "full_name": "test_prog"
952         },
953         "is_init": false,
954         "msignature": {
955                 "arity": 1,
956                 "mparams": [{
957                         "is_vararg": false,
958                         "name": "endurance_bonus",
959                         "mtype": {
960                                 "full_name": "test_prog::Int"
961                         }
962                 }],
963                 "return_mtype": null,
964                 "vararg_rank": -1
965         }
966 }
967 {
968         "name": "_intelligence_bonus",
969         "class_name": "MAttribute",
970         "full_name": "test_prog::careers::Career::_intelligence_bonus",
971         "mdoc": null,
972         "visibility": "private",
973         "modifiers": ["private", "var"],
974         "location": {
975                 "column_end": 28,
976                 "column_start": 2,
977                 "line_end": 33,
978                 "line_start": 33,
979                 "file": "test_location"
980         },
981         "intro": {
982                 "full_name": "test_prog$Career$_intelligence_bonus"
983         },
984         "intro_mclassdef": {
985                 "full_name": "test_prog$Career"
986         },
987         "mpropdefs": [{
988                 "full_name": "test_prog$Career$_intelligence_bonus"
989         }],
990         "intro_mclass": {
991                 "full_name": "test_prog::Career"
992         },
993         "mpackage": {
994                 "full_name": "test_prog"
995         },
996         "static_mtype": {
997                 "full_name": "test_prog::Int"
998         }
999 }
1000 {
1001         "name": "intelligence_bonus",
1002         "class_name": "MMethod",
1003         "full_name": "test_prog::Career::intelligence_bonus",
1004         "mdoc": null,
1005         "visibility": "public",
1006         "modifiers": ["fun"],
1007         "location": {
1008                 "column_end": 28,
1009                 "column_start": 2,
1010                 "line_end": 33,
1011                 "line_start": 33,
1012                 "file": "test_location"
1013         },
1014         "intro": {
1015                 "full_name": "test_prog$Career$intelligence_bonus"
1016         },
1017         "intro_mclassdef": {
1018                 "full_name": "test_prog$Career"
1019         },
1020         "mpropdefs": [{
1021                 "full_name": "test_prog$Career$intelligence_bonus"
1022         }],
1023         "intro_mclass": {
1024                 "full_name": "test_prog::Career"
1025         },
1026         "mpackage": {
1027                 "full_name": "test_prog"
1028         },
1029         "is_init": false,
1030         "msignature": {
1031                 "arity": 0,
1032                 "mparams": [],
1033                 "return_mtype": {
1034                         "full_name": "test_prog::Int"
1035                 },
1036                 "vararg_rank": -1
1037         }
1038 }
1039 {
1040         "name": "intelligence_bonus=",
1041         "class_name": "MMethod",
1042         "full_name": "test_prog::Career::intelligence_bonus=",
1043         "mdoc": null,
1044         "visibility": "protected",
1045         "modifiers": ["protected", "fun"],
1046         "location": {
1047                 "column_end": 28,
1048                 "column_start": 2,
1049                 "line_end": 33,
1050                 "line_start": 33,
1051                 "file": "test_location"
1052         },
1053         "intro": {
1054                 "full_name": "test_prog$Career$intelligence_bonus="
1055         },
1056         "intro_mclassdef": {
1057                 "full_name": "test_prog$Career"
1058         },
1059         "mpropdefs": [{
1060                 "full_name": "test_prog$Career$intelligence_bonus="
1061         }],
1062         "intro_mclass": {
1063                 "full_name": "test_prog::Career"
1064         },
1065         "mpackage": {
1066                 "full_name": "test_prog"
1067         },
1068         "is_init": false,
1069         "msignature": {
1070                 "arity": 1,
1071                 "mparams": [{
1072                         "is_vararg": false,
1073                         "name": "intelligence_bonus",
1074                         "mtype": {
1075                                 "full_name": "test_prog::Int"
1076                         }
1077                 }],
1078                 "return_mtype": null,
1079                 "vararg_rank": -1
1080         }
1081 }
1082 {
1083         "name": "_base_strength",
1084         "class_name": "MAttribute",
1085         "full_name": "test_prog::races::Race::_base_strength",
1086         "mdoc": {
1087                 "content": "Used to represents how strong the race is.",
1088                 "location": {
1089                         "column_end": 0,
1090                         "column_start": 2,
1091                         "line_end": 36,
1092                         "line_start": 35,
1093                         "file": "test_location"
1094                 }
1095         },
1096         "visibility": "private",
1097         "modifiers": ["private", "var"],
1098         "location": {
1099                 "column_end": 23,
1100                 "column_start": 2,
1101                 "line_end": 36,
1102                 "line_start": 35,
1103                 "file": "test_location"
1104         },
1105         "intro": {
1106                 "full_name": "test_prog$Race$_base_strength"
1107         },
1108         "intro_mclassdef": {
1109                 "full_name": "test_prog$Race"
1110         },
1111         "mpropdefs": [{
1112                 "full_name": "test_prog$Race$_base_strength"
1113         }],
1114         "intro_mclass": {
1115                 "full_name": "test_prog::Race"
1116         },
1117         "mpackage": {
1118                 "full_name": "test_prog"
1119         },
1120         "static_mtype": {
1121                 "full_name": "test_prog::Int"
1122         }
1123 }
1124 {
1125         "name": "base_strength",
1126         "class_name": "MMethod",
1127         "full_name": "test_prog::Race::base_strength",
1128         "mdoc": {
1129                 "content": "Used to represents how strong the race is.",
1130                 "location": {
1131                         "column_end": 0,
1132                         "column_start": 2,
1133                         "line_end": 36,
1134                         "line_start": 35,
1135                         "file": "test_location"
1136                 }
1137         },
1138         "visibility": "public",
1139         "modifiers": ["fun"],
1140         "location": {
1141                 "column_end": 23,
1142                 "column_start": 2,
1143                 "line_end": 36,
1144                 "line_start": 35,
1145                 "file": "test_location"
1146         },
1147         "intro": {
1148                 "full_name": "test_prog$Race$base_strength"
1149         },
1150         "intro_mclassdef": {
1151                 "full_name": "test_prog$Race"
1152         },
1153         "mpropdefs": [{
1154                 "full_name": "test_prog$Race$base_strength"
1155         }],
1156         "intro_mclass": {
1157                 "full_name": "test_prog::Race"
1158         },
1159         "mpackage": {
1160                 "full_name": "test_prog"
1161         },
1162         "is_init": false,
1163         "msignature": {
1164                 "arity": 0,
1165                 "mparams": [],
1166                 "return_mtype": {
1167                         "full_name": "test_prog::Int"
1168                 },
1169                 "vararg_rank": -1
1170         }
1171 }
1172 {
1173         "name": "base_strength=",
1174         "class_name": "MMethod",
1175         "full_name": "test_prog::Race::base_strength=",
1176         "mdoc": {
1177                 "content": "Used to represents how strong the race is.",
1178                 "location": {
1179                         "column_end": 0,
1180                         "column_start": 2,
1181                         "line_end": 36,
1182                         "line_start": 35,
1183                         "file": "test_location"
1184                 }
1185         },
1186         "visibility": "protected",
1187         "modifiers": ["protected", "fun"],
1188         "location": {
1189                 "column_end": 23,
1190                 "column_start": 2,
1191                 "line_end": 36,
1192                 "line_start": 35,
1193                 "file": "test_location"
1194         },
1195         "intro": {
1196                 "full_name": "test_prog$Race$base_strength="
1197         },
1198         "intro_mclassdef": {
1199                 "full_name": "test_prog$Race"
1200         },
1201         "mpropdefs": [{
1202                 "full_name": "test_prog$Race$base_strength="
1203         }],
1204         "intro_mclass": {
1205                 "full_name": "test_prog::Race"
1206         },
1207         "mpackage": {
1208                 "full_name": "test_prog"
1209         },
1210         "is_init": false,
1211         "msignature": {
1212                 "arity": 1,
1213                 "mparams": [{
1214                         "is_vararg": false,
1215                         "name": "base_strength",
1216                         "mtype": {
1217                                 "full_name": "test_prog::Int"
1218                         }
1219                 }],
1220                 "return_mtype": null,
1221                 "vararg_rank": -1
1222         }
1223 }
1224 {
1225         "name": "_base_endurance",
1226         "class_name": "MAttribute",
1227         "full_name": "test_prog::races::Race::_base_endurance",
1228         "mdoc": {
1229                 "content": "Used to represents how the race can absorb damage.",
1230                 "location": {
1231                         "column_end": 0,
1232                         "column_start": 2,
1233                         "line_end": 39,
1234                         "line_start": 38,
1235                         "file": "test_location"
1236                 }
1237         },
1238         "visibility": "private",
1239         "modifiers": ["private", "var"],
1240         "location": {
1241                 "column_end": 24,
1242                 "column_start": 2,
1243                 "line_end": 39,
1244                 "line_start": 38,
1245                 "file": "test_location"
1246         },
1247         "intro": {
1248                 "full_name": "test_prog$Race$_base_endurance"
1249         },
1250         "intro_mclassdef": {
1251                 "full_name": "test_prog$Race"
1252         },
1253         "mpropdefs": [{
1254                 "full_name": "test_prog$Race$_base_endurance"
1255         }],
1256         "intro_mclass": {
1257                 "full_name": "test_prog::Race"
1258         },
1259         "mpackage": {
1260                 "full_name": "test_prog"
1261         },
1262         "static_mtype": {
1263                 "full_name": "test_prog::Int"
1264         }
1265 }
1266 {
1267         "name": "base_endurance",
1268         "class_name": "MMethod",
1269         "full_name": "test_prog::Race::base_endurance",
1270         "mdoc": {
1271                 "content": "Used to represents how the race can absorb damage.",
1272                 "location": {
1273                         "column_end": 0,
1274                         "column_start": 2,
1275                         "line_end": 39,
1276                         "line_start": 38,
1277                         "file": "test_location"
1278                 }
1279         },
1280         "visibility": "public",
1281         "modifiers": ["fun"],
1282         "location": {
1283                 "column_end": 24,
1284                 "column_start": 2,
1285                 "line_end": 39,
1286                 "line_start": 38,
1287                 "file": "test_location"
1288         },
1289         "intro": {
1290                 "full_name": "test_prog$Race$base_endurance"
1291         },
1292         "intro_mclassdef": {
1293                 "full_name": "test_prog$Race"
1294         },
1295         "mpropdefs": [{
1296                 "full_name": "test_prog$Race$base_endurance"
1297         }],
1298         "intro_mclass": {
1299                 "full_name": "test_prog::Race"
1300         },
1301         "mpackage": {
1302                 "full_name": "test_prog"
1303         },
1304         "is_init": false,
1305         "msignature": {
1306                 "arity": 0,
1307                 "mparams": [],
1308                 "return_mtype": {
1309                         "full_name": "test_prog::Int"
1310                 },
1311                 "vararg_rank": -1
1312         }
1313 }
1314 {
1315         "name": "base_endurance=",
1316         "class_name": "MMethod",
1317         "full_name": "test_prog::Race::base_endurance=",
1318         "mdoc": {
1319                 "content": "Used to represents how the race can absorb damage.",
1320                 "location": {
1321                         "column_end": 0,
1322                         "column_start": 2,
1323                         "line_end": 39,
1324                         "line_start": 38,
1325                         "file": "test_location"
1326                 }
1327         },
1328         "visibility": "protected",
1329         "modifiers": ["protected", "fun"],
1330         "location": {
1331                 "column_end": 24,
1332                 "column_start": 2,
1333                 "line_end": 39,
1334                 "line_start": 38,
1335                 "file": "test_location"
1336         },
1337         "intro": {
1338                 "full_name": "test_prog$Race$base_endurance="
1339         },
1340         "intro_mclassdef": {
1341                 "full_name": "test_prog$Race"
1342         },
1343         "mpropdefs": [{
1344                 "full_name": "test_prog$Race$base_endurance="
1345         }],
1346         "intro_mclass": {
1347                 "full_name": "test_prog::Race"
1348         },
1349         "mpackage": {
1350                 "full_name": "test_prog"
1351         },
1352         "is_init": false,
1353         "msignature": {
1354                 "arity": 1,
1355                 "mparams": [{
1356                         "is_vararg": false,
1357                         "name": "base_endurance",
1358                         "mtype": {
1359                                 "full_name": "test_prog::Int"
1360                         }
1361                 }],
1362                 "return_mtype": null,
1363                 "vararg_rank": -1
1364         }
1365 }
1366 {
1367         "name": "_base_intelligence",
1368         "class_name": "MAttribute",
1369         "full_name": "test_prog::races::Race::_base_intelligence",
1370         "mdoc": {
1371                 "content": "Is this race smart?",
1372                 "location": {
1373                         "column_end": 0,
1374                         "column_start": 2,
1375                         "line_end": 42,
1376                         "line_start": 41,
1377                         "file": "test_location"
1378                 }
1379         },
1380         "visibility": "private",
1381         "modifiers": ["private", "var"],
1382         "location": {
1383                 "column_end": 27,
1384                 "column_start": 2,
1385                 "line_end": 42,
1386                 "line_start": 41,
1387                 "file": "test_location"
1388         },
1389         "intro": {
1390                 "full_name": "test_prog$Race$_base_intelligence"
1391         },
1392         "intro_mclassdef": {
1393                 "full_name": "test_prog$Race"
1394         },
1395         "mpropdefs": [{
1396                 "full_name": "test_prog$Race$_base_intelligence"
1397         }],
1398         "intro_mclass": {
1399                 "full_name": "test_prog::Race"
1400         },
1401         "mpackage": {
1402                 "full_name": "test_prog"
1403         },
1404         "static_mtype": {
1405                 "full_name": "test_prog::Int"
1406         }
1407 }
1408 {
1409         "name": "base_intelligence",
1410         "class_name": "MMethod",
1411         "full_name": "test_prog::Race::base_intelligence",
1412         "mdoc": {
1413                 "content": "Is this race smart?",
1414                 "location": {
1415                         "column_end": 0,
1416                         "column_start": 2,
1417                         "line_end": 42,
1418                         "line_start": 41,
1419                         "file": "test_location"
1420                 }
1421         },
1422         "visibility": "public",
1423         "modifiers": ["fun"],
1424         "location": {
1425                 "column_end": 27,
1426                 "column_start": 2,
1427                 "line_end": 42,
1428                 "line_start": 41,
1429                 "file": "test_location"
1430         },
1431         "intro": {
1432                 "full_name": "test_prog$Race$base_intelligence"
1433         },
1434         "intro_mclassdef": {
1435                 "full_name": "test_prog$Race"
1436         },
1437         "mpropdefs": [{
1438                 "full_name": "test_prog$Race$base_intelligence"
1439         }],
1440         "intro_mclass": {
1441                 "full_name": "test_prog::Race"
1442         },
1443         "mpackage": {
1444                 "full_name": "test_prog"
1445         },
1446         "is_init": false,
1447         "msignature": {
1448                 "arity": 0,
1449                 "mparams": [],
1450                 "return_mtype": {
1451                         "full_name": "test_prog::Int"
1452                 },
1453                 "vararg_rank": -1
1454         }
1455 }
1456 {
1457         "name": "base_intelligence=",
1458         "class_name": "MMethod",
1459         "full_name": "test_prog::Race::base_intelligence=",
1460         "mdoc": {
1461                 "content": "Is this race smart?",
1462                 "location": {
1463                         "column_end": 0,
1464                         "column_start": 2,
1465                         "line_end": 42,
1466                         "line_start": 41,
1467                         "file": "test_location"
1468                 }
1469         },
1470         "visibility": "protected",
1471         "modifiers": ["protected", "fun"],
1472         "location": {
1473                 "column_end": 27,
1474                 "column_start": 2,
1475                 "line_end": 42,
1476                 "line_start": 41,
1477                 "file": "test_location"
1478         },
1479         "intro": {
1480                 "full_name": "test_prog$Race$base_intelligence="
1481         },
1482         "intro_mclassdef": {
1483                 "full_name": "test_prog$Race"
1484         },
1485         "mpropdefs": [{
1486                 "full_name": "test_prog$Race$base_intelligence="
1487         }],
1488         "intro_mclass": {
1489                 "full_name": "test_prog::Race"
1490         },
1491         "mpackage": {
1492                 "full_name": "test_prog"
1493         },
1494         "is_init": false,
1495         "msignature": {
1496                 "arity": 1,
1497                 "mparams": [{
1498                         "is_vararg": false,
1499                         "name": "base_intelligence",
1500                         "mtype": {
1501                                 "full_name": "test_prog::Int"
1502                         }
1503                 }],
1504                 "return_mtype": null,
1505                 "vararg_rank": -1
1506         }
1507 }
1508 {
1509         "name": "_race",
1510         "class_name": "MAttribute",
1511         "full_name": "test_prog::character::Character::_race",
1512         "mdoc": {
1513                 "content": "The `Race` of the character.",
1514                 "location": {
1515                         "column_end": 0,
1516                         "column_start": 2,
1517                         "line_end": 25,
1518                         "line_start": 24,
1519                         "file": "test_location"
1520                 }
1521         },
1522         "visibility": "private",
1523         "modifiers": ["private", "var"],
1524         "location": {
1525                 "column_end": 15,
1526                 "column_start": 2,
1527                 "line_end": 25,
1528                 "line_start": 24,
1529                 "file": "test_location"
1530         },
1531         "intro": {
1532                 "full_name": "test_prog$Character$_race"
1533         },
1534         "intro_mclassdef": {
1535                 "full_name": "test_prog$Character"
1536         },
1537         "mpropdefs": [{
1538                 "full_name": "test_prog$Character$_race"
1539         }],
1540         "intro_mclass": {
1541                 "full_name": "test_prog::Character"
1542         },
1543         "mpackage": {
1544                 "full_name": "test_prog"
1545         },
1546         "static_mtype": {
1547                 "full_name": "test_prog::Race"
1548         }
1549 }
1550 {
1551         "name": "race",
1552         "class_name": "MMethod",
1553         "full_name": "test_prog::Character::race",
1554         "mdoc": {
1555                 "content": "The `Race` of the character.",
1556                 "location": {
1557                         "column_end": 0,
1558                         "column_start": 2,
1559                         "line_end": 25,
1560                         "line_start": 24,
1561                         "file": "test_location"
1562                 }
1563         },
1564         "visibility": "public",
1565         "modifiers": ["fun"],
1566         "location": {
1567                 "column_end": 15,
1568                 "column_start": 2,
1569                 "line_end": 25,
1570                 "line_start": 24,
1571                 "file": "test_location"
1572         },
1573         "intro": {
1574                 "full_name": "test_prog$Character$race"
1575         },
1576         "intro_mclassdef": {
1577                 "full_name": "test_prog$Character"
1578         },
1579         "mpropdefs": [{
1580                 "full_name": "test_prog$Character$race"
1581         }],
1582         "intro_mclass": {
1583                 "full_name": "test_prog::Character"
1584         },
1585         "mpackage": {
1586                 "full_name": "test_prog"
1587         },
1588         "is_init": false,
1589         "msignature": {
1590                 "arity": 0,
1591                 "mparams": [],
1592                 "return_mtype": {
1593                         "full_name": "test_prog::Race"
1594                 },
1595                 "vararg_rank": -1
1596         }
1597 }
1598 {
1599         "name": "race=",
1600         "class_name": "MMethod",
1601         "full_name": "test_prog::Character::race=",
1602         "mdoc": {
1603                 "content": "The `Race` of the character.",
1604                 "location": {
1605                         "column_end": 0,
1606                         "column_start": 2,
1607                         "line_end": 25,
1608                         "line_start": 24,
1609                         "file": "test_location"
1610                 }
1611         },
1612         "visibility": "protected",
1613         "modifiers": ["protected", "fun"],
1614         "location": {
1615                 "column_end": 15,
1616                 "column_start": 2,
1617                 "line_end": 25,
1618                 "line_start": 24,
1619                 "file": "test_location"
1620         },
1621         "intro": {
1622                 "full_name": "test_prog$Character$race="
1623         },
1624         "intro_mclassdef": {
1625                 "full_name": "test_prog$Character"
1626         },
1627         "mpropdefs": [{
1628                 "full_name": "test_prog$Character$race="
1629         }],
1630         "intro_mclass": {
1631                 "full_name": "test_prog::Character"
1632         },
1633         "mpackage": {
1634                 "full_name": "test_prog"
1635         },
1636         "is_init": false,
1637         "msignature": {
1638                 "arity": 1,
1639                 "mparams": [{
1640                         "is_vararg": false,
1641                         "name": "race",
1642                         "mtype": {
1643                                 "full_name": "test_prog::Race"
1644                         }
1645                 }],
1646                 "return_mtype": null,
1647                 "vararg_rank": -1
1648         }
1649 }
1650 {
1651         "name": "_career",
1652         "class_name": "MAttribute",
1653         "full_name": "test_prog::character::Character::_career",
1654         "mdoc": {
1655                 "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.",
1656                 "location": {
1657                         "column_end": 0,
1658                         "column_start": 2,
1659                         "line_end": 29,
1660                         "line_start": 27,
1661                         "file": "test_location"
1662                 }
1663         },
1664         "visibility": "private",
1665         "modifiers": ["private", "var"],
1666         "location": {
1667                 "column_end": 47,
1668                 "column_start": 2,
1669                 "line_end": 29,
1670                 "line_start": 27,
1671                 "file": "test_location"
1672         },
1673         "intro": {
1674                 "full_name": "test_prog$Character$_career"
1675         },
1676         "intro_mclassdef": {
1677                 "full_name": "test_prog$Character"
1678         },
1679         "mpropdefs": [{
1680                 "full_name": "test_prog$Character$_career"
1681         }],
1682         "intro_mclass": {
1683                 "full_name": "test_prog::Character"
1684         },
1685         "mpackage": {
1686                 "full_name": "test_prog"
1687         },
1688         "static_mtype": {
1689                 "full_name": "nullable test_prog::Career"
1690         }
1691 }
1692 {
1693         "name": "career",
1694         "class_name": "MMethod",
1695         "full_name": "test_prog::Character::career",
1696         "mdoc": {
1697                 "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.",
1698                 "location": {
1699                         "column_end": 0,
1700                         "column_start": 2,
1701                         "line_end": 29,
1702                         "line_start": 27,
1703                         "file": "test_location"
1704                 }
1705         },
1706         "visibility": "public",
1707         "modifiers": ["fun"],
1708         "location": {
1709                 "column_end": 47,
1710                 "column_start": 2,
1711                 "line_end": 29,
1712                 "line_start": 27,
1713                 "file": "test_location"
1714         },
1715         "intro": {
1716                 "full_name": "test_prog$Character$career"
1717         },
1718         "intro_mclassdef": {
1719                 "full_name": "test_prog$Character"
1720         },
1721         "mpropdefs": [{
1722                 "full_name": "test_prog$Character$career"
1723         }],
1724         "intro_mclass": {
1725                 "full_name": "test_prog::Character"
1726         },
1727         "mpackage": {
1728                 "full_name": "test_prog"
1729         },
1730         "is_init": false,
1731         "msignature": {
1732                 "arity": 0,
1733                 "mparams": [],
1734                 "return_mtype": {
1735                         "full_name": "nullable test_prog::Career"
1736                 },
1737                 "vararg_rank": -1
1738         }
1739 }
1740 {
1741         "name": "career=",
1742         "class_name": "MMethod",
1743         "full_name": "test_prog::Character::career=",
1744         "mdoc": {
1745                 "content": "The current `Career` of the character.\nReturns `null` if character is unemployed.",
1746                 "location": {
1747                         "column_end": 0,
1748                         "column_start": 2,
1749                         "line_end": 29,
1750                         "line_start": 27,
1751                         "file": "test_location"
1752                 }
1753         },
1754         "visibility": "public",
1755         "modifiers": ["fun"],
1756         "location": {
1757                 "column_end": 47,
1758                 "column_start": 2,
1759                 "line_end": 29,
1760                 "line_start": 27,
1761                 "file": "test_location"
1762         },
1763         "intro": {
1764                 "full_name": "test_prog$Character$career="
1765         },
1766         "intro_mclassdef": {
1767                 "full_name": "test_prog$Character"
1768         },
1769         "mpropdefs": [{
1770                 "full_name": "test_prog$Character$career="
1771         }],
1772         "intro_mclass": {
1773                 "full_name": "test_prog::Character"
1774         },
1775         "mpackage": {
1776                 "full_name": "test_prog"
1777         },
1778         "is_init": false,
1779         "msignature": {
1780                 "arity": 1,
1781                 "mparams": [{
1782                         "is_vararg": false,
1783                         "name": "career",
1784                         "mtype": {
1785                                 "full_name": "nullable test_prog::Career"
1786                         }
1787                 }],
1788                 "return_mtype": null,
1789                 "vararg_rank": -1
1790         }
1791 }
1792 {
1793         "name": "quit",
1794         "class_name": "MMethod",
1795         "full_name": "test_prog::Character::quit",
1796         "mdoc": null,
1797         "visibility": "public",
1798         "modifiers": ["fun"],
1799         "location": {
1800                 "column_end": 4,
1801                 "column_start": 2,
1802                 "line_end": 33,
1803                 "line_start": 31,
1804                 "file": "test_location"
1805         },
1806         "intro": {
1807                 "full_name": "test_prog$Character$quit"
1808         },
1809         "intro_mclassdef": {
1810                 "full_name": "test_prog$Character"
1811         },
1812         "mpropdefs": [{
1813                 "full_name": "test_prog$Character$quit"
1814         }],
1815         "intro_mclass": {
1816                 "full_name": "test_prog::Character"
1817         },
1818         "mpackage": {
1819                 "full_name": "test_prog"
1820         },
1821         "is_init": false,
1822         "msignature": {
1823                 "arity": 0,
1824                 "mparams": [],
1825                 "return_mtype": null,
1826                 "vararg_rank": -1
1827         }
1828 }
1829 {
1830         "name": "_name",
1831         "class_name": "MAttribute",
1832         "full_name": "test_prog::character::Character::_name",
1833         "mdoc": null,
1834         "visibility": "private",
1835         "modifiers": ["private", "var"],
1836         "location": {
1837                 "column_end": 17,
1838                 "column_start": 2,
1839                 "line_end": 35,
1840                 "line_start": 35,
1841                 "file": "test_location"
1842         },
1843         "intro": {
1844                 "full_name": "test_prog$Character$_name"
1845         },
1846         "intro_mclassdef": {
1847                 "full_name": "test_prog$Character"
1848         },
1849         "mpropdefs": [{
1850                 "full_name": "test_prog$Character$_name"
1851         }],
1852         "intro_mclass": {
1853                 "full_name": "test_prog::Character"
1854         },
1855         "mpackage": {
1856                 "full_name": "test_prog"
1857         },
1858         "static_mtype": {
1859                 "full_name": "test_prog::String"
1860         }
1861 }
1862 {
1863         "name": "name",
1864         "class_name": "MMethod",
1865         "full_name": "test_prog::Character::name",
1866         "mdoc": null,
1867         "visibility": "public",
1868         "modifiers": ["fun"],
1869         "location": {
1870                 "column_end": 17,
1871                 "column_start": 2,
1872                 "line_end": 35,
1873                 "line_start": 35,
1874                 "file": "test_location"
1875         },
1876         "intro": {
1877                 "full_name": "test_prog$Character$name"
1878         },
1879         "intro_mclassdef": {
1880                 "full_name": "test_prog$Character"
1881         },
1882         "mpropdefs": [{
1883                 "full_name": "test_prog$Character$name"
1884         }],
1885         "intro_mclass": {
1886                 "full_name": "test_prog::Character"
1887         },
1888         "mpackage": {
1889                 "full_name": "test_prog"
1890         },
1891         "is_init": false,
1892         "msignature": {
1893                 "arity": 0,
1894                 "mparams": [],
1895                 "return_mtype": {
1896                         "full_name": "test_prog::String"
1897                 },
1898                 "vararg_rank": -1
1899         }
1900 }
1901 {
1902         "name": "name=",
1903         "class_name": "MMethod",
1904         "full_name": "test_prog::Character::name=",
1905         "mdoc": null,
1906         "visibility": "protected",
1907         "modifiers": ["protected", "fun"],
1908         "location": {
1909                 "column_end": 17,
1910                 "column_start": 2,
1911                 "line_end": 35,
1912                 "line_start": 35,
1913                 "file": "test_location"
1914         },
1915         "intro": {
1916                 "full_name": "test_prog$Character$name="
1917         },
1918         "intro_mclassdef": {
1919                 "full_name": "test_prog$Character"
1920         },
1921         "mpropdefs": [{
1922                 "full_name": "test_prog$Character$name="
1923         }],
1924         "intro_mclass": {
1925                 "full_name": "test_prog::Character"
1926         },
1927         "mpackage": {
1928                 "full_name": "test_prog"
1929         },
1930         "is_init": false,
1931         "msignature": {
1932                 "arity": 1,
1933                 "mparams": [{
1934                         "is_vararg": false,
1935                         "name": "name",
1936                         "mtype": {
1937                                 "full_name": "test_prog::String"
1938                         }
1939                 }],
1940                 "return_mtype": null,
1941                 "vararg_rank": -1
1942         }
1943 }
1944 {
1945         "name": "_age",
1946         "class_name": "MAttribute",
1947         "full_name": "test_prog::character::Character::_age",
1948         "mdoc": null,
1949         "visibility": "private",
1950         "modifiers": ["private", "var"],
1951         "location": {
1952                 "column_end": 13,
1953                 "column_start": 2,
1954                 "line_end": 36,
1955                 "line_start": 36,
1956                 "file": "test_location"
1957         },
1958         "intro": {
1959                 "full_name": "test_prog$Character$_age"
1960         },
1961         "intro_mclassdef": {
1962                 "full_name": "test_prog$Character"
1963         },
1964         "mpropdefs": [{
1965                 "full_name": "test_prog$Character$_age"
1966         }],
1967         "intro_mclass": {
1968                 "full_name": "test_prog::Character"
1969         },
1970         "mpackage": {
1971                 "full_name": "test_prog"
1972         },
1973         "static_mtype": {
1974                 "full_name": "test_prog::Int"
1975         }
1976 }
1977 {
1978         "name": "age",
1979         "class_name": "MMethod",
1980         "full_name": "test_prog::Character::age",
1981         "mdoc": null,
1982         "visibility": "public",
1983         "modifiers": ["fun"],
1984         "location": {
1985                 "column_end": 13,
1986                 "column_start": 2,
1987                 "line_end": 36,
1988                 "line_start": 36,
1989                 "file": "test_location"
1990         },
1991         "intro": {
1992                 "full_name": "test_prog$Character$age"
1993         },
1994         "intro_mclassdef": {
1995                 "full_name": "test_prog$Character"
1996         },
1997         "mpropdefs": [{
1998                 "full_name": "test_prog$Character$age"
1999         }],
2000         "intro_mclass": {
2001                 "full_name": "test_prog::Character"
2002         },
2003         "mpackage": {
2004                 "full_name": "test_prog"
2005         },
2006         "is_init": false,
2007         "msignature": {
2008                 "arity": 0,
2009                 "mparams": [],
2010                 "return_mtype": {
2011                         "full_name": "test_prog::Int"
2012                 },
2013                 "vararg_rank": -1
2014         }
2015 }
2016 {
2017         "name": "age=",
2018         "class_name": "MMethod",
2019         "full_name": "test_prog::Character::age=",
2020         "mdoc": null,
2021         "visibility": "protected",
2022         "modifiers": ["protected", "fun"],
2023         "location": {
2024                 "column_end": 13,
2025                 "column_start": 2,
2026                 "line_end": 36,
2027                 "line_start": 36,
2028                 "file": "test_location"
2029         },
2030         "intro": {
2031                 "full_name": "test_prog$Character$age="
2032         },
2033         "intro_mclassdef": {
2034                 "full_name": "test_prog$Character"
2035         },
2036         "mpropdefs": [{
2037                 "full_name": "test_prog$Character$age="
2038         }],
2039         "intro_mclass": {
2040                 "full_name": "test_prog::Character"
2041         },
2042         "mpackage": {
2043                 "full_name": "test_prog"
2044         },
2045         "is_init": false,
2046         "msignature": {
2047                 "arity": 1,
2048                 "mparams": [{
2049                         "is_vararg": false,
2050                         "name": "age",
2051                         "mtype": {
2052                                 "full_name": "test_prog::Int"
2053                         }
2054                 }],
2055                 "return_mtype": null,
2056                 "vararg_rank": -1
2057         }
2058 }
2059 {
2060         "name": "_sex",
2061         "class_name": "MAttribute",
2062         "full_name": "test_prog::character::Character::_sex",
2063         "mdoc": null,
2064         "visibility": "private",
2065         "modifiers": ["private", "var"],
2066         "location": {
2067                 "column_end": 14,
2068                 "column_start": 2,
2069                 "line_end": 37,
2070                 "line_start": 37,
2071                 "file": "test_location"
2072         },
2073         "intro": {
2074                 "full_name": "test_prog$Character$_sex"
2075         },
2076         "intro_mclassdef": {
2077                 "full_name": "test_prog$Character"
2078         },
2079         "mpropdefs": [{
2080                 "full_name": "test_prog$Character$_sex"
2081         }],
2082         "intro_mclass": {
2083                 "full_name": "test_prog::Character"
2084         },
2085         "mpackage": {
2086                 "full_name": "test_prog"
2087         },
2088         "static_mtype": {
2089                 "full_name": "test_prog::Bool"
2090         }
2091 }
2092 {
2093         "name": "sex",
2094         "class_name": "MMethod",
2095         "full_name": "test_prog::Character::sex",
2096         "mdoc": null,
2097         "visibility": "public",
2098         "modifiers": ["fun"],
2099         "location": {
2100                 "column_end": 14,
2101                 "column_start": 2,
2102                 "line_end": 37,
2103                 "line_start": 37,
2104                 "file": "test_location"
2105         },
2106         "intro": {
2107                 "full_name": "test_prog$Character$sex"
2108         },
2109         "intro_mclassdef": {
2110                 "full_name": "test_prog$Character"
2111         },
2112         "mpropdefs": [{
2113                 "full_name": "test_prog$Character$sex"
2114         }],
2115         "intro_mclass": {
2116                 "full_name": "test_prog::Character"
2117         },
2118         "mpackage": {
2119                 "full_name": "test_prog"
2120         },
2121         "is_init": false,
2122         "msignature": {
2123                 "arity": 0,
2124                 "mparams": [],
2125                 "return_mtype": {
2126                         "full_name": "test_prog::Bool"
2127                 },
2128                 "vararg_rank": -1
2129         }
2130 }
2131 {
2132         "name": "sex=",
2133         "class_name": "MMethod",
2134         "full_name": "test_prog::Character::sex=",
2135         "mdoc": null,
2136         "visibility": "protected",
2137         "modifiers": ["protected", "fun"],
2138         "location": {
2139                 "column_end": 14,
2140                 "column_start": 2,
2141                 "line_end": 37,
2142                 "line_start": 37,
2143                 "file": "test_location"
2144         },
2145         "intro": {
2146                 "full_name": "test_prog$Character$sex="
2147         },
2148         "intro_mclassdef": {
2149                 "full_name": "test_prog$Character"
2150         },
2151         "mpropdefs": [{
2152                 "full_name": "test_prog$Character$sex="
2153         }],
2154         "intro_mclass": {
2155                 "full_name": "test_prog::Character"
2156         },
2157         "mpackage": {
2158                 "full_name": "test_prog"
2159         },
2160         "is_init": false,
2161         "msignature": {
2162                 "arity": 1,
2163                 "mparams": [{
2164                         "is_vararg": false,
2165                         "name": "sex",
2166                         "mtype": {
2167                                 "full_name": "test_prog::Bool"
2168                         }
2169                 }],
2170                 "return_mtype": null,
2171                 "vararg_rank": -1
2172         }
2173 }
2174 {
2175         "name": "total_strengh",
2176         "class_name": "MMethod",
2177         "full_name": "test_prog::Character::total_strengh",
2178         "mdoc": {
2179                 "content": "The actual strength of the character.\n\nReturns `race.base_strength + career.strength_bonus` or just `race.base_strength` is unemployed.",
2180                 "location": {
2181                         "column_end": 0,
2182                         "column_start": 2,
2183                         "line_end": 42,
2184                         "line_start": 39,
2185                         "file": "test_location"
2186                 }
2187         },
2188         "visibility": "public",
2189         "modifiers": ["fun"],
2190         "location": {
2191                 "column_end": 4,
2192                 "column_start": 2,
2193                 "line_end": 45,
2194                 "line_start": 39,
2195                 "file": "test_location"
2196         },
2197         "intro": {
2198                 "full_name": "test_prog$Character$total_strengh"
2199         },
2200         "intro_mclassdef": {
2201                 "full_name": "test_prog$Character"
2202         },
2203         "mpropdefs": [{
2204                 "full_name": "test_prog$Character$total_strengh"
2205         }],
2206         "intro_mclass": {
2207                 "full_name": "test_prog::Character"
2208         },
2209         "mpackage": {
2210                 "full_name": "test_prog"
2211         },
2212         "is_init": false,
2213         "msignature": {
2214                 "arity": 0,
2215                 "mparams": [],
2216                 "return_mtype": {
2217                         "full_name": "test_prog::Int"
2218                 },
2219                 "vararg_rank": -1
2220         }
2221 }
2222 {
2223         "name": "total_endurance",
2224         "class_name": "MMethod",
2225         "full_name": "test_prog::Character::total_endurance",
2226         "mdoc": {
2227                 "content": "The actual endurance of the character.",
2228                 "location": {
2229                         "column_end": 0,
2230                         "column_start": 2,
2231                         "line_end": 48,
2232                         "line_start": 47,
2233                         "file": "test_location"
2234                 }
2235         },
2236         "visibility": "public",
2237         "modifiers": ["fun"],
2238         "location": {
2239                 "column_end": 4,
2240                 "column_start": 2,
2241                 "line_end": 51,
2242                 "line_start": 47,
2243                 "file": "test_location"
2244         },
2245         "intro": {
2246                 "full_name": "test_prog$Character$total_endurance"
2247         },
2248         "intro_mclassdef": {
2249                 "full_name": "test_prog$Character"
2250         },
2251         "mpropdefs": [{
2252                 "full_name": "test_prog$Character$total_endurance"
2253         }],
2254         "intro_mclass": {
2255                 "full_name": "test_prog::Character"
2256         },
2257         "mpackage": {
2258                 "full_name": "test_prog"
2259         },
2260         "is_init": false,
2261         "msignature": {
2262                 "arity": 0,
2263                 "mparams": [],
2264                 "return_mtype": {
2265                         "full_name": "test_prog::Int"
2266                 },
2267                 "vararg_rank": -1
2268         }
2269 }
2270 {
2271         "name": "total_intelligence",
2272         "class_name": "MMethod",
2273         "full_name": "test_prog::Character::total_intelligence",
2274         "mdoc": {
2275                 "content": "The acutal intelligence of the character.",
2276                 "location": {
2277                         "column_end": 0,
2278                         "column_start": 2,
2279                         "line_end": 54,
2280                         "line_start": 53,
2281                         "file": "test_location"
2282                 }
2283         },
2284         "visibility": "public",
2285         "modifiers": ["fun"],
2286         "location": {
2287                 "column_end": 4,
2288                 "column_start": 2,
2289                 "line_end": 57,
2290                 "line_start": 53,
2291                 "file": "test_location"
2292         },
2293         "intro": {
2294                 "full_name": "test_prog$Character$total_intelligence"
2295         },
2296         "intro_mclassdef": {
2297                 "full_name": "test_prog$Character"
2298         },
2299         "mpropdefs": [{
2300                 "full_name": "test_prog$Character$total_intelligence"
2301         }],
2302         "intro_mclass": {
2303                 "full_name": "test_prog::Character"
2304         },
2305         "mpackage": {
2306                 "full_name": "test_prog"
2307         },
2308         "is_init": false,
2309         "msignature": {
2310                 "arity": 0,
2311                 "mparams": [],
2312                 "return_mtype": {
2313                         "full_name": "test_prog::Int"
2314                 },
2315                 "vararg_rank": -1
2316         }
2317 }
2318 {
2319         "name": "max_health",
2320         "class_name": "MMethod",
2321         "full_name": "test_prog::Character::max_health",
2322         "mdoc": {
2323                 "content": "Maximum health of the character.\n\nBased on `total endurance * 10`.",
2324                 "location": {
2325                         "column_end": 0,
2326                         "column_start": 2,
2327                         "line_end": 62,
2328                         "line_start": 59,
2329                         "file": "test_location"
2330                 }
2331         },
2332         "visibility": "public",
2333         "modifiers": ["fun"],
2334         "location": {
2335                 "column_end": 51,
2336                 "column_start": 2,
2337                 "line_end": 62,
2338                 "line_start": 59,
2339                 "file": "test_location"
2340         },
2341         "intro": {
2342                 "full_name": "test_prog$Character$max_health"
2343         },
2344         "intro_mclassdef": {
2345                 "full_name": "test_prog$Character"
2346         },
2347         "mpropdefs": [{
2348                 "full_name": "test_prog$Character$max_health"
2349         }],
2350         "intro_mclass": {
2351                 "full_name": "test_prog::Character"
2352         },
2353         "mpackage": {
2354                 "full_name": "test_prog"
2355         },
2356         "is_init": false,
2357         "msignature": {
2358                 "arity": 0,
2359                 "mparams": [],
2360                 "return_mtype": {
2361                         "full_name": "test_prog::Int"
2362                 },
2363                 "vararg_rank": -1
2364         }
2365 }
2366 {
2367         "name": "_health",
2368         "class_name": "MAttribute",
2369         "full_name": "test_prog::character::Character::_health",
2370         "mdoc": {
2371                 "content": "The current `health` of the character.\n\nStarts at `max_health`.",
2372                 "location": {
2373                         "column_end": 0,
2374                         "column_start": 2,
2375                         "line_end": 67,
2376                         "line_start": 64,
2377                         "file": "test_location"
2378                 }
2379         },
2380         "visibility": "private",
2381         "modifiers": ["private", "var"],
2382         "location": {
2383                 "column_end": 29,
2384                 "column_start": 2,
2385                 "line_end": 67,
2386                 "line_start": 64,
2387                 "file": "test_location"
2388         },
2389         "intro": {
2390                 "full_name": "test_prog$Character$_health"
2391         },
2392         "intro_mclassdef": {
2393                 "full_name": "test_prog$Character"
2394         },
2395         "mpropdefs": [{
2396                 "full_name": "test_prog$Character$_health"
2397         }],
2398         "intro_mclass": {
2399                 "full_name": "test_prog::Character"
2400         },
2401         "mpackage": {
2402                 "full_name": "test_prog"
2403         },
2404         "static_mtype": {
2405                 "full_name": "test_prog::Int"
2406         }
2407 }
2408 {
2409         "name": "health",
2410         "class_name": "MMethod",
2411         "full_name": "test_prog::Character::health",
2412         "mdoc": {
2413                 "content": "The current `health` of the character.\n\nStarts at `max_health`.",
2414                 "location": {
2415                         "column_end": 0,
2416                         "column_start": 2,
2417                         "line_end": 67,
2418                         "line_start": 64,
2419                         "file": "test_location"
2420                 }
2421         },
2422         "visibility": "public",
2423         "modifiers": ["fun"],
2424         "location": {
2425                 "column_end": 29,
2426                 "column_start": 2,
2427                 "line_end": 67,
2428                 "line_start": 64,
2429                 "file": "test_location"
2430         },
2431         "intro": {
2432                 "full_name": "test_prog$Character$health"
2433         },
2434         "intro_mclassdef": {
2435                 "full_name": "test_prog$Character"
2436         },
2437         "mpropdefs": [{
2438                 "full_name": "test_prog$Character$health"
2439         }],
2440         "intro_mclass": {
2441                 "full_name": "test_prog::Character"
2442         },
2443         "mpackage": {
2444                 "full_name": "test_prog"
2445         },
2446         "is_init": false,
2447         "msignature": {
2448                 "arity": 0,
2449                 "mparams": [],
2450                 "return_mtype": {
2451                         "full_name": "test_prog::Int"
2452                 },
2453                 "vararg_rank": -1
2454         }
2455 }
2456 {
2457         "name": "health=",
2458         "class_name": "MMethod",
2459         "full_name": "test_prog::Character::health=",
2460         "mdoc": {
2461                 "content": "The current `health` of the character.\n\nStarts at `max_health`.",
2462                 "location": {
2463                         "column_end": 0,
2464                         "column_start": 2,
2465                         "line_end": 67,
2466                         "line_start": 64,
2467                         "file": "test_location"
2468                 }
2469         },
2470         "visibility": "protected",
2471         "modifiers": ["protected", "fun"],
2472         "location": {
2473                 "column_end": 29,
2474                 "column_start": 2,
2475                 "line_end": 67,
2476                 "line_start": 64,
2477                 "file": "test_location"
2478         },
2479         "intro": {
2480                 "full_name": "test_prog$Character$health="
2481         },
2482         "intro_mclassdef": {
2483                 "full_name": "test_prog$Character"
2484         },
2485         "mpropdefs": [{
2486                 "full_name": "test_prog$Character$health="
2487         }],
2488         "intro_mclass": {
2489                 "full_name": "test_prog::Character"
2490         },
2491         "mpackage": {
2492                 "full_name": "test_prog"
2493         },
2494         "is_init": false,
2495         "msignature": {
2496                 "arity": 1,
2497                 "mparams": [{
2498                         "is_vararg": false,
2499                         "name": "health",
2500                         "mtype": {
2501                                 "full_name": "test_prog::Int"
2502                         }
2503                 }],
2504                 "return_mtype": null,
2505                 "vararg_rank": -1
2506         }
2507 }
2508 {
2509         "name": "dps",
2510         "class_name": "MMethod",
2511         "full_name": "test_prog::Weapon::dps",
2512         "mdoc": {
2513                 "content": "Damage per second inflicted by this weapon.",
2514                 "location": {
2515                         "column_end": 0,
2516                         "column_start": 2,
2517                         "line_end": 23,
2518                         "line_start": 22,
2519                         "file": "test_location"
2520                 }
2521         },
2522         "visibility": "public",
2523         "modifiers": ["abstract", "fun"],
2524         "location": {
2525                 "column_end": 27,
2526                 "column_start": 2,
2527                 "line_end": 23,
2528                 "line_start": 22,
2529                 "file": "test_location"
2530         },
2531         "intro": {
2532                 "full_name": "test_prog$Weapon$dps"
2533         },
2534         "intro_mclassdef": {
2535                 "full_name": "test_prog$Weapon"
2536         },
2537         "mpropdefs": [{
2538                 "full_name": "test_prog$Weapon$dps"
2539         }, {
2540                 "full_name": "test_prog::combat$Dwarf$Weapon::dps"
2541         }],
2542         "intro_mclass": {
2543                 "full_name": "test_prog::Weapon"
2544         },
2545         "mpackage": {
2546                 "full_name": "test_prog"
2547         },
2548         "is_init": false,
2549         "msignature": {
2550                 "arity": 0,
2551                 "mparams": [],
2552                 "return_mtype": {
2553                         "full_name": "test_prog::Float"
2554                 },
2555                 "vararg_rank": -1
2556         }
2557 }
2558 {
2559         "name": "hit_points",
2560         "class_name": "MMethod",
2561         "full_name": "test_prog::Combatable::hit_points",
2562         "mdoc": null,
2563         "visibility": "public",
2564         "modifiers": ["abstract", "fun"],
2565         "location": {
2566                 "column_end": 32,
2567                 "column_start": 2,
2568                 "line_end": 32,
2569                 "line_start": 32,
2570                 "file": "test_location"
2571         },
2572         "intro": {
2573                 "full_name": "test_prog$Combatable$hit_points"
2574         },
2575         "intro_mclassdef": {
2576                 "full_name": "test_prog$Combatable"
2577         },
2578         "mpropdefs": [{
2579                 "full_name": "test_prog$Combatable$hit_points"
2580         }, {
2581                 "full_name": "test_prog::combat$Character$Combatable::hit_points"
2582         }],
2583         "intro_mclass": {
2584                 "full_name": "test_prog::Combatable"
2585         },
2586         "mpackage": {
2587                 "full_name": "test_prog"
2588         },
2589         "is_init": false,
2590         "msignature": {
2591                 "arity": 0,
2592                 "mparams": [],
2593                 "return_mtype": {
2594                         "full_name": "test_prog::Int"
2595                 },
2596                 "vararg_rank": -1
2597         }
2598 }
2599 {
2600         "name": "attack",
2601         "class_name": "MMethod",
2602         "full_name": "test_prog::Combatable::attack",
2603         "mdoc": {
2604                 "content": "A `Combatable` can attack a `target` that is also a `Combatable`.\n\nAttack the `target` using `wepaon` and returns the number of inflicted hit points.",
2605                 "location": {
2606                         "column_end": 0,
2607                         "column_start": 2,
2608                         "line_end": 37,
2609                         "line_start": 34,
2610                         "file": "test_location"
2611                 }
2612         },
2613         "visibility": "public",
2614         "modifiers": ["abstract", "fun"],
2615         "location": {
2616                 "column_end": 64,
2617                 "column_start": 2,
2618                 "line_end": 37,
2619                 "line_start": 34,
2620                 "file": "test_location"
2621         },
2622         "intro": {
2623                 "full_name": "test_prog$Combatable$attack"
2624         },
2625         "intro_mclassdef": {
2626                 "full_name": "test_prog$Combatable"
2627         },
2628         "mpropdefs": [{
2629                 "full_name": "test_prog$Combatable$attack"
2630         }],
2631         "intro_mclass": {
2632                 "full_name": "test_prog::Combatable"
2633         },
2634         "mpackage": {
2635                 "full_name": "test_prog"
2636         },
2637         "is_init": false,
2638         "msignature": {
2639                 "arity": 2,
2640                 "mparams": [{
2641                         "is_vararg": false,
2642                         "name": "target",
2643                         "mtype": {
2644                                 "full_name": "test_prog::Combatable"
2645                         }
2646                 }, {
2647                         "is_vararg": false,
2648                         "name": "weapon",
2649                         "mtype": {
2650                                 "full_name": "test_prog::Weapon"
2651                         }
2652                 }],
2653                 "return_mtype": {
2654                         "full_name": "test_prog::Int"
2655                 },
2656                 "vararg_rank": -1
2657         }
2658 }
2659 {
2660         "name": "direct_attack",
2661         "class_name": "MMethod",
2662         "full_name": "test_prog::Combatable::direct_attack",
2663         "mdoc": {
2664                 "content": "Like `attack` but cannot be defended.",
2665                 "location": {
2666                         "column_end": 0,
2667                         "column_start": 2,
2668                         "line_end": 40,
2669                         "line_start": 39,
2670                         "file": "test_location"
2671                 }
2672         },
2673         "visibility": "public",
2674         "modifiers": ["abstract", "fun"],
2675         "location": {
2676                 "column_end": 71,
2677                 "column_start": 2,
2678                 "line_end": 40,
2679                 "line_start": 39,
2680                 "file": "test_location"
2681         },
2682         "intro": {
2683                 "full_name": "test_prog$Combatable$direct_attack"
2684         },
2685         "intro_mclassdef": {
2686                 "full_name": "test_prog$Combatable"
2687         },
2688         "mpropdefs": [{
2689                 "full_name": "test_prog$Combatable$direct_attack"
2690         }],
2691         "intro_mclass": {
2692                 "full_name": "test_prog::Combatable"
2693         },
2694         "mpackage": {
2695                 "full_name": "test_prog"
2696         },
2697         "is_init": false,
2698         "msignature": {
2699                 "arity": 2,
2700                 "mparams": [{
2701                         "is_vararg": false,
2702                         "name": "target",
2703                         "mtype": {
2704                                 "full_name": "test_prog::Combatable"
2705                         }
2706                 }, {
2707                         "is_vararg": false,
2708                         "name": "weapon",
2709                         "mtype": {
2710                                 "full_name": "test_prog::Weapon"
2711                         }
2712                 }],
2713                 "return_mtype": {
2714                         "full_name": "test_prog::Int"
2715                 },
2716                 "vararg_rank": -1
2717         }
2718 }
2719 {
2720         "name": "defend",
2721         "class_name": "MMethod",
2722         "full_name": "test_prog::Combatable::defend",
2723         "mdoc": {
2724                 "content": "`Combatable` can defend against attacks.\n\nDefends against a number of received hit points and return the number of pared hit points.\n\n@param hit: damage received.",
2725                 "location": {
2726                         "column_end": 0,
2727                         "column_start": 2,
2728                         "line_end": 47,
2729                         "line_start": 42,
2730                         "file": "test_location"
2731                 }
2732         },
2733         "visibility": "public",
2734         "modifiers": ["abstract", "fun"],
2735         "location": {
2736                 "column_end": 38,
2737                 "column_start": 2,
2738                 "line_end": 47,
2739                 "line_start": 42,
2740                 "file": "test_location"
2741         },
2742         "intro": {
2743                 "full_name": "test_prog$Combatable$defend"
2744         },
2745         "intro_mclassdef": {
2746                 "full_name": "test_prog$Combatable"
2747         },
2748         "mpropdefs": [{
2749                 "full_name": "test_prog$Combatable$defend"
2750         }],
2751         "intro_mclass": {
2752                 "full_name": "test_prog::Combatable"
2753         },
2754         "mpackage": {
2755                 "full_name": "test_prog"
2756         },
2757         "is_init": false,
2758         "msignature": {
2759                 "arity": 1,
2760                 "mparams": [{
2761                         "is_vararg": false,
2762                         "name": "hit",
2763                         "mtype": {
2764                                 "full_name": "test_prog::Int"
2765                         }
2766                 }],
2767                 "return_mtype": {
2768                         "full_name": "test_prog::Int"
2769                 },
2770                 "vararg_rank": -1
2771         }
2772 }
2773 {
2774         "name": "is_dead",
2775         "class_name": "MMethod",
2776         "full_name": "test_prog::Combatable::is_dead",
2777         "mdoc": {
2778                 "content": "Is the character still have hit_points?",
2779                 "location": {
2780                         "column_end": 0,
2781                         "column_start": 2,
2782                         "line_end": 50,
2783                         "line_start": 49,
2784                         "file": "test_location"
2785                 }
2786         },
2787         "visibility": "public",
2788         "modifiers": ["fun"],
2789         "location": {
2790                 "column_end": 43,
2791                 "column_start": 2,
2792                 "line_end": 50,
2793                 "line_start": 49,
2794                 "file": "test_location"
2795         },
2796         "intro": {
2797                 "full_name": "test_prog$Combatable$is_dead"
2798         },
2799         "intro_mclassdef": {
2800                 "full_name": "test_prog$Combatable"
2801         },
2802         "mpropdefs": [{
2803                 "full_name": "test_prog$Combatable$is_dead"
2804         }],
2805         "intro_mclass": {
2806                 "full_name": "test_prog::Combatable"
2807         },
2808         "mpackage": {
2809                 "full_name": "test_prog"
2810         },
2811         "is_init": false,
2812         "msignature": {
2813                 "arity": 0,
2814                 "mparams": [],
2815                 "return_mtype": {
2816                         "full_name": "test_prog::Bool"
2817                 },
2818                 "vararg_rank": -1
2819         }
2820 }
2821 {
2822         "name": "player_characters",
2823         "class_name": "MMethod",
2824         "full_name": "test_prog::Game::player_characters",
2825         "mdoc": {
2826                 "content": "Characters played by human players.",
2827                 "location": {
2828                         "column_end": 0,
2829                         "column_start": 2,
2830                         "line_end": 26,
2831                         "line_start": 25,
2832                         "file": "test_location"
2833                 }
2834         },
2835         "visibility": "public",
2836         "modifiers": ["abstract", "fun"],
2837         "location": {
2838                 "column_end": 51,
2839                 "column_start": 2,
2840                 "line_end": 26,
2841                 "line_start": 25,
2842                 "file": "test_location"
2843         },
2844         "intro": {
2845                 "full_name": "test_prog$Game$player_characters"
2846         },
2847         "intro_mclassdef": {
2848                 "full_name": "test_prog$Game"
2849         },
2850         "mpropdefs": [{
2851                 "full_name": "test_prog$Game$player_characters"
2852         }],
2853         "intro_mclass": {
2854                 "full_name": "test_prog::Game"
2855         },
2856         "mpackage": {
2857                 "full_name": "test_prog"
2858         },
2859         "is_init": false,
2860         "msignature": {
2861                 "arity": 0,
2862                 "mparams": [],
2863                 "return_mtype": {
2864                         "full_name": "test_prog::List[test_prog::Character]"
2865                 },
2866                 "vararg_rank": -1
2867         }
2868 }
2869 {
2870         "name": "computer_characters",
2871         "class_name": "MMethod",
2872         "full_name": "test_prog::Game::computer_characters",
2873         "mdoc": {
2874                 "content": "Characters players by computer.",
2875                 "location": {
2876                         "column_end": 0,
2877                         "column_start": 2,
2878                         "line_end": 29,
2879                         "line_start": 28,
2880                         "file": "test_location"
2881                 }
2882         },
2883         "visibility": "public",
2884         "modifiers": ["abstract", "fun"],
2885         "location": {
2886                 "column_end": 53,
2887                 "column_start": 2,
2888                 "line_end": 29,
2889                 "line_start": 28,
2890                 "file": "test_location"
2891         },
2892         "intro": {
2893                 "full_name": "test_prog$Game$computer_characters"
2894         },
2895         "intro_mclassdef": {
2896                 "full_name": "test_prog$Game"
2897         },
2898         "mpropdefs": [{
2899                 "full_name": "test_prog$Game$computer_characters"
2900         }],
2901         "intro_mclass": {
2902                 "full_name": "test_prog::Game"
2903         },
2904         "mpackage": {
2905                 "full_name": "test_prog"
2906         },
2907         "is_init": false,
2908         "msignature": {
2909                 "arity": 0,
2910                 "mparams": [],
2911                 "return_mtype": {
2912                         "full_name": "test_prog::List[test_prog::Character]"
2913                 },
2914                 "vararg_rank": -1
2915         }
2916 }
2917 {
2918         "name": "start_game",
2919         "class_name": "MMethod",
2920         "full_name": "test_prog::Game::start_game",
2921         "mdoc": {
2922                 "content": "Start the game.\n\nYou have to implement that method!",
2923                 "location": {
2924                         "column_end": 0,
2925                         "column_start": 2,
2926                         "line_end": 34,
2927                         "line_start": 31,
2928                         "file": "test_location"
2929                 }
2930         },
2931         "visibility": "public",
2932         "modifiers": ["abstract", "fun"],
2933         "location": {
2934                 "column_end": 27,
2935                 "column_start": 2,
2936                 "line_end": 34,
2937                 "line_start": 31,
2938                 "file": "test_location"
2939         },
2940         "intro": {
2941                 "full_name": "test_prog$Game$start_game"
2942         },
2943         "intro_mclassdef": {
2944                 "full_name": "test_prog$Game"
2945         },
2946         "mpropdefs": [{
2947                 "full_name": "test_prog$Game$start_game"
2948         }],
2949         "intro_mclass": {
2950                 "full_name": "test_prog::Game"
2951         },
2952         "mpackage": {
2953                 "full_name": "test_prog"
2954         },
2955         "is_init": false,
2956         "msignature": {
2957                 "arity": 0,
2958                 "mparams": [],
2959                 "return_mtype": null,
2960                 "vararg_rank": -1
2961         }
2962 }
2963 {
2964         "name": "pause_game",
2965         "class_name": "MMethod",
2966         "full_name": "test_prog::Game::pause_game",
2967         "mdoc": {
2968                 "content": "Pause the game.\n\nYou have to implement that method!",
2969                 "location": {
2970                         "column_end": 0,
2971                         "column_start": 2,
2972                         "line_end": 39,
2973                         "line_start": 36,
2974                         "file": "test_location"
2975                 }
2976         },
2977         "visibility": "public",
2978         "modifiers": ["abstract", "fun"],
2979         "location": {
2980                 "column_end": 27,
2981                 "column_start": 2,
2982                 "line_end": 39,
2983                 "line_start": 36,
2984                 "file": "test_location"
2985         },
2986         "intro": {
2987                 "full_name": "test_prog$Game$pause_game"
2988         },
2989         "intro_mclassdef": {
2990                 "full_name": "test_prog$Game"
2991         },
2992         "mpropdefs": [{
2993                 "full_name": "test_prog$Game$pause_game"
2994         }],
2995         "intro_mclass": {
2996                 "full_name": "test_prog::Game"
2997         },
2998         "mpackage": {
2999                 "full_name": "test_prog"
3000         },
3001         "is_init": false,
3002         "msignature": {
3003                 "arity": 0,
3004                 "mparams": [],
3005                 "return_mtype": null,
3006                 "vararg_rank": -1
3007         }
3008 }
3009 {
3010         "name": "stop_game",
3011         "class_name": "MMethod",
3012         "full_name": "test_prog::Game::stop_game",
3013         "mdoc": {
3014                 "content": "Stop the game.\n\nYou have to implement that method!",
3015                 "location": {
3016                         "column_end": 0,
3017                         "column_start": 2,
3018                         "line_end": 44,
3019                         "line_start": 41,
3020                         "file": "test_location"
3021                 }
3022         },
3023         "visibility": "public",
3024         "modifiers": ["abstract", "fun"],
3025         "location": {
3026                 "column_end": 26,
3027                 "column_start": 2,
3028                 "line_end": 44,
3029                 "line_start": 41,
3030                 "file": "test_location"
3031         },
3032         "intro": {
3033                 "full_name": "test_prog$Game$stop_game"
3034         },
3035         "intro_mclassdef": {
3036                 "full_name": "test_prog$Game"
3037         },
3038         "mpropdefs": [{
3039                 "full_name": "test_prog$Game$stop_game"
3040         }],
3041         "intro_mclass": {
3042                 "full_name": "test_prog::Game"
3043         },
3044         "mpackage": {
3045                 "full_name": "test_prog"
3046         },
3047         "is_init": false,
3048         "msignature": {
3049                 "arity": 0,
3050                 "mparams": [],
3051                 "return_mtype": null,
3052                 "vararg_rank": -1
3053         }
3054 }
3055 {
3056         "name": "start",
3057         "class_name": "MMethod",
3058         "full_name": "test_prog::Starter::start",
3059         "mdoc": null,
3060         "visibility": "public",
3061         "modifiers": ["fun"],
3062         "location": {
3063                 "column_end": 17,
3064                 "column_start": 2,
3065                 "line_end": 22,
3066                 "line_start": 22,
3067                 "file": "test_location"
3068         },
3069         "intro": {
3070                 "full_name": "test_prog$Starter$start"
3071         },
3072         "intro_mclassdef": {
3073                 "full_name": "test_prog$Starter"
3074         },
3075         "mpropdefs": [{
3076                 "full_name": "test_prog$Starter$start"
3077         }],
3078         "intro_mclass": {
3079                 "full_name": "test_prog::Starter"
3080         },
3081         "mpackage": {
3082                 "full_name": "test_prog"
3083         },
3084         "is_init": false,
3085         "msignature": {
3086                 "arity": 0,
3087                 "mparams": [],
3088                 "return_mtype": null,
3089                 "vararg_rank": -1
3090         }
3091 }
3092 {
3093         "name": "main",
3094         "class_name": "MMethod",
3095         "full_name": "test_prog::Sys::main",
3096         "mdoc": null,
3097         "visibility": "public",
3098         "modifiers": ["fun"],
3099         "location": {
3100                 "column_end": 13,
3101                 "column_start": 1,
3102                 "line_end": 26,
3103                 "line_start": 25,
3104                 "file": "test_location"
3105         },
3106         "intro": {
3107                 "full_name": "test_prog$Sys$main"
3108         },
3109         "intro_mclassdef": {
3110                 "full_name": "test_prog$Sys"
3111         },
3112         "mpropdefs": [{
3113                 "full_name": "test_prog$Sys$main"
3114         }],
3115         "intro_mclass": {
3116                 "full_name": "test_prog::Sys"
3117         },
3118         "mpackage": {
3119                 "full_name": "test_prog"
3120         },
3121         "is_init": false,
3122         "msignature": {
3123                 "arity": 0,
3124                 "mparams": [],
3125                 "return_mtype": null,
3126                 "vararg_rank": -1
3127         }
3128 }