| |
| local upb = require("lupb") |
| |
| upb.generated_pool = upb.SymbolTable() |
| |
| local module_metatable = { |
| __index = function(t, k) |
| local package = t._filedef:package() |
| if package then |
| k = package .. "." .. k |
| end |
| local pool = upb.generated_pool |
| local def = pool:lookup_msg(k) or pool:lookup_enum(k) |
| local v = nil |
| if def and def:file():name() == t._filedef:name() then |
| v = def |
| t[k] = v |
| end |
| return v |
| end |
| } |
| |
| function upb._generated_module(desc_string) |
| local file = upb.generated_pool:add_file(desc_string) |
| local module = {_filedef = file} |
| setmetatable(module, module_metatable) |
| return module |
| end |
| |
| return upb |