From 3fc195c5b27ea82d20beae504b01d947c19bbdda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Lu=C3=ADs=20Vaz=20Silva?= Date: Wed, 22 Feb 2023 15:43:32 -0300 Subject: [PATCH] Improve handling of field names in error messages during Map/MapIterator compilation --- src/common/scripting/frontend/zcc_compile.cpp | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/common/scripting/frontend/zcc_compile.cpp b/src/common/scripting/frontend/zcc_compile.cpp index db69835f83..a21fd210a1 100644 --- a/src/common/scripting/frontend/zcc_compile.cpp +++ b/src/common/scripting/frontend/zcc_compile.cpp @@ -1866,19 +1866,17 @@ PType *ZCCCompiler::DetermineType(PType *outertype, ZCC_TreeNode *field, FName n auto keytype = DetermineType(outertype, field, name, mtype->KeyType, false, false); auto valuetype = DetermineType(outertype, field, name, mtype->ValueType, false, false); - if (keytype->GetRegType() == REGT_INT) + if (keytype->GetRegType() != REGT_STRING && !(keytype->GetRegType() == REGT_INT && keytype->Size == 4)) { - if (keytype->Size != 4) + if(name != NAME_None) + { + Error(field, "%s : Map<%s , ...> not implemented yet", name.GetChars(), keytype->DescriptiveName()); + } + else { Error(field, "Map<%s , ...> not implemented yet", keytype->DescriptiveName()); - break; } } - else if (keytype->GetRegType() != REGT_STRING) - { - Error(field, "Map<%s , ...> not implemented yet", keytype->DescriptiveName()); - break; - } switch(valuetype->GetRegType()) { @@ -1888,14 +1886,20 @@ PType *ZCCCompiler::DetermineType(PType *outertype, ZCC_TreeNode *field, FName n case REGT_POINTER: if (valuetype->GetRegCount() > 1) { - Error(field, "%s : Base type for map value types must be integral, but got %s", name.GetChars(), valuetype->DescriptiveName()); + default: + if(name != NAME_None) + { + Error(field, "%s : Base type for map value types must be integral, but got %s", name.GetChars(), valuetype->DescriptiveName()); + } + else + { + Error(field, "Base type for map value types must be integral, but got %s", valuetype->DescriptiveName()); + } break; } retval = NewMap(keytype, valuetype); break; - default: - Error(field, "%s: Base type for map value types must be integral, but got %s", name.GetChars(), valuetype->DescriptiveName()); } break; @@ -1913,17 +1917,17 @@ PType *ZCCCompiler::DetermineType(PType *outertype, ZCC_TreeNode *field, FName n auto keytype = DetermineType(outertype, field, name, mtype->KeyType, false, false); auto valuetype = DetermineType(outertype, field, name, mtype->ValueType, false, false); - if (keytype->GetRegType() == REGT_INT) + if (keytype->GetRegType() != REGT_STRING && !(keytype->GetRegType() == REGT_INT && keytype->Size == 4)) { - if (keytype->Size != 4) + if(name != NAME_None) + { + Error(field, "%s : MapIterator<%s , ...> not implemented yet", name.GetChars(), keytype->DescriptiveName()); + } + else { Error(field, "MapIterator<%s , ...> not implemented yet", keytype->DescriptiveName()); } } - else if (keytype->GetRegType() != REGT_STRING) - { - Error(field, "MapIterator<%s , ...> not implemented yet", keytype->DescriptiveName()); - } switch(valuetype->GetRegType()) { @@ -1933,13 +1937,19 @@ PType *ZCCCompiler::DetermineType(PType *outertype, ZCC_TreeNode *field, FName n case REGT_POINTER: if (valuetype->GetRegCount() > 1) { - Error(field, "%s : Base type for map value types must be integral, but got %s", name.GetChars(), valuetype->DescriptiveName()); + default: + if(name != NAME_None) + { + Error(field, "%s : Base type for map value types must be integral, but got %s", name.GetChars(), valuetype->DescriptiveName()); + } + else + { + Error(field, "Base type for map value types must be integral, but got %s", valuetype->DescriptiveName()); + } break; } retval = NewMapIterator(keytype, valuetype); break; - default: - Error(field, "%s: Base type for map value types must be integral, but got %s", name.GetChars(), valuetype->DescriptiveName()); } break; }