[Lldb-commits] [PATCH] D71825: [lldb/Lua] Support loading Lua modules.

Jonas Devlieghere via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Jan 8 09:33:54 PST 2020


JDevlieghere planned changes to this revision.
JDevlieghere marked an inline comment as done.
JDevlieghere added a comment.

In D71825#1809825 <https://reviews.llvm.org/D71825#1809825>, @labath wrote:

> I think this needs more discussion. The current method of appending to `package.path` seems to be completely broken. `package.path` contains patterns (e.g. `/?.lua;/usr/share/lua/5.1/?.lua;...`). Adding an absolute path to this variable will cause that file to be loaded for _any_ value one passes to the `require` function:
>
>    $ cat /tmp/a.lua 
>    print("hello from a.lua")
>    return {}
>    $ lua
>    Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
>   > require "a"
>    stdin:1: module 'a' not found:
>    	no field package.preload['a']
>    	no file './a.lua'
>    	no file '/usr/share/lua/5.1/a.lua'
>    	no file '/usr/share/lua/5.1/a/init.lua'
>    	no file '/usr/lib64/lua/5.1/a.lua'
>    	no file '/usr/lib64/lua/5.1/a/init.lua'
>    	no file '/usr/share/lua/5.1/a.lua'
>    	no file '/usr/share/lua/5.1/a/init.lua'
>    	no file './a.so'
>    	no file '/usr/lib64/lua/5.1/a.so'
>    	no file '/usr/lib64/lua/5.1/a.so'
>    	no file '/usr/lib64/lua/5.1/loadall.so'
>    stack traceback:
>    	[C]: in function 'require'
>    	stdin:1: in main chunk
>    	[C]: ?
>   > package.path = package.path .. ';/tmp/a.lua'
>   > require "a"
>    hello from a.lua
>   > require "b"
>    hello from a.lua
>   > require "huh?"
>    hello from a.lua
>   > require "@$#%^@#%@#%@#%@#"
>    hello from a.lua
>   
>
> I'm afraid we will need to do something more elaborate (and fiddly, unfortunately) to implement this. I see a couple of options, though none are really ideal. I'm not sure I'll have time to go into them in detail (I'll try to get back to it this evening), but I'm interested in hearing your thoughts about this...


Seems like the solution is to use the `?.lua` which is also what's used for picking up files in the current directory.

  Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
  > package.path = package.path .. ';/tmp/?.lua'
  > require "a"
  hello from a.lua
  table: 0x7fbd13401a60
  > require "b"
  stdin:1: module 'b' not found:
          no field package.preload['b']
          no file '/usr/local/share/lua/5.3/b.lua'
          no file '/usr/local/share/lua/5.3/b/init.lua'
          no file '/usr/local/lib/lua/5.3/b.lua'
          no file '/usr/local/lib/lua/5.3/b/init.lua'
          no file './b.lua'
          no file './b/init.lua'
          no file '/tmp/b.lua'
          no file '/usr/local/lib/lua/5.3/b.so'
          no file '/usr/local/lib/lua/5.3/loadall.so'
          no file './b.so'
  stack traceback:
          [C]: in function 'require'
          stdin:1: in main chunk
          [C]: in ?

FWIW I just followed the instructions from http://lua-users.org/wiki/ModulesTutorial.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D71825/new/

https://reviews.llvm.org/D71825





More information about the lldb-commits mailing list