1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
local ast = require 'parser.ast'
local Errs
local State
local function pushError(err)
if err.finish < err.start then
err.finish = err.start
end
local last = Errs[#Errs]
if last then
if last.start <= err.start and last.finish >= err.finish then
return
end
end
err.level = err.level or 'error'
Errs[#Errs+1] = err
return err
end
return function (self, lua, mode, version)
Errs = {}
State= {
Break = 0,
Label = {{}},
Dots = {true},
Version = version,
Comments = {},
Lua = lua,
}
ast.init(State, Errs)
local suc, res, err = xpcall(self.grammar, debug.traceback, self, lua, mode)
if not suc then
return nil, res
end
if not res then
pushError(err)
return nil, Errs
end
return res, Errs, State.Comments
end
|