fix do wrap bugs

This commit is contained in:
2023-03-11 02:06:36 +00:00
parent 597be4e0df
commit f5d8eb6d70
5 changed files with 18 additions and 16 deletions

View File

@@ -94,11 +94,7 @@ func runCall(c call, stack stack) (any, ArErr) {
level[param] = args[i] level[param] = args[i]
} }
resp, err := runVal(x.run, append(x.stack, level)) resp, err := runVal(x.run, append(x.stack, level))
switch x := resp.(type) { return openJump(resp), err
case PassBackJumpStatment:
resp = x.value
}
return resp, err
} }
return nil, ArErr{"Runtime Error", "type '" + typeof(callable) + "' is not callable", c.line, c.path, c.code, true} return nil, ArErr{"Runtime Error", "type '" + typeof(callable) + "' is not callable", c.line, c.path, c.code, true}
} }

View File

@@ -18,7 +18,7 @@ func isDoWrap(code UNPARSEcode) bool {
} }
func parseDoWrap(code UNPARSEcode, index int, codelines []UNPARSEcode) (any, bool, ArErr, int) { func parseDoWrap(code UNPARSEcode, index int, codelines []UNPARSEcode) (any, bool, ArErr, int) {
currentindent := len(code.code) - len(strings.TrimLeft(code.code, " ")) currentindent := len(code.realcode) - len(strings.TrimLeft(code.realcode, " "))
var setindent int = -1 var setindent int = -1
var i = index + 1 var i = index + 1
translated := []any{} translated := []any{}

View File

@@ -30,7 +30,7 @@ func parseReturn(code UNPARSEcode, index int, codeline []UNPARSEcode) (CallJumpS
realcode: code.realcode, realcode: code.realcode,
line: code.line, line: code.line,
path: code.path, path: code.path,
}, index, codeline, 0) }, index, codeline, 1)
return CallJumpStatment{ return CallJumpStatment{
TYPE: "return", TYPE: "return",
value: resp, value: resp,
@@ -57,3 +57,12 @@ func runJumpStatment(code CallJumpStatment, stack stack) (any, ArErr) {
path: code.path, path: code.path,
}, ArErr{} }, ArErr{}
} }
func openJump(resp any) any {
switch x := resp.(type) {
case PassBackJumpStatment:
return x.value
default:
return resp
}
}

View File

@@ -193,11 +193,7 @@ func setVariableValue(v setVariable, stack stack) (any, ArErr) {
if err.EXISTS { if err.EXISTS {
return nil, err return nil, err
} }
switch x := respp.(type) { resp = openJump(respp)
case PassBackJumpStatment:
respp = x.value
}
resp = respp
} }
if v.TYPE == "let" { if v.TYPE == "let" {

View File

@@ -1,5 +1,6 @@
f(x) = do f(x) = do
x = x + 1 y = number(input("what number? "))
x = x + 1 return (z) = do
return x return maths.round(z) * y * x
term.log(f(1))
term.log(f(5)(70))