Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class
- {
- New()
- {
- .classTable = Object()
- .subTable = Object()
- .staticIndex = 0
- .fieldIndex = 0
- .argIndex = 0
- .varIndex =0
- }
- newSubRoutine()
- {
- .subTable = Object()
- .argIndex = 0
- .varIndex =0
- }
- Add(name,type,kind)
- {
- switch kind
- {
- case "static" :
- row = Object(type,kind,.staticIndex++)
- .classTable().Add(Object(row,name))
- case "field" :
- row = Object(type,kind,.fieldIndex++)
- .classTable().Add(Object(row,name))
- case "arg" :
- row = Object(type,kind,.argIndex++)
- .subTable().Add(Object(row,name))
- case "var" :
- row = Object(type,kind,.varIndex++)
- .subTable().Add(Object(row,name))
- }
- }
- Count(kind)
- {
- switch kind
- {
- case "static":
- return .staticIndex
- case "field":
- return .fieldIndex
- case "arg":
- return .argIndex
- case "var" :
- return .varIndex
- }
- }
- Kind(name)
- {
- if .subTable.Has?(name)
- return .subTable.Find(name)[1]
- else
- return .classTable.Find(name)[1]
- }
- Type(name)
- {
- if .subTable.Has?(name)
- return .subTable.Find(name)[0]
- else
- return .classTable.Find(name)[0]
- }
- Index(name)
- {
- if .subTable.Has?(name)
- return .subTable.Find(name)[2]
- else
- return .classTable.Find(name)[2]
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement