Skip to content

Commit 727598e

Browse files
committed
fix hex number handling, rewrite regex for numbers, generate int/float types in json values
1 parent ab28d49 commit 727598e

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

compiler/grammar.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def match(self, next):
5353
string_re = StringParser()
5454
kw_re = re.compile(r'(?:true|false|null)')
5555
expr_kw_re = re.compile(r'(?:true|false|null|undefined)')
56-
NUMBER_RE = r"(?:(?:(?:\d*\.\d+)|(?:\d+\.?))(?:e[+-]?\d+)?|(?:0x)?[0-9]+)"
56+
NUMBER_RE = r"0x[0-9a-f]+|(?:\d+([.]\d*)?(?:e[+-]?\d+)?|[.]\d+(?:e[+-]?\d+)?)"
5757
tr_re = re.compile(r"(?:qsTr|qsTranslate|tr|)\(")
5858
number_re = re.compile(NUMBER_RE, re.IGNORECASE)
5959
percent_number_re = re.compile(NUMBER_RE + r'%', re.IGNORECASE)
@@ -680,7 +680,12 @@ def __read_json_value(self):
680680
return value
681681
value = self.maybe(number_re)
682682
if value is not None:
683-
return value
683+
if value.startswith("0x"):
684+
return int(value[2:], 16)
685+
elif "." in value or "e" in value or "E" in value:
686+
return float(value)
687+
else:
688+
return int(value)
684689
if self.maybe(tr_re):
685690
value = self.read(string_re, "Expect tr argument be a string")
686691
self.read(')', "Expect ) after string in tr")

0 commit comments

Comments
 (0)