@@ -1990,6 +1990,41 @@ func builtinContains(i *interpreter, arrv value, ev value) (value, error) {
19901990 return makeValueBoolean (false ), nil
19911991}
19921992
1993+ func builtInObjectRemoveKey (i * interpreter , objv value , keyv value ) (value , error ) {
1994+ obj , err := i .getObject (objv )
1995+ if err != nil {
1996+ return nil , err
1997+ }
1998+ key , err := i .getString (keyv )
1999+ if err != nil {
2000+ return nil , err
2001+ }
2002+
2003+ newFields := make (simpleObjectFieldMap )
2004+ simpleObj := obj .uncached .(* simpleObject )
2005+ for fieldName , fieldVal := range simpleObj .fields {
2006+ if fieldName == key .getGoString () {
2007+ // skip the field which needs to be deleted
2008+ continue
2009+ }
2010+
2011+ newFields [fieldName ] = simpleObjectField {
2012+ hide : fieldVal .hide ,
2013+ field : & bindingsUnboundField {
2014+ inner : fieldVal .field ,
2015+ bindings : simpleObj .upValues ,
2016+ },
2017+ }
2018+ }
2019+
2020+ return makeValueSimpleObject (
2021+ nil ,
2022+ newFields ,
2023+ []unboundField {}, // No asserts allowed
2024+ nil ,
2025+ ), nil
2026+ }
2027+
19932028// Utils for builtins - TODO(sbarzowski) move to a separate file in another commit
19942029
19952030type builtin interface {
@@ -2256,6 +2291,7 @@ var funcBuiltins = buildBuiltinMap([]builtin{
22562291 & binaryBuiltin {name : "equals" , function : builtinEquals , params : ast.Identifiers {"x" , "y" }},
22572292 & binaryBuiltin {name : "objectFieldsEx" , function : builtinObjectFieldsEx , params : ast.Identifiers {"obj" , "hidden" }},
22582293 & ternaryBuiltin {name : "objectHasEx" , function : builtinObjectHasEx , params : ast.Identifiers {"obj" , "fname" , "hidden" }},
2294+ & binaryBuiltin {name : "objectRemoveKey" , function : builtInObjectRemoveKey , params : ast.Identifiers {"obj" , "key" }},
22592295 & unaryBuiltin {name : "type" , function : builtinType , params : ast.Identifiers {"x" }},
22602296 & unaryBuiltin {name : "char" , function : builtinChar , params : ast.Identifiers {"n" }},
22612297 & unaryBuiltin {name : "codepoint" , function : builtinCodepoint , params : ast.Identifiers {"str" }},
0 commit comments