From fd2823636820e995f0d1c4370542ee1dbfc55442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Nihlg=C3=A5rd?= Date: Wed, 30 May 2018 09:40:35 +0200 Subject: [PATCH 1/2] Multi byte characters should not be treated as part of an operator --- compiler/lexer.nim | 2 +- lib/packages/docutils/highlite.nim | 2 +- tests/parser/tunicodeidents.nim | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 tests/parser/tunicodeidents.nim diff --git a/compiler/lexer.nim b/compiler/lexer.nim index 5915619877..d498cf4afa 100644 --- a/compiler/lexer.nim +++ b/compiler/lexer.nim @@ -25,7 +25,7 @@ const SymChars*: set[char] = {'a'..'z', 'A'..'Z', '0'..'9', '\x80'..'\xFF'} SymStartChars*: set[char] = {'a'..'z', 'A'..'Z', '\x80'..'\xFF'} OpChars*: set[char] = {'+', '-', '*', '/', '\\', '<', '>', '!', '?', '^', '.', - '|', '=', '%', '&', '$', '@', '~', ':', '\x80'..'\xFF'} + '|', '=', '%', '&', '$', '@', '~', ':'} # don't forget to update the 'highlite' module if these charsets should change diff --git a/lib/packages/docutils/highlite.nim b/lib/packages/docutils/highlite.nim index 4f1264c9ed..fbd2d7ecac 100644 --- a/lib/packages/docutils/highlite.nim +++ b/lib/packages/docutils/highlite.nim @@ -130,7 +130,7 @@ proc nimNumber(g: var GeneralTokenizer, position: int): int = const OpChars = {'+', '-', '*', '/', '\\', '<', '>', '!', '?', '^', '.', - '|', '=', '%', '&', '$', '@', '~', ':', '\x80'..'\xFF'} + '|', '=', '%', '&', '$', '@', '~', ':'} proc nimNextToken(g: var GeneralTokenizer) = const diff --git a/tests/parser/tunicodeidents.nim b/tests/parser/tunicodeidents.nim new file mode 100644 index 0000000000..3347eb7a95 --- /dev/null +++ b/tests/parser/tunicodeidents.nim @@ -0,0 +1,11 @@ +discard """ + action: run +""" + +# #7884 + +type Obj = object + ö: int + +let o = Obj(ö: 1) +doAssert o.ö == 1 From c69b88688fe9a531a88d693e9815af9caaf21396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Nihlg=C3=A5rd?= Date: Tue, 5 Jun 2018 21:05:13 +0200 Subject: [PATCH 2/2] Combine some of the lexer tests into a single file --- tests/lexer/thexlit.nim | 12 ------------ tests/lexer/thexrange.nim | 8 -------- tests/lexer/tlexermisc.nim | 27 +++++++++++++++++++++++++++ tests/parser/tunicodeidents.nim | 11 ----------- 4 files changed, 27 insertions(+), 31 deletions(-) delete mode 100644 tests/lexer/thexlit.nim delete mode 100644 tests/lexer/thexrange.nim create mode 100644 tests/lexer/tlexermisc.nim delete mode 100644 tests/parser/tunicodeidents.nim diff --git a/tests/lexer/thexlit.nim b/tests/lexer/thexlit.nim deleted file mode 100644 index 2b7f0a40e0..0000000000 --- a/tests/lexer/thexlit.nim +++ /dev/null @@ -1,12 +0,0 @@ -discard """ - file: "thexlit.nim" - output: "equal" -""" - -var t=0x950412DE - -if t==0x950412DE: - echo "equal" -else: - echo "not equal" - diff --git a/tests/lexer/thexrange.nim b/tests/lexer/thexrange.nim deleted file mode 100644 index 461e41dfde..0000000000 --- a/tests/lexer/thexrange.nim +++ /dev/null @@ -1,8 +0,0 @@ - -type - TArray = array[0x0012..0x0013, int] - -var a: TArray - -echo a[0x0012] #OUT 0 - diff --git a/tests/lexer/tlexermisc.nim b/tests/lexer/tlexermisc.nim new file mode 100644 index 0000000000..3e3993599c --- /dev/null +++ b/tests/lexer/tlexermisc.nim @@ -0,0 +1,27 @@ +discard """ + action: run + output: "equal" +""" + +var t=0x950412DE + +if t==0x950412DE: + echo "equal" +else: + echo "not equal" + +type + TArray = array[0x0012..0x0013, int] + +var a: TArray + +doAssert a[0x0012] == 0 + + +# #7884 + +type Obj = object + ö: int + +let o = Obj(ö: 1) +doAssert o.ö == 1 diff --git a/tests/parser/tunicodeidents.nim b/tests/parser/tunicodeidents.nim deleted file mode 100644 index 3347eb7a95..0000000000 --- a/tests/parser/tunicodeidents.nim +++ /dev/null @@ -1,11 +0,0 @@ -discard """ - action: run -""" - -# #7884 - -type Obj = object - ö: int - -let o = Obj(ö: 1) -doAssert o.ö == 1