diff --git a/ets2panda/checker/ets/typeCheckingHelpers.cpp b/ets2panda/checker/ets/typeCheckingHelpers.cpp index 01d4584093e6379412ffa5d93baa8b310f8fef68..c3cb5f326317f205848e643100d8a1392247583f 100644 --- a/ets2panda/checker/ets/typeCheckingHelpers.cpp +++ b/ets2panda/checker/ets/typeCheckingHelpers.cpp @@ -685,7 +685,9 @@ Type *ETSChecker::GuaranteedTypeForUnionFieldAccess(ir::MemberExpression *member const auto &types = etsUnionType->ConstituentTypes(); ArenaVector apparentTypes {ProgramAllocator()->Adapter()}; const auto *prop = memberExpression->Property(); - const auto &propertyName = prop->IsIdentifier() ? prop->AsIdentifier()->Name() : prop->AsStringLiteral()->Str(); + const auto &propertyName = prop->IsIdentifier() ? prop->AsIdentifier()->Name() + : prop->IsStringLiteral() ? prop->AsStringLiteral()->Str() + : ""; for (auto *type : types) { auto searchFlags = PropertySearchFlags::SEARCH_FIELD | PropertySearchFlags::SEARCH_METHOD | PropertySearchFlags::SEARCH_IN_BASE; diff --git a/ets2panda/test/ast/compiler/ets/union_field_access.ets b/ets2panda/test/ast/compiler/ets/union_field_access.ets index 33cb90075f7fa1295cef7c0d4e22a26a10d9202c..942376e3ac74bc72b8d8a04a607f0df2e3f6a5f3 100644 --- a/ets2panda/test/ast/compiler/ets/union_field_access.ets +++ b/ets2panda/test/ast/compiler/ets/union_field_access.ets @@ -25,7 +25,19 @@ interface TypeB { } function IfWithString(val: U) { - return /* @@ label */val['kind'] === 'B' + return val['kind'] === 'B' } -/* @@@ label Error TypeError: Indexed access is not supported for such expression type. */ +(a ? delete arguments==({: false, Float64Array: []}) : [ArrayBuffer[false]]) + +/* @@? 28:12 Error TypeError: Indexed access is not supported for such expression type. */ +/* @@? 31:1 Error TypeError: Indexed access is not supported for such expression type. */ +/* @@? 31:2 Error TypeError: Unresolved reference a */ +/* @@? 31:6 Error TypeError: Unresolved reference delete */ +/* @@? 31:13 Error SyntaxError: Unexpected token. */ +/* @@? 31:13 Error TypeError: Unresolved reference arguments */ +/* @@? 31:24 Error TypeError: need to specify target type for class composite */ +/* @@? 31:26 Error SyntaxError: Unexpected token. */ +/* @@? 31:28 Error SyntaxError: Unexpected token. */ +/* @@? 31:54 Error SyntaxError: Unexpected token, expected ')'. */ +/* @@? 31:76 Error SyntaxError: Unexpected token ')'. */