mirror of
https://github.com/HybridDog/pdisc.git
synced 2024-11-16 15:20:37 +01:00
more instructions, string length test and dont try executing nil
M faden.lua M standardbefehlssatz.lua
This commit is contained in:
parent
641aa73686
commit
79fd928b68
17
faden.lua
17
faden.lua
|
@ -2,7 +2,11 @@ local function befehl_ausfuhren(faden)
|
||||||
local is = faden.is
|
local is = faden.is
|
||||||
local imms = faden.imms
|
local imms = faden.imms
|
||||||
local vars = faden.vars
|
local vars = faden.vars
|
||||||
local befehl, args = unpack(faden.liste[faden.ip])
|
local anw = faden.liste[faden.ip]
|
||||||
|
if not anw then
|
||||||
|
return false, "Invalid instruction pointer"
|
||||||
|
end
|
||||||
|
local befehl, args = unpack(anw)
|
||||||
for i = 1,#is do
|
for i = 1,#is do
|
||||||
local bfunk = is[i][befehl]
|
local bfunk = is[i][befehl]
|
||||||
if bfunk then
|
if bfunk then
|
||||||
|
@ -64,8 +68,9 @@ return function(faden_manip, parsed)
|
||||||
log = "",
|
log = "",
|
||||||
vars = {pi = math.pi},
|
vars = {pi = math.pi},
|
||||||
ip = 1,
|
ip = 1,
|
||||||
sp = 50,
|
sp = 3500,
|
||||||
sb = 50,
|
sb = 3500,
|
||||||
|
strlen_max = 2000,
|
||||||
stack = {},
|
stack = {},
|
||||||
is = {pdisc.standard_befehlssatz},
|
is = {pdisc.standard_befehlssatz},
|
||||||
suscitate = programm_ausfuhren,
|
suscitate = programm_ausfuhren,
|
||||||
|
@ -93,6 +98,12 @@ return function(faden_manip, parsed)
|
||||||
if parsed then
|
if parsed then
|
||||||
faden.imms = parsed[1]
|
faden.imms = parsed[1]
|
||||||
faden.liste = parsed[2]
|
faden.liste = parsed[2]
|
||||||
|
if not faden.liste[1] then
|
||||||
|
faden.suscitate = function(self)
|
||||||
|
self.log = self.log .. "Nothing to execute.\n"
|
||||||
|
self:exit()
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
faden_manip(faden)
|
faden_manip(faden)
|
||||||
return faden
|
return faden
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
local WNOA = "wrong number of arguments"
|
local WNOA = "wrong number of arguments"
|
||||||
local UAT = "unsupported argument type"
|
local UAT = "unsupported argument type"
|
||||||
local SE = "error with cmd-cmd executing: "
|
local SE = "error with cmd-cmd executing: "
|
||||||
|
local STRL = "attempt on exceeding maximum string length"
|
||||||
|
|
||||||
local s
|
local s
|
||||||
s = {
|
s = {
|
||||||
|
@ -11,7 +12,7 @@ s = {
|
||||||
return true, params[2]
|
return true, params[2]
|
||||||
end,
|
end,
|
||||||
|
|
||||||
add = function(params)
|
add = function(params, faden)
|
||||||
if #params ~= 2 then
|
if #params ~= 2 then
|
||||||
return false, WNOA
|
return false, WNOA
|
||||||
end
|
end
|
||||||
|
@ -28,6 +29,9 @@ s = {
|
||||||
if t1 == "boolean" then
|
if t1 == "boolean" then
|
||||||
return true, p1 and p2
|
return true, p1 and p2
|
||||||
end
|
end
|
||||||
|
if #p1 + #p2 > faden.strlen_max then
|
||||||
|
return false, STRL
|
||||||
|
end
|
||||||
return true, p1 .. p2
|
return true, p1 .. p2
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
@ -40,6 +44,9 @@ s = {
|
||||||
local t2 = type(p2)
|
local t2 = type(p2)
|
||||||
if t1 == "string"
|
if t1 == "string"
|
||||||
and t2 == "number" then
|
and t2 == "number" then
|
||||||
|
if #p1 * p2 > faden.strlen_max then
|
||||||
|
return false, STRL
|
||||||
|
end
|
||||||
return true, p1:rep(p2)
|
return true, p1:rep(p2)
|
||||||
end
|
end
|
||||||
if t1 ~= t2 then
|
if t1 ~= t2 then
|
||||||
|
@ -125,6 +132,33 @@ s = {
|
||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
call = function(params, faden)
|
||||||
|
if #params ~= 1 then
|
||||||
|
return false, WNOA
|
||||||
|
end
|
||||||
|
local subsucc,msg = s.push(faden.ip + 1, faden)
|
||||||
|
if not subsucc then
|
||||||
|
return false, SE .. msg
|
||||||
|
end
|
||||||
|
subsucc,msg = s.jmp(params, faden)
|
||||||
|
if not subsucc then
|
||||||
|
return false, SE .. msg
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
|
||||||
|
ret = function(_, faden)
|
||||||
|
local subsucc,msg = s.pop({true}, faden)
|
||||||
|
if not subsucc then
|
||||||
|
return false, SE .. msg
|
||||||
|
end
|
||||||
|
subsucc,msg = s.jmp({msg}, faden)
|
||||||
|
if not subsucc then
|
||||||
|
return false, SE .. msg
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
|
||||||
push = function(params, faden)
|
push = function(params, faden)
|
||||||
local pc = #params
|
local pc = #params
|
||||||
if pc == 0 then
|
if pc == 0 then
|
||||||
|
@ -192,6 +226,21 @@ s = {
|
||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
sleep = function(params, faden)
|
||||||
|
if #params ~= 1 then
|
||||||
|
return false, WNOA
|
||||||
|
end
|
||||||
|
local p = params[1]
|
||||||
|
if type(p) ~= "number" then
|
||||||
|
return false, UAT
|
||||||
|
end
|
||||||
|
subsucc,msg = s.usleep({p * 1000000}, faden)
|
||||||
|
if not subsucc then
|
||||||
|
return false, SE .. msg
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
|
||||||
get_us_time = function()
|
get_us_time = function()
|
||||||
return true, minetest.get_us_time()
|
return true, minetest.get_us_time()
|
||||||
end,
|
end,
|
||||||
|
@ -216,7 +265,7 @@ s = {
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
local so_math_fcts = {"sin", "asin", "cos", "acos", "tan", "atan",
|
local so_math_fcts = {"sin", "asin", "cos", "acos", "tan", "atan", "exp", "log",
|
||||||
"abs", "sign", "floor", "ceil"}
|
"abs", "sign", "floor", "ceil"}
|
||||||
for i = 1,#so_math_fcts do
|
for i = 1,#so_math_fcts do
|
||||||
i = so_math_fcts[i]
|
i = so_math_fcts[i]
|
||||||
|
@ -231,4 +280,21 @@ for i = 1,#so_math_fcts do
|
||||||
return true, math[i](p)
|
return true, math[i](p)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local to_math_fcts = {"pow"}
|
||||||
|
for i = 1,#to_math_fcts do
|
||||||
|
i = to_math_fcts[i]
|
||||||
|
s[i] = function(params)
|
||||||
|
if #params ~= 2 then
|
||||||
|
return false, WNOA
|
||||||
|
end
|
||||||
|
local p1,p2 = unpack(params)
|
||||||
|
if type(p1) ~= "number"
|
||||||
|
or type(p2) ~= "number" then
|
||||||
|
return false, UAT
|
||||||
|
end
|
||||||
|
return true, math[i](p1, p2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
Loading…
Reference in New Issue
Block a user