Refactor location, filename, and klabel attributes

**please review**
`Source` ca be an interface, no need to restrict its usage to inheritance