Made semantic analyzer be called even for cached ASTs (since underlying runtime may change), made identifiers() use semantic analyzer instead of interpreter