accept-case ./reg-test/cases/case-c-dsl-map-variant-dumps.sh

This commit is contained in:
John Kerl 2020-11-23 17:38:03 -05:00
parent eb1f989324
commit 1fe47f9d55
6 changed files with 18 additions and 10 deletions

View file

@ -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)'

View file

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

View file

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

View file

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

View file

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

View file

@ -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) {