Software /
code /
prosody
Comparison
util/stanza.lua @ 12406:a3ddf3f42212
util.stanza: Use table.move in clone
Code reduction, potentially a performance gain.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 18 Mar 2022 16:39:48 +0100 |
parent | 12140:1a4c61253932 |
child | 12407:b6b01724e04f |
comparison
equal
deleted
inserted
replaced
12405:308ed64dc69b | 12406:a3ddf3f42212 |
---|---|
19 local ipairs = ipairs; | 19 local ipairs = ipairs; |
20 local type = type; | 20 local type = type; |
21 local s_gsub = string.gsub; | 21 local s_gsub = string.gsub; |
22 local s_sub = string.sub; | 22 local s_sub = string.sub; |
23 local s_find = string.find; | 23 local s_find = string.find; |
24 local t_move = table.move or require "util.table".move; | |
24 | 25 |
25 local valid_utf8 = require "util.encodings".utf8.valid; | 26 local valid_utf8 = require "util.encodings".utf8.valid; |
26 | 27 |
27 local do_pretty_printing, termcolours = pcall(require, "util.termcolours"); | 28 local do_pretty_printing, termcolours = pcall(require, "util.termcolours"); |
28 | 29 |
281 if old_namespaces then | 282 if old_namespaces then |
282 namespaces = {}; | 283 namespaces = {}; |
283 for k,v in pairs(old_namespaces) do namespaces[k] = v; end | 284 for k,v in pairs(old_namespaces) do namespaces[k] = v; end |
284 end | 285 end |
285 local new = { name = stanza.name, attr = attr, namespaces = namespaces, tags = tags }; | 286 local new = { name = stanza.name, attr = attr, namespaces = namespaces, tags = tags }; |
287 setmetatable(new, stanza_mt); | |
286 if not only_top then | 288 if not only_top then |
287 for i=1,#stanza do | 289 t_move(stanza, 1, #stanza, 1, new); |
288 local child = stanza[i]; | 290 t_move(stanza.tags, 1, #stanza.tags, 1, tags); |
289 if child.name then | 291 new:maptags(_clone); |
290 child = _clone(child); | 292 end |
291 t_insert(tags, child); | 293 return new; |
292 end | |
293 t_insert(new, child); | |
294 end | |
295 end | |
296 return setmetatable(new, stanza_mt); | |
297 end | 294 end |
298 | 295 |
299 local function clone(stanza, only_top) | 296 local function clone(stanza, only_top) |
300 if not is_stanza(stanza) then | 297 if not is_stanza(stanza) then |
301 error("bad argument to clone: expected stanza, got "..type(stanza)); | 298 error("bad argument to clone: expected stanza, got "..type(stanza)); |