632
632
-- ...nager\unicode_far\CommonProfile\Macros\scripts\test1.lua:9:
633
633
-- attempt to perform arithmetic on a nil value
634
634
635
- local function ErrMsgLoad (msg , filename , isMoonScript , mode )
635
+ local function ErrMsgLoad (msg , filename , isMoonScript , mode , stacklevelinfo )
636
636
local title = isMoonScript and mode == " compile" and " MoonScript" or " LuaMacro"
637
637
638
638
if type (msg )~= " string" and type (msg )~= " number" then
@@ -641,37 +641,14 @@ local function ErrMsgLoad (msg, filename, isMoonScript, mode)
641
641
end
642
642
643
643
if mode == " run" then
644
- local fname , line , found
644
+ local fname , line
645
645
fname = msg :match (" ^error loading module .- from file '([^\n ]+)':" )
646
646
if fname then
647
- found = true
648
647
line = tonumber (msg :match (" ^.-\n .-:(%d+):" ))
649
648
else
650
- fname ,line = msg :match (" ^(.-):(%d+):" )
651
- if fname then
652
- line = tonumber (line )
653
- if string_sub (fname ,1 ,3 ) ~= " ..." then
654
- found = true
655
- else
656
- fname = string_sub (fname ,4 )
657
- -- for k=1,5 do
658
- -- if fname:utf8valid() then break end
659
- -- fname = string_sub(fname,2)
660
- -- end
661
- fname = fname :gsub (" /" , " \\ " )
662
- local middle = fname :match ([=[ ^[^\\]*\[^\\]+\]=] )
663
- if middle then
664
- local from = string_find (filename :lower (), middle :lower (), 1 , true )
665
- if from then
666
- fname = string_sub (filename ,1 ,from - 1 ) .. fname
667
- local attr = win .GetFileAttr (fname )
668
- found = attr and not attr :find (" d" )
669
- end
670
- end
671
- end
672
- end
649
+ fname ,line = stacklevelinfo .source :match (" ^@(.+)" ), stacklevelinfo .currentline
673
650
end
674
- if found then
651
+ if fname and win . GetFileAttr ( fname ) then
675
652
if 2 == ErrMsg (msg , title , " OK;Edit" , " wl" ) then
676
653
if isMoonScript then line = GetMoonscriptLineNumber (fname ,line ) end
677
654
editor .Editor (fname ,nil ,nil ,nil ,nil ,nil ,nil ,line or 1 ,nil ,65001 )
@@ -792,14 +769,18 @@ local function LoadMacros (unload, paths)
792
769
for _ ,name in ipairs (FuncList2 ) do env [name ]= DummyFunc ; end
793
770
setmetatable (env ,gmeta )
794
771
setfenv (f , env )
795
- local ok , msg = xpcall (function () return f (FullPath , LoadCounter ) end , debug.traceback )
772
+ local stacklevelinfo
773
+ local ok , msg = xpcall (function () return f (FullPath , LoadCounter ) end , function (err )
774
+ stacklevelinfo = debug.getinfo (2 )
775
+ return debug.traceback (err )
776
+ end )
796
777
if ok then
797
778
for _ ,name in ipairs (FuncList1 ) do env [name ]= nil ; end
798
779
for _ ,name in ipairs (FuncList2 ) do env [name ]= nil ; end
799
780
else
800
781
numerrors = numerrors + 1
801
782
msg = string.gsub (msg ," \n\t " ," \n " )
802
- ErrMsgLoad (msg ,FullPath ,isMoonScript ," run" )
783
+ ErrMsgLoad (msg ,FullPath ,isMoonScript ," run" , stacklevelinfo )
803
784
end
804
785
end
805
786
0 commit comments