diff options
Diffstat (limited to 'lib/supple/objects.lua')
-rw-r--r-- | lib/supple/objects.lua | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/supple/objects.lua b/lib/supple/objects.lua index 5aa1ec7..9220502 100644 --- a/lib/supple/objects.lua +++ b/lib/supple/objects.lua @@ -56,6 +56,19 @@ local integral = { number = true, } +local function new_tag(special_tag) + local retstr = special_tag + if not retstr then + if not my_name:match("%%d") then + retstr = ("%s:%d"):format(my_name, my_counter) + else + retstr = my_name:format(my_counter) + end + my_counter = my_counter + 1 + end + return retstr +end + local function give(obj, special_tag) -- If the object is integral, return it directly if integral[type(obj)] then @@ -74,9 +87,7 @@ local function give(obj, special_tag) return { tag = tag } end -- otherwise wrap it freshly for us and return that. - local tag = (special_tag and special_tag or - ("%s:%d"):format(my_name, my_counter)) - my_counter = my_counter + 1 + local tag = new_tag(special_tag) local expn = capi.explain(obj, tag) my_objects_by_obj[obj] = tag my_objects_by_tag[tag] = obj @@ -135,6 +146,15 @@ local function forget_mine(tag) my_objects_by_obj[obj] = nil end +local function find_tag(obj) + if my_objects_by_obj[obj] then + return "my", my_objects_by_obj[obj] + end + if their_objects_by_obj[obj] then + return "their", their_objects_by_obj[obj] + end +end + return { set_name = set_name, get_name = get_name, @@ -143,4 +163,5 @@ return { receive = receive, clean_down = clean_down, forget_mine = forget_mine, + find_tag = find_tag, } |