Skip to content

Commit d7b43b9

Browse files
committed
Fix parser for 0x6E int
1 parent 6f43069 commit d7b43b9

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

parser/parser.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -290,20 +290,20 @@ func (p *parser) parsePrimaryExpression() Node {
290290
case Number:
291291
p.next()
292292
value := strings.Replace(token.Value, "_", "", -1)
293-
if strings.ContainsAny(value, ".eE") {
294-
number, err := strconv.ParseFloat(value, 64)
293+
if strings.Contains(value, "x") {
294+
number, err := strconv.ParseInt(value, 0, 64)
295295
if err != nil {
296-
p.error("invalid float literal: %v", err)
296+
p.error("invalid hex literal: %v", err)
297297
}
298-
node := &FloatNode{Value: number}
298+
node := &IntegerNode{Value: int(number)}
299299
node.SetLocation(token.Location)
300300
return node
301-
} else if strings.Contains(value, "x") {
302-
number, err := strconv.ParseInt(value, 0, 64)
301+
} else if strings.ContainsAny(value, ".eE") {
302+
number, err := strconv.ParseFloat(value, 64)
303303
if err != nil {
304-
p.error("invalid hex literal: %v", err)
304+
p.error("invalid float literal: %v", err)
305305
}
306-
node := &IntegerNode{Value: int(number)}
306+
node := &FloatNode{Value: number}
307307
node.SetLocation(token.Location)
308308
return node
309309
} else {

parser/parser_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ func TestParse(t *testing.T) {
3131
"0xFF",
3232
&ast.IntegerNode{Value: 255},
3333
},
34+
{
35+
"0x6E",
36+
&ast.IntegerNode{Value: 110},
37+
},
3438
{
3539
"10_000_000",
3640
&ast.IntegerNode{Value: 10_000_000},

0 commit comments

Comments
 (0)