1 // Copyright 2023 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4 5 // This file contains various functionality that is
6 // different between go/types and types2. Factoring
7 // out this code allows more of the rest of the code
8 // to be shared.
9 10 package types
11 12 import (
13 "go/ast"
14 "go/constant"
15 "go/token"
16 )
17 18 const isTypes2 = false
19 20 // cmpPos compares the positions p and q and returns a result r as follows:
21 //
22 // r < 0: p is before q
23 // r == 0: p and q are the same position (but may not be identical)
24 // r > 0: p is after q
25 //
26 // If p and q are in different files, p is before q if the filename
27 // of p sorts lexicographically before the filename of q.
28 func cmpPos(p, q token.Pos) int { return int(p - q) }
29 30 // hasDots reports whether the last argument in the call is followed by ...
31 func hasDots(call *ast.CallExpr) bool { return call.Ellipsis.IsValid() }
32 33 // dddErrPos returns the positioner for reporting an invalid ... use in a call.
34 func dddErrPos(call *ast.CallExpr) positioner { return atPos(call.Ellipsis) }
35 36 // isdddArray reports whether atyp is of the form [...]E.
37 func isdddArray(atyp *ast.ArrayType) bool {
38 if atyp.Len != nil {
39 if ddd, _ := atyp.Len.(*ast.Ellipsis); ddd != nil && ddd.Elt == nil {
40 return true
41 }
42 }
43 return false
44 }
45 46 // argErrPos returns positioner for reporting an invalid argument count.
47 func argErrPos(call *ast.CallExpr) positioner { return inNode(call, call.Rparen) }
48 49 // startPos returns the start position of node n.
50 func startPos(n ast.Node) token.Pos { return n.Pos() }
51 52 // endPos returns the position of the first character immediately after node n.
53 func endPos(n ast.Node) token.Pos { return n.End() }
54 55 // makeFromLiteral returns the constant value for the given literal string and kind.
56 func makeFromLiteral(lit string, kind token.Token) constant.Value {
57 return constant.MakeFromLiteral(lit, kind, 0)
58 }
59