-
-
Notifications
You must be signed in to change notification settings - Fork 669
Closed
Labels
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).