luci-base: runtime.uc: avoid Lua not installed exeption from trycompile()
Make sure to request loading the Lua bridge as optional when initializing the Lua VM context from trycompile() in order to not raise a fatal exception in case the Lua runtime support is not present. Ref: https://forum.openwrt.org/t/x/141426 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
c99602e4ac
commit
815028ef93
1 changed files with 14 additions and 8 deletions
|
@ -43,13 +43,17 @@ function format_lua_exception(ex) {
|
|||
}
|
||||
|
||||
const Class = {
|
||||
init_lua: function() {
|
||||
init_lua: function(optional) {
|
||||
if (!this.L) {
|
||||
this.L = this.env.dispatcher.load_luabridge().create();
|
||||
this.L.set('L', proto({ write: print }, this.env));
|
||||
this.L.invoke('require', 'luci.ucodebridge');
|
||||
let bridge = this.env.dispatcher.load_luabridge(optional);
|
||||
|
||||
this.env.lua_active = true;
|
||||
if (bridge) {
|
||||
this.L = bridge.create();
|
||||
this.L.set('L', proto({ write: print }, this.env));
|
||||
this.L.invoke('require', 'luci.ucodebridge');
|
||||
|
||||
this.env.lua_active = true;
|
||||
}
|
||||
}
|
||||
|
||||
return this.L;
|
||||
|
@ -80,10 +84,12 @@ const Class = {
|
|||
}
|
||||
else {
|
||||
try {
|
||||
let vm = this.init_lua();
|
||||
let compile = vm.get('_G', 'luci', 'ucodebridge', 'compile');
|
||||
let vm = this.init_lua(true);
|
||||
|
||||
compile.call(path);
|
||||
if (vm)
|
||||
vm.get('_G', 'luci', 'ucodebridge', 'compile').call(path);
|
||||
else
|
||||
return `Unable to compile '${path}' as Lua template: Unable to load Lua runtime`;
|
||||
}
|
||||
catch (lua_err) {
|
||||
return `Unable to compile '${path}' as Lua template: ${format_lua_exception(lua_err)}`;
|
||||
|
|
Loading…
Reference in a new issue