summaryrefslogtreecommitdiff
path: root/lib/supple/objects.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/supple/objects.lua')
-rw-r--r--lib/supple/objects.lua27
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,
}