It appears that Ada has the entire source file in memory: The Source_Loc is an actual index in a buffer. That gives you some flexibility in how you manage source_locations. It has all the source *files* in memory.