]> Cypherpunks repositories - gostls13.git/commitdiff
go/constant: improved fatal error messages
authorRobert Griesemer <gri@golang.org>
Mon, 7 Nov 2016 18:43:25 +0000 (10:43 -0800)
committerRobert Griesemer <gri@golang.org>
Mon, 7 Nov 2016 19:09:21 +0000 (19:09 +0000)
Fixes #17812.

Change-Id: I08202165dd3f72ae04420e7b6129b8b689e74f5c
Reviewed-on: https://go-review.googlesource.com/32870
Reviewed-by: Alan Donovan <adonovan@google.com>
src/go/constant/value.go

index 85f53b4d169f53e7f0a97ce3f5af82888df893ee..005b9990071e24dcdff33e117b14250e083ed8e5 100644 (file)
@@ -848,6 +848,8 @@ Error:
 
 func ord(x Value) int {
        switch x.(type) {
+       default:
+               return -1 // force invalid value into "x position" in match
        case unknownVal:
                return 0
        case boolVal, stringVal:
@@ -862,8 +864,6 @@ func ord(x Value) int {
                return 5
        case complexVal:
                return 6
-       default:
-               panic("unreachable")
        }
 }
 
@@ -880,9 +880,6 @@ func match(x, y Value) (_, _ Value) {
        // ord(x) <= ord(y)
 
        switch x := x.(type) {
-       case unknownVal:
-               return x, x
-
        case boolVal, stringVal, complexVal:
                return x, y
 
@@ -921,6 +918,7 @@ func match(x, y Value) (_, _ Value) {
                case complexVal:
                        return vtoc(x), y
                }
+
        case floatVal:
                switch y := y.(type) {
                case floatVal:
@@ -930,7 +928,7 @@ func match(x, y Value) (_, _ Value) {
                }
        }
 
-       panic("unreachable")
+       return x, x // force unknown and invalid values into "x position" in callers of match
 }
 
 // BinaryOp returns the result of the binary expression x op y.
@@ -1171,7 +1169,7 @@ func cmpZero(x int, op token.Token) bool {
        case token.GEQ:
                return x >= 0
        }
-       panic("unreachable")
+       panic(fmt.Sprintf("invalid comparison %v %s 0", x, op))
 }
 
 // Compare returns the result of the comparison x op y.