fix delete keyword not doing anything when deleting a variable, and move length calculation to only when needed

This commit is contained in:
2024-05-30 17:03:29 +01:00
parent 5afa0b10c7
commit 7aadb812e4
5 changed files with 120 additions and 26 deletions

View File

@@ -273,6 +273,54 @@ func Map(m anymap) ArObject {
return nil, ArErr{}
},
},
"__deleteindex__": builtinFunc{
"__deleteindex__",
func(args ...any) (any, ArErr) {
if len(args) != 1 {
return nil, ArErr{
TYPE: "Type Error",
message: "expected 1 argument, got " + fmt.Sprint(len(args)),
EXISTS: true,
}
}
if isUnhashable(args[0]) {
return nil, ArErr{
TYPE: "Runtime Error",
message: "unhashable type: " + typeof(args[0]),
EXISTS: true,
}
}
key := ArValidToAny(args[0])
mutex.RLock()
if _, ok := m[key]; !ok {
mutex.RUnlock()
return nil, ArErr{
TYPE: "KeyError",
message: "key " + fmt.Sprint(key) + " not found",
EXISTS: true,
}
}
mutex.RUnlock()
listenersMutex.RLock()
if _, ok := listeners[key]; ok {
for _, v := range listeners[key] {
runCall(
call{
Callable: v,
Args: []any{},
},
stack{},
0,
)
}
}
listenersMutex.RUnlock()
mutex.Lock()
delete(m, key)
mutex.Unlock()
return nil, ArErr{}
},
},
"__getindex__": builtinFunc{
"__getindex__",
func(args ...any) (any, ArErr) {
@@ -457,6 +505,7 @@ func Map(m anymap) ArObject {
return ArArray(keys), ArErr{}
},
}
obj.obj["__Boolean__"] = builtinFunc{
"__Boolean__",
func(args ...any) (any, ArErr) {