From 1fe47f9d5550bc0fa6d1431abd4a129f5bc38e63 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Mon, 23 Nov 2020 17:38:03 -0500 Subject: [PATCH] accept-case ./reg-test/cases/case-c-dsl-map-variant-dumps.sh --- go/cases-to-do.txt | 6 ++++++ go/reg-test/expected/case-c-dsl-map-variant-dumps.sh.out | 8 ++------ go/src/miller/dsl/cst/collections.go | 4 +++- go/src/miller/dsl/cst/lvalues.go | 2 +- go/src/miller/dsl/cst/udf.go | 4 ++-- go/src/miller/types/mlrval.go | 4 ++++ 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/go/cases-to-do.txt b/go/cases-to-do.txt index d872a57f6..b9d800d33 100644 --- a/go/cases-to-do.txt +++ b/go/cases-to-do.txt @@ -245,3 +245,9 @@ rrv ./reg-test/cases/case-c-dsl-pythonic-division.sh rrv -C20 ./reg-test/cases/case-c-dsl-local-map-variable-write-read.sh rrv -C1 ./reg-test/cases/case-c-dsl-local-map-variable-write-read.sh + +# ---------------------------------------------------------------- +announce MAP-VARIANT DUMPS + +run_mlr --from $indir/abixy-het put -q 'dump {"a"."b":$a.$b}' +run_mlr --from $indir/abixy-het put -q 'func f(a, b) { return {"a"."b":a.b} } dump f($a, $b)' diff --git a/go/reg-test/expected/case-c-dsl-map-variant-dumps.sh.out b/go/reg-test/expected/case-c-dsl-map-variant-dumps.sh.out index df7f2263c..aff6b34e9 100644 --- a/go/reg-test/expected/case-c-dsl-map-variant-dumps.sh.out +++ b/go/reg-test/expected/case-c-dsl-map-variant-dumps.sh.out @@ -28,9 +28,7 @@ mlr --from ./reg-test/input/abixy-het put -q dump {"a"."b":$a.$b} { "ab": "zeewye" } -{ - "ab": -} +{} { "ab": "panwye" } @@ -60,9 +58,7 @@ mlr --from ./reg-test/input/abixy-het put -q func f(a, b) { return {"a"."b":a.b} { "ab": "zeewye" } -{ - "ab": -} +{} { "ab": "panwye" } diff --git a/go/src/miller/dsl/cst/collections.go b/go/src/miller/dsl/cst/collections.go index eac084a33..90c88753b 100644 --- a/go/src/miller/dsl/cst/collections.go +++ b/go/src/miller/dsl/cst/collections.go @@ -168,7 +168,9 @@ func (this *MapLiteralNode) Evaluate(state *State) types.Mlrval { mkey := evaluablePair.Key.Evaluate(state) mvalue := evaluablePair.Value.Evaluate(state) - mlrval.MapPut(&mkey, &mvalue) + if !mvalue.IsAbsent() { + mlrval.MapPut(&mkey, &mvalue) + } } return mlrval diff --git a/go/src/miller/dsl/cst/lvalues.go b/go/src/miller/dsl/cst/lvalues.go index bfc3b3801..3246b61d3 100644 --- a/go/src/miller/dsl/cst/lvalues.go +++ b/go/src/miller/dsl/cst/lvalues.go @@ -475,7 +475,7 @@ func (this *RootNode) BuildLocalVariableLvalueNode(astNode *dsl.ASTNode) (IAssig lib.InternalCodingErrorIf(astNode.Type != dsl.NodeTypeLocalVariable) variableName := string(astNode.Token.Lit) - typeName := "var" + typeName := "any" frameBind := false if astNode.Children != nil { // typed, like 'num x = 3' typeNode := astNode.Children[0] diff --git a/go/src/miller/dsl/cst/udf.go b/go/src/miller/dsl/cst/udf.go index fa73058db..0de7039dd 100644 --- a/go/src/miller/dsl/cst/udf.go +++ b/go/src/miller/dsl/cst/udf.go @@ -279,7 +279,7 @@ func (this *RootNode) BuildAndInstallUDF(astNode *dsl.ASTNode) error { parameterListASTNode := astNode.Children[0] functionBodyASTNode := astNode.Children[1] - returnValueTypeName := "var" + returnValueTypeName := "any" if len(astNode.Children) == 3 { typeNode := astNode.Children[2] lib.InternalCodingErrorIf(typeNode.Type != dsl.NodeTypeTypedecl) @@ -302,7 +302,7 @@ func (this *RootNode) BuildAndInstallUDF(astNode *dsl.ASTNode) error { lib.InternalCodingErrorIf(typeGatedParameterNameASTNode.Type != dsl.NodeTypeParameterName) variableName := string(typeGatedParameterNameASTNode.Token.Lit) - typeName := "var" + typeName := "any" if typeGatedParameterNameASTNode.Children != nil { // typed parameter like 'num x' lib.InternalCodingErrorIf(len(typeGatedParameterNameASTNode.Children) != 1) typeNode := typeGatedParameterNameASTNode.Children[0] diff --git a/go/src/miller/types/mlrval.go b/go/src/miller/types/mlrval.go index feecf6c28..b6226e0c2 100644 --- a/go/src/miller/types/mlrval.go +++ b/go/src/miller/types/mlrval.go @@ -120,6 +120,9 @@ const MT_TYPE_MASK_MAP = 1 << MT_MAP const MT_TYPE_MASK_VAR = (1 << MT_VOID) | (1 << MT_STRING) | (1 << MT_INT) | (1 << MT_FLOAT) | (1 << MT_BOOL) | (1 << MT_ARRAY) | (1 << MT_MAP) +// Not exposed in userspace +const MT_TYPE_MASK_ANY = (1 << MT_ERROR) | (1 << MT_ABSENT) | MT_TYPE_MASK_VAR + var typeNameToMaskMap = map[string]int{ "var": MT_TYPE_MASK_VAR, "str": MT_TYPE_MASK_STRING, @@ -129,6 +132,7 @@ var typeNameToMaskMap = map[string]int{ "bool": MT_TYPE_MASK_BOOL, "arr": MT_TYPE_MASK_ARRAY, "map": MT_TYPE_MASK_MAP, + "any": MT_TYPE_MASK_ANY, } func TypeNameToMask(typeName string) (mask int, present bool) {