Closed
Description
The type resolver crasher when parsing recursive types that reference each other (note no error is thrown if the recursive types are merged into one).
Stack trace:
RangeError: Maximum call stack size exceeded
at Map.has (<anonymous>)
at Qn.getMember (node_modules/assemblyscript/src/program.ts:2993:28)
at Qn.getMember (node_modules/assemblyscript/src/program.ts:3252:25)
at Qn.lookup (node_modules/assemblyscript/src/program.ts:3265:24)
at mt.lookup (node_modules/assemblyscript/src/program.ts:2999:24)
at qn.resolveTypeName (node_modules/assemblyscript/src/resolver.ts:589:30)
at qn.resolveNamedType (node_modules/assemblyscript/src/resolver.ts:216:24)
at qn.resolveType (node_modules/assemblyscript/src/resolver.ts:154:21)
at qn.resolveNamedType (node_modules/assemblyscript/src/resolver.ts:321:23)
at qn.resolveType (node_modules/assemblyscript/src/resolver.ts:154:21)
Code that crashes the resolver:
type RecMethod = () => RecReturn;
type RecReturn = RecMethod | null;
const test: RecMethod = () => null;
Equivalent code that doesn't crash the resolver (throws a AS100: Not implemented: Recursion in type aliases):
type RecMethod = () => RecMethod | null;
type RecReturn = returnof<RecMethod>;
const test: RecMethod = () => null;
Expected result: the resolver doesn't crash in both cases, and instead outputs the same (?) error (or at least handles the error in some way).