diff --git a/cmd/lua_run.ts b/cmd/lua_run.ts index 86fc195e..848ed6b5 100644 --- a/cmd/lua_run.ts +++ b/cmd/lua_run.ts @@ -15,11 +15,7 @@ import { defaultConfig, } from "@silverbulletmd/silverbullet/type/config"; import { parse } from "$common/space_lua/parse.ts"; -import { - LuaEnv, - LuaRuntimeError, - LuaStackFrame, -} from "$common/space_lua/runtime.ts"; +import { LuaRuntimeError, LuaStackFrame } from "$common/space_lua/runtime.ts"; import { evalStatement } from "$common/space_lua/eval.ts"; @@ -68,8 +64,7 @@ export async function luaRunCommand( const luaFile = await Deno.readTextFile(scriptPath); const chunk = parse(luaFile, {}); const env = serverSystem.spaceLuaEnv.env; - const sf = new LuaStackFrame(new LuaEnv(), chunk.ctx); - sf.threadLocal.setLocal("_GLOBAL", env); + const sf = LuaStackFrame.createWithGlobalEnv(env, chunk.ctx); try { await evalStatement(chunk, env, sf); diff --git a/common/space_lua/lua.test.ts b/common/space_lua/lua.test.ts index d9e3966a..5975d615 100644 --- a/common/space_lua/lua.test.ts +++ b/common/space_lua/lua.test.ts @@ -43,8 +43,7 @@ async function runLuaTest(luaPath: string) { ); const chunk = parse(luaFile, {}); const env = new LuaEnv(luaBuildStandardEnv()); - const sf = new LuaStackFrame(new LuaEnv(), chunk.ctx); - sf.threadLocal.setLocal("_GLOBAL", env); + const sf = LuaStackFrame.createWithGlobalEnv(env, chunk.ctx); try { await evalStatement(chunk, env, sf); diff --git a/common/space_lua/runtime.ts b/common/space_lua/runtime.ts index 298b54dc..e9342697 100644 --- a/common/space_lua/runtime.ts +++ b/common/space_lua/runtime.ts @@ -108,7 +108,7 @@ export class LuaStackFrame { static lostFrame = new LuaStackFrame(new LuaEnv(), null); static createWithGlobalEnv( - globalEnv: any, + globalEnv: LuaEnv, ctx: ASTCtx | null = null, ): LuaStackFrame { const env = new LuaEnv(); diff --git a/lib/plugos/syscalls/datastore.ts b/lib/plugos/syscalls/datastore.ts index 9e41ee8c..71f5a9c3 100644 --- a/lib/plugos/syscalls/datastore.ts +++ b/lib/plugos/syscalls/datastore.ts @@ -49,9 +49,9 @@ export function dataStoreReadSyscalls( scopeVariables: Record = {}, ): Promise => { const dsQueryCollection = new DataStoreQueryCollection(ds, prefix); - const tl = new LuaEnv(); - tl.setLocal("_GLOBAL", commonSystem.spaceLuaEnv.env); - const sf = new LuaStackFrame(tl, null); + const sf = LuaStackFrame.createWithGlobalEnv( + commonSystem.spaceLuaEnv.env, + ); const env = new LuaEnv(commonSystem.spaceLuaEnv.env); for (const [key, value] of Object.entries(scopeVariables)) { env.set(key, jsToLuaValue(value)); diff --git a/web/cm_plugins/lua_directive.ts b/web/cm_plugins/lua_directive.ts index 9b0806af..9285ae4d 100644 --- a/web/cm_plugins/lua_directive.ts +++ b/web/cm_plugins/lua_directive.ts @@ -64,8 +64,10 @@ export function luaDirectivePlugin(client: Client) { currentPageMeta || { name: client.ui.viewState.currentPage }, ); - tl.setLocal("_GLOBAL", client.clientSystem.spaceLuaEnv.env); - const sf = new LuaStackFrame(tl, expr.ctx); + const sf = LuaStackFrame.createWithGlobalEnv( + client.clientSystem.spaceLuaEnv.env, + expr.ctx, + ); const threadLocalizedEnv = new LuaEnv( client.clientSystem.spaceLuaEnv.env, ); diff --git a/web/cm_plugins/lua_widget.ts b/web/cm_plugins/lua_widget.ts index 14ea1f98..d47749df 100644 --- a/web/cm_plugins/lua_widget.ts +++ b/web/cm_plugins/lua_widget.ts @@ -12,7 +12,7 @@ import { activeWidgets } from "./markdown_widget.ts"; import { attachWidgetEventHandlers } from "./widget_util.ts"; import { renderExpressionResult } from "../../plugs/template/util.ts"; import { expandCodeWidgets } from "$common/markdown.ts"; -import { LuaEnv, LuaStackFrame } from "$common/space_lua/runtime.ts"; +import { LuaStackFrame } from "$common/space_lua/runtime.ts"; export type LuaWidgetCallback = ( bodyText: string, @@ -104,9 +104,9 @@ export class LuaWidget extends WidgetType { mdContent, ); - const tl = new LuaEnv(); - const sf = new LuaStackFrame(tl, null, LuaStackFrame.lostFrame); - tl.setLocal("_GLOBAL", client.clientSystem.spaceLuaEnv.env); + const sf = LuaStackFrame.createWithGlobalEnv( + client.clientSystem.spaceLuaEnv.env, + ); mdTree = await expandCodeWidgets( client.clientSystem.codeWidgetHook, mdTree,