func MessThingIndex(state *lua.State) int { log.Println("HEY WE MADE IT") printStackTypes(state) state.GetMetaTable(1) state.LGetMetaTable(ThingMetaTableName) isThing := state.RawEqual(-1, -2) state.Pop(2) if !isThing { log.Println("!!! OMG ARG #1 IS NOT A MESS.THING !!!") } fieldName := state.CheckString(2) log.Println("Arg #2 checks out, it's a string") thing := checkThing(state, 1) log.Println("So we're tryin'a look up", fieldName, "on thing", thing.Id) if member, ok := MessThingMembers[fieldName]; ok { return member(state, thing) } // That wasn't one of our members, so look it up in our Table. if data, ok := thing.Table[fieldName]; ok { // TODO: instead of pushing a whole map if the script asks for one, maybe we should use another kind of userdata that tracks the name & can access its submembers until the script asks for the leaf (or a non-existent branch)? pushValue(state, data) return 1 } // uh... I guess we didn't do anything, so...? return 0 }