From 29014b6ad551e2d2e1b690e05db05779ce0b5be6 Mon Sep 17 00:00:00 2001 From: William Bell <> Date: Tue, 14 Mar 2023 10:48:38 +0000 Subject: [PATCH] attempt to fix index step bug --- .replit | 14 ++++++++++++++ replit.nix | 6 ++++++ src/getIndex.go | 36 ++++++++++++++++++++++++++++++++---- 3 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 .replit create mode 100644 replit.nix diff --git a/.replit b/.replit new file mode 100644 index 0000000..b493045 --- /dev/null +++ b/.replit @@ -0,0 +1,14 @@ +run = "./run" +hidden = ["Makefile", "main"] + +[languages.go] +pattern = "**/*.go" + +[languages.go.languageServer] +start = "gopls" + +[nix] +channel = "stable-22_11" + +[gitHubImport] +requiredFiles = [".replit", "replit.nix"] diff --git a/replit.nix b/replit.nix new file mode 100644 index 0000000..0772644 --- /dev/null +++ b/replit.nix @@ -0,0 +1,6 @@ +{ pkgs }: { + deps = [ + pkgs.go + pkgs.gopls + ]; +} \ No newline at end of file diff --git a/src/getIndex.go b/src/getIndex.go index b04ae6e..25300e7 100644 --- a/src/getIndex.go +++ b/src/getIndex.go @@ -211,22 +211,37 @@ func mapGet(r ArMapGet, stack stack, stacklevel int) (any, ArErr) { } if !slice { return m[startindex], ArErr{} + } else if step == 1 { + return m[startindex:endindex], ArErr{} } - fmt.Println(startindex, endindex, step) - return m[startindex:endindex], ArErr{} + output := ArArray{} + for i := startindex; i < endindex; i += step { + output = append(output, output[i]) + } + return output, ArErr{} case string: startindex := 0 endindex := 1 step := 1 + slice := false if !r.index { key, err := runVal(r.start, stack, stacklevel+1) if err.EXISTS { return nil, err } - if key == "length" { + switch key { + case "length": return newNumber().SetInt64(int64(len(m))), ArErr{} } + return nil, ArErr{ + "IndexError", + "" + anyToArgon(key, true, true, 3, 0, false, 0) + " does not exist in array", + r.line, + r.path, + r.code, + true, + } } if r.start != nil { sindex, err := runVal(r.start, stack, stacklevel+1) @@ -272,6 +287,7 @@ func mapGet(r ArMapGet, stack stack, stacklevel int) (any, ArErr) { true, } } + slice = true num := eindex.(number) if !num.IsInt() { return nil, ArErr{ @@ -302,6 +318,7 @@ func mapGet(r ArMapGet, stack stack, stacklevel int) (any, ArErr) { true, } } + slice = true num := step.(number) if !num.IsInt() { return nil, ArErr{ @@ -355,7 +372,17 @@ func mapGet(r ArMapGet, stack stack, stacklevel int) (any, ArErr) { true, } } - return string(([]byte(m))[startindex:endindex:step]), ArErr{} + fmt.Println(startindex, endindex,step) + if !slice { + return string(m[startindex]), ArErr{} + } else if step == 1 { + return string(m[startindex:endindex]), ArErr{} + } + output := []byte{} + for i := startindex; i < endindex; i += step { + output = append(output, output[i]) + } + return string(output), ArErr{} } key, err := runVal(r.start, stack, stacklevel+1) @@ -421,6 +448,7 @@ func indexGetParse(code UNPARSEcode, index int, codelines []UNPARSEcode) (ArMapG } continue } + fmt.Println(args) if len(args) > 3 { return ArMapGet{}, false, ArErr{ "SyntaxError",