Fixes version bump conflict

This commit is contained in:
sloum 2022-08-26 14:15:48 -07:00
commit a0bf420848
3 changed files with 25 additions and 3 deletions

View File

@ -63,7 +63,7 @@ func eval(exp expression, en *env) (value expression) {
value = exception("Invalid 'quote' syntax - too few arguments")
break
}
value = e[1]
value = stringUnescapeEval(e[1])
case "if":
if len(e) < 3 {
value = exception("Invalid 'if' syntax - too few arguments")
@ -278,7 +278,7 @@ func eval(exp expression, en *env) (value expression) {
}
b := []expression{symbol("begin")}
b = append(b, e[2:]...)
value = proc{e[1], b, en}
value = proc{e[1], stringUnescapeEval(b), en}
case "macro":
if len(e) < 3 {
value = exception("'macro' expects at least three arguments")
@ -668,3 +668,24 @@ func CoEval(wg *sync.WaitGroup, ex expression, e *env) {
defer wg.Done()
eval(ex, e)
}
// Because lambda and quote expressions do not have their
// content evaluated at creation strings were not getting
// unescaped. As such, they were not usable in the same way
// as strings used elsewhere. This recursively unescapes all
// of the strings as need be so that string behavior is
// consistent accross the system.
func stringUnescapeEval(exp expression) expression {
switch e := exp.(type) {
case string:
return unescapeString(e)
case []expression:
values := make([]expression, len(e))
for i, x := range e {
values[i] = stringUnescapeEval(x)
}
return values
default:
return e
}
}

View File

@ -18,7 +18,7 @@ import (
ln "github.com/peterh/liner"
)
const version = "1.1.3"
const version = "1.1.4"
const globalLibPath = "/usr/local/lib/slope/modules/"

View File

@ -20,6 +20,7 @@ func String(v expression, rawString bool) string {
return "(" + strings.Join(l, " ") + ")"
case string:
if rawString {
fmt.Println("Escaping string")
return fmt.Sprintf("\"%s\"", escapeString(v))
}
return v