Bladeren bron

core/asm: fix hex number lexing (#14861)

njupt-moon 8 jaren geleden
bovenliggende
commit
53f3460ab5
2 gewijzigde bestanden met toevoegingen van 41 en 6 verwijderingen
  1. 40 5
      core/asm/lex_test.go
  2. 1 1
      core/asm/lexer.go

+ 40 - 5
core/asm/lex_test.go

@@ -16,7 +16,10 @@
 
 package asm
 
-import "testing"
+import (
+	"reflect"
+	"testing"
+)
 
 func lexAll(src string) []token {
 	ch := Lex("test.asm", []byte(src), false)
@@ -28,9 +31,41 @@ func lexAll(src string) []token {
 	return tokens
 }
 
-func TestComment(t *testing.T) {
-	tokens := lexAll(";; this is a comment")
-	if len(tokens) != 2 { // {new line, EOF}
-		t.Error("expected no tokens")
+func TestLexer(t *testing.T) {
+	tests := []struct {
+		input  string
+		tokens []token
+	}{
+		{
+			input:  ";; this is a comment",
+			tokens: []token{{typ: lineStart}, {typ: eof}},
+		},
+		{
+			input:  "0x12345678",
+			tokens: []token{{typ: lineStart}, {typ: number, text: "0x12345678"}, {typ: eof}},
+		},
+		{
+			input:  "0x123ggg",
+			tokens: []token{{typ: lineStart}, {typ: number, text: "0x123"}, {typ: element, text: "ggg"}, {typ: eof}},
+		},
+		{
+			input:  "12345678",
+			tokens: []token{{typ: lineStart}, {typ: number, text: "12345678"}, {typ: eof}},
+		},
+		{
+			input:  "123abc",
+			tokens: []token{{typ: lineStart}, {typ: number, text: "123"}, {typ: element, text: "abc"}, {typ: eof}},
+		},
+		{
+			input:  "0123abc",
+			tokens: []token{{typ: lineStart}, {typ: number, text: "0123"}, {typ: element, text: "abc"}, {typ: eof}},
+		},
+	}
+
+	for _, test := range tests {
+		tokens := lexAll(test.input)
+		if !reflect.DeepEqual(tokens, test.tokens) {
+			t.Errorf("input %q\ngot:  %+v\nwant: %+v", test.input, tokens, test.tokens)
+		}
 	}
 }

+ 1 - 1
core/asm/lexer.go

@@ -254,7 +254,7 @@ func lexInsideString(l *lexer) stateFn {
 
 func lexNumber(l *lexer) stateFn {
 	acceptance := Numbers
-	if l.accept("0") && l.accept("xX") {
+	if l.accept("0") || l.accept("xX") {
 		acceptance = HexadecimalNumbers
 	}
 	l.acceptRun(acceptance)