Skip to content

Resolver crasher on recursive types #2633

Closed
@N1ark

Description

@N1ark

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions