|
|
@@ -83,7 +83,7 @@ func isBool(val value) bool {
|
|
|
if isWord(val) {
|
|
|
val.word = val.word[1:]
|
|
|
}
|
|
|
- return val.word == "true" || val.word == "false"
|
|
|
+ return val.word == "false" || val.word == "true"
|
|
|
}
|
|
|
|
|
|
func toBool(val value) bool {
|
|
|
@@ -96,10 +96,10 @@ func toBool(val value) bool {
|
|
|
if isWord(val) {
|
|
|
val.word = val.word[1:]
|
|
|
}
|
|
|
- if val.word != "true" && val.word != "false" {
|
|
|
- panic(fmt.Errorf("bool: %s (%s)", errInvalidBool, toString(val)))
|
|
|
+ if val.word == "false" || val.word == "true" {
|
|
|
+ return val.word == "true"
|
|
|
}
|
|
|
- return val.word == "true"
|
|
|
+ panic(fmt.Errorf("bool: %s (%s)", errInvalidBool, toString(val)))
|
|
|
}
|
|
|
|
|
|
func isWord(val value) bool {
|
|
|
@@ -110,7 +110,7 @@ func isWord(val value) bool {
|
|
|
}
|
|
|
|
|
|
func parseWord(s string) value {
|
|
|
- if len(s) > 1 {
|
|
|
+ if s != `"` {
|
|
|
if s[1] == '[' {
|
|
|
s = `"\[` + s[2:]
|
|
|
}
|
|
|
@@ -195,7 +195,7 @@ func isEmpty(val value) bool {
|
|
|
if val.tp == typeList {
|
|
|
return len(val.list) == 0
|
|
|
}
|
|
|
- panic(fmt.Errorf("empty: %s (%s)", errWordOrListExpected, toString(val)))
|
|
|
+ return val.word == `"` || val.word == "[ ]"
|
|
|
}
|
|
|
|
|
|
func toValue(val value, env environ) value {
|
|
|
@@ -203,9 +203,15 @@ func toValue(val value, env environ) value {
|
|
|
return val
|
|
|
}
|
|
|
if isNumber(val) {
|
|
|
+ if isWord(val) {
|
|
|
+ return value{tp: typeNumber, word: val.word, num: toNumber(val)}
|
|
|
+ }
|
|
|
return value{tp: typeNumber, num: toNumber(val)}
|
|
|
}
|
|
|
if isBool(val) {
|
|
|
+ if isWord(val) {
|
|
|
+ return value{tp: typeBool, word: val.word, b: toBool(val)}
|
|
|
+ }
|
|
|
return value{tp: typeBool, b: toBool(val)}
|
|
|
}
|
|
|
if isWord(val) {
|
|
|
@@ -219,9 +225,15 @@ func toValue(val value, env environ) value {
|
|
|
|
|
|
func toString(val value) string {
|
|
|
if val.tp == typeNumber {
|
|
|
+ if val.word != "" {
|
|
|
+ return val.word[1:]
|
|
|
+ }
|
|
|
return strconv.FormatFloat(val.num, 'g', -1, 64)
|
|
|
}
|
|
|
if val.tp == typeBool {
|
|
|
+ if val.word != "" {
|
|
|
+ return val.word[1:]
|
|
|
+ }
|
|
|
return strconv.FormatBool(val.b)
|
|
|
}
|
|
|
if val.tp == typeWord {
|