diff options
author | Pedro Alves <palves@redhat.com> | 2018-05-22 17:35:38 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2018-05-22 17:35:38 +0100 |
commit | b1b60145aedb8adcb0b9dcf43a5ae735c2f03b51 (patch) | |
tree | 777bdbeaa10580f6d5a404ad2d9b86abf11da683 /gdb/testsuite | |
parent | 0ec848ad25bb77edd9c9c3c097c3dd5b8874a6c0 (diff) | |
download | gdb-b1b60145aedb8adcb0b9dcf43a5ae735c2f03b51.zip gdb-b1b60145aedb8adcb0b9dcf43a5ae735c2f03b51.tar.gz gdb-b1b60145aedb8adcb0b9dcf43a5ae735c2f03b51.tar.bz2 |
Support UTF-8 identifiers in C/C++ expressions (PR gdb/22973)
Factor out cp_ident_is_alpha/cp_ident_is_alnum out of
gdb/cp-name-parser.y and use it in the C/C++ expression parser too.
New test included.
gdb/ChangeLog:
2018-05-22 Pedro Alves <palves@redhat.com>
張俊芝 <zjz@zjz.name>
PR gdb/22973
* c-exp.y: Include "c-support.h".
(parse_number, c_parse_escape, lex_one_token): Use TOLOWER instead
of tolower. Use c_ident_is_alpha to scan names.
* c-lang.c: Include "c-support.h".
(convert_ucn, convert_octal, convert_hex, convert_escape): Use
ISXDIGIT instead of isxdigit and ISDIGIT instead of isdigit.
* c-support.h: New file, with bits factored out from ...
* cp-name-parser.y: ... this file.
Include "c-support.h".
(cp_ident_is_alpha, cp_ident_is_alnum): Deleted, moved to
c-support.h and renamed.
(symbol_end, yylex): Adjust.
gdb/testsuite/ChangeLog:
2018-05-22 Pedro Alves <palves@redhat.com>
PR gdb/22973
* gdb.base/utf8-identifiers.c: New file.
* gdb.base/utf8-identifiers.exp: New file.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/utf8-identifiers.c | 71 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/utf8-identifiers.exp | 77 |
3 files changed, 154 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 208939b..393ab88 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-05-22 Pedro Alves <palves@redhat.com> + + PR gdb/22973 + * gdb.base/utf8-identifiers.c: New file. + * gdb.base/utf8-identifiers.exp: New file. + 2018-05-22 Pedro Franco de Carvalho <pedromfc@linux.vnet.ibm.com> * gdb.arch/powerpc-fpscr-gcore.exp: New file. diff --git a/gdb/testsuite/gdb.base/utf8-identifiers.c b/gdb/testsuite/gdb.base/utf8-identifiers.c new file mode 100644 index 0000000..c80b42a --- /dev/null +++ b/gdb/testsuite/gdb.base/utf8-identifiers.c @@ -0,0 +1,71 @@ +/* -*- coding: utf-8 -*- */ + +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2017-2018 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/* UTF-8 "função1". */ +#define FUNCAO1 fun\u00e7\u00e3o1 + +/* UTF-8 "função2". */ +#define FUNCAO2 fun\u00e7\u00e3o2 + +/* UTF-8 "my_função". */ +#define MY_FUNCAO my_fun\u00e7\u00e3o + +/* UTF-8 "num_€". */ +#define NUM_EUROS num_\u20ac + +struct S +{ + int NUM_EUROS; +} g_s; + +void +FUNCAO1 (void) +{ + g_s.NUM_EUROS = 1000; +} + +void +FUNCAO2 (void) +{ + g_s.NUM_EUROS = 1000; +} + +void +MY_FUNCAO (void) +{ +} + +int NUM_EUROS = 2000; + +static void +done () +{ +} + +int +main () +{ + FUNCAO1 (); + done (); + FUNCAO2 (); + MY_FUNCAO (); + + return 0; +} diff --git a/gdb/testsuite/gdb.base/utf8-identifiers.exp b/gdb/testsuite/gdb.base/utf8-identifiers.exp new file mode 100644 index 0000000..12fe376 --- /dev/null +++ b/gdb/testsuite/gdb.base/utf8-identifiers.exp @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- */ + +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2017-2018 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test GDB's support for UTF-8 C/C++ identifiers. + +load_lib completion-support.exp + +standard_testfile + +# Enable basic use of UTF-8. LC_ALL gets reset for each testfile. +setenv LC_ALL C.UTF-8 + +if { [prepare_for_testing "failed to prepare" ${testfile} [list $srcfile]] } { + return -1 +} + +if ![runto done] { + fail "couldn't run to done" + return +} + +# Test expressions. +gdb_test "print g_s.num_€" " = 1000" +gdb_test "print num_€" " = 2000" + +# Test linespecs/breakpoints. +gdb_test "break função2" "Breakpoint $decimal at .*$srcfile.*" + +set test "info breakpoints" +gdb_test_multiple $test $test { + -re "in função2 at .*$srcfile.*$gdb_prompt $" { + pass $test + } +} + +gdb_test "continue" \ + "Breakpoint $decimal, função2 \\(\\) at .*$srcfile.*" + +# Unload symbols from shared libraries to avoid random symbol and file +# names getting in the way of completion. +gdb_test_no_output "nosharedlibrary" + +# Test linespec completion. + +# A unique completion. +test_gdb_complete_unique "break my_fun" "break my_função" + +# A multiple-matches completion: + +# kfailed because gdb/readline display the completion match list like +# this, with no separating space: +# +# (gdb) break função[TAB] +# função1função2 +# +# ... which is bogus. +setup_kfail "gdb/23211" "*-*-*" +test_gdb_complete_multiple "break " "fun" "ção" {"função1" "função2"} + +# Test expression completion. +test_gdb_complete_unique "print g_s.num" "print g_s.num_€" |