This implements expressions such as "-5" and "-5 - 2", in other words,
negative numbers.
Этот коммит содержится в:
Ayke van Laethem 2021-05-20 16:43:22 +02:00 коммит произвёл Ron Evans
родитель 70f8eeaca0
коммит 711889bc3f
4 изменённых файлов: 19 добавлений и 0 удалений

Просмотреть файл

@ -39,6 +39,7 @@ func init() {
token.STRING: parseBasicLit,
token.CHAR: parseBasicLit,
token.LPAREN: parseParenExpr,
token.SUB: parseUnaryExpr,
}
}
@ -131,6 +132,17 @@ func parseBinaryExpr(t *tokenizer, left ast.Expr) (ast.Expr, *scanner.Error) {
return expression, err
}
func parseUnaryExpr(t *tokenizer) (ast.Expr, *scanner.Error) {
expression := &ast.UnaryExpr{
OpPos: t.curPos,
Op: t.curToken,
}
t.Next()
x, err := parseConstExpr(t, precedencePrefix)
expression.X = x
return expression, err
}
// unexpectedToken returns an error of the form "unexpected token FOO, expected
// BAR".
func unexpectedToken(t *tokenizer, expected token.Token) *scanner.Error {

Просмотреть файл

@ -44,6 +44,10 @@ func TestParseConst(t *testing.T) {
{`(1 - 2) * 3`, `(1 - 2) * 3`},
{`1 * 2 - 3`, `1*2 - 3`},
{`1 * (2 - 3)`, `1 * (2 - 3)`},
// Unary operators.
{`-5`, `-5`},
{`-5-2`, `-5 - 2`},
{`5 - - 2`, `5 - -2`},
} {
fset := token.NewFileSet()
startPos := fset.AddFile("", -1, 1000).Pos(0)

2
testdata/cgo/main.go предоставленный
Просмотреть файл

@ -6,6 +6,7 @@ int fortytwo(void);
int mul(int, int);
#include <string.h>
#cgo CFLAGS: -DSOME_CONSTANT=17
#define someDefine -5 + 2 * 7
*/
import "C"
@ -26,6 +27,7 @@ func main() {
println("defined floats:", C.CONST_FLOAT, C.CONST_FLOAT2)
println("defined string:", C.CONST_STRING)
println("defined char:", C.CONST_CHAR)
println("defined expr:", C.someDefine)
var ptr C.intPointer
var n C.int = 15
ptr = C.intPointer(&n)

1
testdata/cgo/out.txt предоставленный
Просмотреть файл

@ -8,6 +8,7 @@ defined ints: 5 5
defined floats: +5.800000e+000 +5.800000e+000
defined string: defined string
defined char: 99
defined expr: 9
15: 15
25: 25
callback 1: 50