attempt to fix index step bug

This commit is contained in:
William Bell
2023-03-14 10:48:38 +00:00
parent d0abbba7c1
commit 29014b6ad5
3 changed files with 52 additions and 4 deletions

14
.replit Normal file
View File

@@ -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"]

6
replit.nix Normal file
View File

@@ -0,0 +1,6 @@
{ pkgs }: {
deps = [
pkgs.go
pkgs.gopls
];
}

View File

@@ -211,22 +211,37 @@ func mapGet(r ArMapGet, stack stack, stacklevel int) (any, ArErr) {
} }
if !slice { if !slice {
return m[startindex], ArErr{} return m[startindex], ArErr{}
} else if step == 1 {
return m[startindex:endindex], ArErr{}
} }
fmt.Println(startindex, endindex, step) output := ArArray{}
return m[startindex:endindex], ArErr{} for i := startindex; i < endindex; i += step {
output = append(output, output[i])
}
return output, ArErr{}
case string: case string:
startindex := 0 startindex := 0
endindex := 1 endindex := 1
step := 1 step := 1
slice := false
if !r.index { if !r.index {
key, err := runVal(r.start, stack, stacklevel+1) key, err := runVal(r.start, stack, stacklevel+1)
if err.EXISTS { if err.EXISTS {
return nil, err return nil, err
} }
if key == "length" { switch key {
case "length":
return newNumber().SetInt64(int64(len(m))), ArErr{} 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 { if r.start != nil {
sindex, err := runVal(r.start, stack, stacklevel+1) sindex, err := runVal(r.start, stack, stacklevel+1)
@@ -272,6 +287,7 @@ func mapGet(r ArMapGet, stack stack, stacklevel int) (any, ArErr) {
true, true,
} }
} }
slice = true
num := eindex.(number) num := eindex.(number)
if !num.IsInt() { if !num.IsInt() {
return nil, ArErr{ return nil, ArErr{
@@ -302,6 +318,7 @@ func mapGet(r ArMapGet, stack stack, stacklevel int) (any, ArErr) {
true, true,
} }
} }
slice = true
num := step.(number) num := step.(number)
if !num.IsInt() { if !num.IsInt() {
return nil, ArErr{ return nil, ArErr{
@@ -355,7 +372,17 @@ func mapGet(r ArMapGet, stack stack, stacklevel int) (any, ArErr) {
true, 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) key, err := runVal(r.start, stack, stacklevel+1)
@@ -421,6 +448,7 @@ func indexGetParse(code UNPARSEcode, index int, codelines []UNPARSEcode) (ArMapG
} }
continue continue
} }
fmt.Println(args)
if len(args) > 3 { if len(args) > 3 {
return ArMapGet{}, false, ArErr{ return ArMapGet{}, false, ArErr{
"SyntaxError", "SyntaxError",