diff --git a/example.ar b/example.ar new file mode 100644 index 0000000..265b901 --- /dev/null +++ b/example.ar @@ -0,0 +1,2 @@ +forever do + term.log(random()) \ No newline at end of file diff --git a/src/array.go b/src/array.go index fed25d4..aac033b 100644 --- a/src/array.go +++ b/src/array.go @@ -507,9 +507,9 @@ func ArArray(arr []any) ArObject { EXISTS: true, } } - output = append(output, v.(string)) + output = append(output, v.(ArObject).obj["__value__"].(string)) } - return ArString(strings.Join(output, args[0].(string))), ArErr{} + return ArString(strings.Join(output, args[0].(ArObject).obj["__value__"].(string))), ArErr{} }, } val.obj["concat"] = builtinFunc{ diff --git a/src/built-in-functions.go b/src/built-in-functions.go index 1a0b309..330b58c 100644 --- a/src/built-in-functions.go +++ b/src/built-in-functions.go @@ -33,7 +33,7 @@ func ArgonNumber(args ...any) (any, ArErr) { if x { return newNumber().SetInt64(1), ArErr{} } - return newNumber().SetInt64(0), ArErr{} + return newNumber(), ArErr{} case nil: return newNumber(), ArErr{} } diff --git a/src/built-ins.go b/src/built-ins.go index 0c4a158..2f08917 100644 --- a/src/built-ins.go +++ b/src/built-ins.go @@ -1,7 +1,5 @@ package main -import "fmt" - func makeGlobal(allowDocument bool) ArObject { var vars = Map(anymap{}) vars.obj["global"] = vars @@ -35,14 +33,14 @@ func makeGlobal(allowDocument bool) ArObject { newmap[i] = v } return Map(newmap), ArErr{} + } else if x.TYPE == "string" { + newmap := anymap{} + for i, v := range x.obj["__value__"].(string) { + newmap[i] = ArString(string(v)) + } + return Map(newmap), ArErr{} } return x, ArErr{} - case string: - newmap := anymap{} - for i, v := range x { - newmap[i] = ArString(string(v)) - } - return Map(newmap), ArErr{} } return nil, ArErr{TYPE: "TypeError", message: "Cannot create map from '" + typeof(a[0]) + "'", EXISTS: true} }} @@ -51,15 +49,16 @@ func makeGlobal(allowDocument bool) ArObject { return ArArray([]any{}), ArErr{} } switch x := a[0].(type) { - case string: - newarray := []any{} - for _, v := range x { - newarray = append(newarray, ArString(string(v))) - } - return ArArray(newarray), ArErr{} case ArObject: if x.TYPE == "array" { return x, ArErr{} + } else if x.TYPE == "string" { + + newarray := []any{} + for _, v := range x.obj["__value__"].(string) { + newarray = append(newarray, ArString(string(v))) + } + return ArArray(newarray), ArErr{} } newarray := []any{} for key, val := range x.obj { @@ -151,7 +150,6 @@ func makeGlobal(allowDocument bool) ArObject { vars.obj["torad"] = ArToRad vars.obj["abs"] = ArAbs vars.obj["dir"] = builtinFunc{"dir", func(a ...any) (any, ArErr) { - fmt.Println(a) if len(a) == 0 { return ArArray([]any{}), ArErr{} } diff --git a/src/call.go b/src/call.go index 1d0425c..c504edc 100644 --- a/src/call.go +++ b/src/call.go @@ -92,9 +92,6 @@ func runCall(c call, stack stack, stacklevel int) (any, ArErr) { } switch x := callable.(type) { case builtinFunc: - for i := range args { - args[i] = ArValidToAny(args[i]) - } resp, err := x.FUNC(args...) resp = AnyToArValid(resp) if err.EXISTS { diff --git a/src/string.go b/src/string.go index eace6e0..bb08ae4 100644 --- a/src/string.go +++ b/src/string.go @@ -253,7 +253,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - splitby := a[0].(string) + splitby := a[0].(ArObject).obj["__value__"].(string) output := []any{} splitted := (strings.Split(str, splitby)) for _, v := range splitted { @@ -297,7 +297,7 @@ func ArString(str string) ArObject { if typeof(a[1]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[1]), 0, "", "", true} } - return strings.Replace(str, a[0].(string), a[1].(string), -1), ArErr{} + return strings.Replace(str, a[0].(ArObject).obj["__value__"].(string), a[1].(string), -1), ArErr{} }} obj.obj["contains"] = builtinFunc{ "contains", @@ -308,7 +308,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - return strings.Contains(str, a[0].(string)), ArErr{} + return strings.Contains(str, a[0].(ArObject).obj["__value__"].(string)), ArErr{} }} obj.obj["startswith"] = builtinFunc{ "startswith", @@ -319,7 +319,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - return strings.HasPrefix(str, a[0].(string)), ArErr{} + return strings.HasPrefix(str, a[0].(ArObject).obj["__value__"].(string)), ArErr{} }} obj.obj["endswith"] = builtinFunc{ "endswith", @@ -330,7 +330,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - return strings.HasSuffix(str, a[0].(string)), ArErr{} + return strings.HasSuffix(str, a[0].(ArObject).obj["__value__"].(string)), ArErr{} }} obj.obj["index"] = builtinFunc{ "index", @@ -341,7 +341,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - return strings.Index(str, a[0].(string)), ArErr{} + return strings.Index(str, a[0].(ArObject).obj["__value__"].(string)), ArErr{} }} obj.obj["rindex"] = builtinFunc{ "rindex", @@ -352,7 +352,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - return strings.LastIndex(str, a[0].(string)), ArErr{} + return strings.LastIndex(str, a[0].(ArObject).obj["__value__"].(string)), ArErr{} }} obj.obj["count"] = builtinFunc{ "count", @@ -364,7 +364,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - return strings.Count(str, a[0].(string)), ArErr{} + return strings.Count(str, a[0].(ArObject).obj["__value__"].(string)), ArErr{} }} obj.obj["sort"] = builtinFunc{ @@ -451,7 +451,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - cutset = a[0].(string) + cutset = a[0].(ArObject).obj["__value__"].(string) } return strings.Trim(str, cutset), ArErr{} }} @@ -466,7 +466,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - cutset = a[0].(string) + cutset = a[0].(ArObject).obj["__value__"].(string) } return strings.TrimLeft(str, cutset), ArErr{} }} @@ -481,7 +481,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "expected string, got " + typeof(a[0]), 0, "", "", true} } - cutset = a[0].(string) + cutset = a[0].(ArObject).obj["__value__"].(string) } return strings.TrimRight(str, cutset), ArErr{} }} @@ -494,7 +494,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "cannot get less than or equal to of type " + typeof(a[0]) + " from string", 0, "", "", true} } - return str <= a[0].(string), ArErr{} + return str <= a[0].(ArObject).obj["__value__"].(string), ArErr{} }} obj.obj["__LessThan__"] = builtinFunc{ "__LessThan__", @@ -505,7 +505,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "cannot get less than of type " + typeof(a[0]) + " from string", 0, "", "", true} } - return str < a[0].(string), ArErr{} + return str < a[0].(ArObject).obj["__value__"].(string), ArErr{} }} obj.obj["__GreaterThan__"] = builtinFunc{ "__GreaterThan__", @@ -516,7 +516,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "cannot get greater than of type " + typeof(a[0]) + " from string", 0, "", "", true} } - return str > a[0].(string), ArErr{} + return str > a[0].(ArObject).obj["__value__"].(string), ArErr{} }} obj.obj["__GreaterThanEqual__"] = builtinFunc{ @@ -528,7 +528,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "cannot get greater than or equal to of type " + typeof(a[0]) + " from string", 0, "", "", true} } - return str >= a[0].(string), ArErr{} + return str >= a[0].(ArObject).obj["__value__"].(string), ArErr{} }} obj.obj["__Equal__"] = builtinFunc{ "__Equal__", @@ -555,7 +555,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "cannot add " + typeof(a[0]) + " to string", 0, "", "", true} } - return strings.Join([]string{str, a[0].(string)}, ""), ArErr{} + return strings.Join([]string{str, a[0].(ArObject).obj["__value__"].(string)}, ""), ArErr{} }} obj.obj["__Multiply__"] = builtinFunc{ "__Multiply__", @@ -584,7 +584,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "cannot check if string contains " + typeof(a[0]), 0, "", "", true} } - return strings.Contains(str, a[0].(string)), ArErr{} + return strings.Contains(str, a[0].(ArObject).obj["__value__"].(string)), ArErr{} }} obj.obj["__Subtract__"] = builtinFunc{ "__Subtract__", @@ -595,7 +595,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "cannot subtract " + typeof(a[0]) + " from string", 0, "", "", true} } - return strings.Replace(str, a[0].(string), "", -1), ArErr{} + return strings.Replace(str, a[0].(ArObject).obj["__value__"].(string), "", -1), ArErr{} }} obj.obj["__Divide__"] = builtinFunc{ "__Divide__", @@ -606,7 +606,7 @@ func ArString(str string) ArObject { if typeof(a[0]) != "string" { return nil, ArErr{"TypeError", "cannot divide string by " + typeof(a[0]), 0, "", "", true} } - splitby := a[0].(string) + splitby := a[0].(ArObject).obj["__value__"].(string) output := []any{} splitted := (strings.Split(str, splitby)) for _, v := range splitted {