Skip to content

Commit 92e9c4f

Browse files
committed
Remove more hash lookups. Decrease nesting.
1 parent b8e1ebe commit 92e9c4f

2 files changed

Lines changed: 80 additions & 45 deletions

File tree

require.lua

Lines changed: 52 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
--- usage:
1+
--- usage:
22
-- require = require"require".require
33
-- :o)
44

@@ -27,31 +27,33 @@ local function require51 (name)
2727
if p_loaded[name] == sentinel then
2828
error("loop or previous error loading module '"..name.."'", 2)
2929
end
30+
3031
local module = p_loaded[name]
31-
if not module then
32-
local msg = {}
33-
local loader
34-
for _, searcher in ipairs(package.loaders) do
35-
loader = searcher(name)
36-
if type(loader) == "function" then break end
37-
if type(loader) == "string" then
38-
-- `loader` is actually an error message
39-
msg[#msg + 1] = loader
40-
end
41-
loader = nil
42-
end
43-
if loader == nil then
44-
error("module '" .. name .. "' not found: "..t_concat(msg), 2)
45-
end
46-
p_loaded[name] = sentinel
47-
local res = loader(name)
48-
if res ~= nil then
49-
p_loaded[name] = res
50-
elseif p_loaded[name] == sentinel or not p_loaded[name] then
51-
p_loaded[name] = true
32+
if module then return module end
33+
34+
local msg = {}
35+
local loader
36+
for _, searcher in ipairs(package.loaders) do
37+
loader = searcher(name)
38+
if type(loader) == "function" then break end
39+
if type(loader) == "string" then
40+
-- `loader` is actually an error message
41+
msg[#msg + 1] = loader
5242
end
53-
module = p_loaded[name]
43+
loader = nil
5444
end
45+
if loader == nil then
46+
error("module '" .. name .. "' not found: "..t_concat(msg), 2)
47+
end
48+
p_loaded[name] = sentinel
49+
local res = loader(name)
50+
if res ~= nil then
51+
module = res
52+
elseif p_loaded[name] == sentinel or not p_loaded[name] then
53+
module = true
54+
end
55+
56+
p_loaded[name] = module
5557
return module
5658
end
5759

@@ -60,33 +62,38 @@ end
6062
local function require52 (name)
6163
name = checkstring(name)
6264
local module = p_loaded[name]
63-
if not module then
64-
local msg = {}
65-
local loader, param
66-
for _, searcher in ipairs(package.searchers) do
67-
loader, param = searcher(name)
68-
if type(loader) == "function" then break end
69-
if type(loader) == "string" then
70-
-- `loader` is actually an error message
71-
msg[#msg + 1] = loader
72-
end
73-
loader = nil
65+
if module then return module end
66+
67+
local msg = {}
68+
local loader, param
69+
for _, searcher in ipairs(package.searchers) do
70+
loader, param = searcher(name)
71+
if type(loader) == "function" then break end
72+
if type(loader) == "string" then
73+
-- `loader` is actually an error message
74+
msg[#msg + 1] = loader
7475
end
75-
if loader == nil then
76-
error("module '" .. name .. "' not found: "..table.concat(msg), 2)
77-
end
78-
local res = loader(name, param)
79-
if res ~= nil then
80-
p_loaded[name] = res
81-
elseif not p_loaded[name] then
82-
p_loaded[name] = true
83-
end
84-
module = p_loaded[name]
76+
loader = nil
77+
end
78+
if loader == nil then
79+
error("module '" .. name .. "' not found: "..table.concat(msg), 2)
8580
end
81+
local res = loader(name, param)
82+
if res ~= nil then
83+
module = res
84+
elseif not p_loaded[name] then
85+
module = true
86+
end
87+
88+
p_loaded[name] = module
8689
return module
8790
end
8891

89-
local module = {require51 = require51, require52 = require52}
92+
local module = {
93+
VERSION = "0.1.6"
94+
require51 = require51,
95+
require52 = require52
96+
}
9097

9198
if _VERSION == "Lua 5.1" then module.require = require51 end
9299
if _VERSION == "Lua 5.2" then module.require = require52 end

rockspecs/require-0.1.6-1.rockspec

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package = "require"
2+
version = "0.1.6-1"
3+
source = {
4+
url = "git://github.com/pygy/require.lua.git",
5+
tag = "v0.1.6"
6+
}
7+
8+
description = {
9+
summary = "`require()` rewritten in plain Lua",
10+
detailed = [[
11+
`require()` rewritten in plain Lua.
12+
Lua 5.1 and 5.2 semantics are supported.
13+
]],
14+
homepage = "https://github.com/pygy/require.lua",
15+
license = "MIT/X11"
16+
}
17+
18+
dependencies = {
19+
"lua >= 5.1, < 5.3"
20+
}
21+
22+
build = {
23+
type = "builtin",
24+
modules = {
25+
require = "./require.lua"
26+
}
27+
}
28+

0 commit comments

Comments
 (0)