mark may be missed when eval() is called
forgot to remove abort()
re-apply 3644f1b since we have fixed GC bug