This is caused by the non-lazy initialization of a cache object in ASTNode that uses a List object for the cache. This causes an initialization loop.
A workaround for this issue is to add a new subtype of ASTNode, and move the attribute to the new subtype. Then make verything else that extends ASTNode extend the new type instead. This has the added advantage of removing the attributes from Opt and List.
The List proxy object does not need to be a list, and it can be lazily initialized if wrapped in an AtomicReference in the concurrent mode.
See issue #112 for more discussion about the NTA proxy objects.