Fixed error message for types in match exprs not being unions

This commit is contained in:
Sasha Koshka 2024-03-26 01:12:31 -04:00
parent 78ea6e45b2
commit eb2c1c8aed
2 changed files with 11 additions and 9 deletions

View File

@ -68,7 +68,7 @@ U: (| Int F64)
func TestMatchErrNotUnion (test *testing.T) {
testStringErr (test,
"type U is not a union", 3, 24,
"type U is not a union", 3, 30,
`
U: Int
[matchToInt u:U]:Int = match u

View File

@ -549,7 +549,7 @@ func (this *Tree) analyzeOperation (
case entity.OperatorLeftShift, entity.OperatorRightShift:
if len(operation.Arguments) != 2 { return wrongArgCount() }
if !isInteger(into) { return wrongInto() }
if !isInteger(into) { return wrongInto() }
arg, err := this.analyzeExpression(into, mode, operation.Arguments[0])
if err != nil { return nil, err }
@ -594,7 +594,8 @@ func (this *Tree) analyzeBlock (
if len(block.Steps) == 0 && into != nil {
return nil, errors.Errorf (
block.Position(), "block must have at least one statement")
block.Position(),
"block must have at least one statement")
}
final := len(block.Steps) - 1
@ -603,7 +604,8 @@ func (this *Tree) analyzeBlock (
expression, ok := step.(entity.Expression)
if !ok {
return nil, errors.Errorf (
block.Position(), "expected expression")
block.Position(),
"expected expression")
}
step, err := this.analyzeExpression(into, strict, expression)
@ -642,14 +644,16 @@ func (this *Tree) analyzeMemberAccess (
referenced, ok := ReduceToBase(sourceTypeAny.Referenced).(*entity.TypeStruct)
if !ok {
return nil, errors.Errorf (
access.Position(), "cannot access members of %v",
access.Position(),
"cannot access members of %v",
source)
}
sourceType = referenced
qualifiedSourceType = sourceTypeAny.Referenced
default:
return nil, errors.Errorf (
access.Position(), "cannot access members of %v",
access.Position(),
"cannot access members of %v",
source)
}
@ -723,10 +727,8 @@ func (this *Tree) analyzeMatch (
match.Value = value
rawUnion, ok := this.isUnion(value.Type())
if !ok {
// FIXME: add Position() method to Expression, then change this
// error message (and others) #53
return nil, errors.Errorf (
match.Position(), "type %v is not a union",
match.Value.Position(), "type %v is not a union",
value.Type())
}