changeset 31481:cfa938be2999

maint: merge stable to default.
author John W. Eaton <jwe@octave.org>
date Sat, 19 Nov 2022 00:03:30 -0500
parents 63f808063238 (current diff) 1bbcaa97b2dd (diff)
children 75cbfaf709cb
files libinterp/parse-tree/lex.h libinterp/parse-tree/lex.ll
diffstat 6 files changed, 37 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/parse-tree/lex.h	Fri Nov 18 14:48:41 2022 -0800
+++ b/libinterp/parse-tree/lex.h	Sat Nov 19 00:03:30 2022 -0500
@@ -681,8 +681,6 @@
 
     void maybe_warn_separator_insert (char sep);
 
-    void warn_single_quote_string (void);
-
     void warn_language_extension (const std::string& msg);
 
     void maybe_warn_language_extension_comment (char c);
--- a/libinterp/parse-tree/lex.ll	Fri Nov 18 14:48:41 2022 -0800
+++ b/libinterp/parse-tree/lex.ll	Sat Nov 19 00:03:30 2022 -0500
@@ -1638,8 +1638,8 @@
 "+" { CMD_OR_UNARY_OP ("+", '+', true); }
 "-" { CMD_OR_UNARY_OP ("-", '-', true); }
 
-"~" { CMD_OR_UNARY_OP ("~", EXPR_NOT, true); }
-"!" { CMD_OR_UNARY_OP ("!", EXPR_NOT, false); }
+"~" { CMD_OR_UNARY_OP ("~", '~', true); }
+"!" { CMD_OR_UNARY_OP ("!", '!', false); }
 
 "," {
     curr_lexer->lexer_debug (",");
@@ -2255,7 +2255,7 @@
   {
     int tok = previous_token_value ();
 
-    return (tok == '+' || tok == '-' || tok == '@'
+    return (tok == '+' || tok == '-' || tok == '@' || tok == '~' || tok == '!'
             || tok == ',' || tok == ';' || tok == '*' || tok == '/'
             || tok == ':' || tok == '=' || tok == ADD_EQ
             || tok == AND_EQ || tok == DIV_EQ || tok == EDIV
@@ -2264,7 +2264,7 @@
             || tok == EPOW || tok == EPOW_EQ || tok == EXPR_AND
             || tok == EXPR_AND_AND || tok == EXPR_EQ || tok == EXPR_GE
             || tok == EXPR_GT || tok == EXPR_LE || tok == EXPR_LT
-            || tok == EXPR_NE || tok == EXPR_NOT || tok == EXPR_OR
+            || tok == EXPR_NE || tok == EXPR_OR
             || tok == EXPR_OR_OR || tok == LEFTDIV || tok == LEFTDIV_EQ
             || tok == MUL_EQ || tok == OR_EQ || tok == POW
             || tok == POW_EQ || tok == SUB_EQ);
@@ -3555,21 +3555,6 @@
   }
 
   void
-  base_lexer::warn_single_quote_string (void)
-  {
-    std::string nm = m_fcn_file_full_name;
-
-    if (nm.empty ())
-      warning_with_id ("Octave:single-quote-string",
-                       "single quote delimited string near line %d",
-                       m_filepos.line ());
-    else
-      warning_with_id ("Octave:single-quote-string",
-                       "single quote delimited string near line %d of file %s",
-                       m_filepos.line (), nm.c_str ());
-  }
-
-  void
   base_lexer::warn_language_extension (const std::string& msg)
   {
     std::string nm = m_fcn_file_full_name;
@@ -3650,6 +3635,8 @@
       case '+': std::cerr << "'+'\n"; break;
       case '*': std::cerr << "'*'\n"; break;
       case '/': std::cerr << "'/'\n"; break;
+      case '~': std::cerr << "'~'\n"; break;
+      case '!': std::cerr << "'!'\n"; break;
       case ADD_EQ: std::cerr << "ADD_EQ\n"; break;
       case SUB_EQ: std::cerr << "SUB_EQ\n"; break;
       case MUL_EQ: std::cerr << "MUL_EQ\n"; break;
@@ -3666,7 +3653,6 @@
       case EXPR_OR_OR: std::cerr << "EXPR_OR_OR\n"; break;
       case EXPR_AND: std::cerr << "EXPR_AND\n"; break;
       case EXPR_OR: std::cerr << "EXPR_OR\n"; break;
-      case EXPR_NOT: std::cerr << "EXPR_NOT\n"; break;
       case EXPR_LT: std::cerr << "EXPR_LT\n"; break;
       case EXPR_LE: std::cerr << "EXPR_LE\n"; break;
       case EXPR_EQ: std::cerr << "EXPR_EQ\n"; break;
--- a/libinterp/parse-tree/oct-parse.yy	Fri Nov 18 14:48:41 2022 -0800
+++ b/libinterp/parse-tree/oct-parse.yy	Sat Nov 19 00:03:30 2022 -0500
@@ -202,13 +202,13 @@
 }
 
 // Tokens with line and column information.
-%token <tok_val> '=' ':' '-' '+' '*' '/'
+%token <tok_val> '=' ':' '-' '+' '*' '/' '~' '!'
 %token <tok_val> '(' ')' '[' ']' '{' '}' '.' '@'
 %token <tok_val> ',' ';' '\n'
 %token <tok_val> ADD_EQ SUB_EQ MUL_EQ DIV_EQ LEFTDIV_EQ POW_EQ
 %token <tok_val> EMUL_EQ EDIV_EQ ELEFTDIV_EQ EPOW_EQ AND_EQ OR_EQ
 %token <tok_val> EXPR_AND_AND EXPR_OR_OR
-%token <tok_val> EXPR_AND EXPR_OR EXPR_NOT
+%token <tok_val> EXPR_AND EXPR_OR
 %token <tok_val> EXPR_LT EXPR_LE EXPR_EQ EXPR_NE EXPR_GE EXPR_GT
 %token <tok_val> LEFTDIV EMUL EDIV ELEFTDIV
 %token <tok_val> HERMITIAN TRANSPOSE
@@ -325,7 +325,7 @@
 %left ':'
 %left '-' '+'
 %left '*' '/' LEFTDIV EMUL EDIV ELEFTDIV
-%right UNARY EXPR_NOT
+%right UNARY '~' '!'
 %left POW EPOW HERMITIAN TRANSPOSE
 %right PLUS_PLUS MINUS_MINUS
 %left '(' '.' '{'
@@ -689,7 +689,7 @@
                   { $$ = parser.make_constant ($1); }
                 ;
 
-magic_tilde     : EXPR_NOT
+magic_tilde     : '~'
                   {
                     OCTAVE_YYUSE ($1);
 
@@ -798,8 +798,10 @@
                   { $$ = parser.make_prefix_op (PLUS_PLUS, $2, $1); }
                 | MINUS_MINUS oper_expr %prec UNARY
                   { $$ = parser.make_prefix_op (MINUS_MINUS, $2, $1); }
-                | EXPR_NOT oper_expr %prec UNARY
-                  { $$ = parser.make_prefix_op (EXPR_NOT, $2, $1); }
+                | '~' oper_expr %prec UNARY
+                  { $$ = parser.make_prefix_op ('~', $2, $1); }
+                | '!' oper_expr %prec UNARY
+                  { $$ = parser.make_prefix_op ('!', $2, $1); }
                 | '+' oper_expr %prec UNARY
                   { $$ = parser.make_prefix_op ('+', $2, $1); }
                 | '-' oper_expr %prec UNARY
@@ -888,8 +890,10 @@
                   { $$ = parser.make_prefix_op (PLUS_PLUS, $2, $1); }
                 | MINUS_MINUS power_expr %prec POW
                   { $$ = parser.make_prefix_op (MINUS_MINUS, $2, $1); }
-                | EXPR_NOT power_expr %prec POW
-                  { $$ = parser.make_prefix_op (EXPR_NOT, $2, $1); }
+                | '~' power_expr %prec POW
+                  { $$ = parser.make_prefix_op ('~', $2, $1); }
+                | '!' power_expr %prec POW
+                  { $$ = parser.make_prefix_op ('!', $2, $1); }
                 | '+' power_expr %prec POW
                   { $$ = parser.make_prefix_op ('+', $2, $1); }
                 | '-' power_expr %prec POW
@@ -1887,7 +1891,13 @@
 
                     $$ = parser.make_classdef_attribute ($1, $3);
                   }
-                | EXPR_NOT identifier
+                | '~' identifier
+                  {
+                    OCTAVE_YYUSE ($1);
+
+                    $$ = parser.make_not_classdef_attribute ($2);
+                  }
+                | '!' identifier
                   {
                     OCTAVE_YYUSE ($1);
 
@@ -3209,7 +3219,8 @@
 
     switch (op)
       {
-      case EXPR_NOT:
+      case '~':
+      case '!':
         t = octave_value::op_not;
         break;
 
--- a/liboctave/util/cmd-edit.cc	Fri Nov 18 14:48:41 2022 -0800
+++ b/liboctave/util/cmd-edit.cc	Sat Nov 19 00:03:30 2022 -0500
@@ -582,9 +582,16 @@
       }
     else
       {
+        static char *word_break_chars = nullptr;
+
         ::octave_rl_set_completer_quote_characters ("");
 
-        return octave_rl_get_completer_word_break_characters ();
+        free (word_break_chars);
+
+        word_break_chars
+          = octave_strdup_wrapper (octave_rl_get_completer_word_break_characters ());
+
+        return word_break_chars;
       }
   }
 
--- a/liboctave/util/oct-rl-edit.c	Fri Nov 18 14:48:41 2022 -0800
+++ b/liboctave/util/oct-rl-edit.c	Sat Nov 19 00:03:30 2022 -0500
@@ -307,7 +307,7 @@
   rl_completer_word_break_characters = ss;
 }
 
-char *
+const char *
 octave_rl_get_completer_word_break_characters (void)
 {
   return rl_completer_word_break_characters;
--- a/liboctave/util/oct-rl-edit.h	Fri Nov 18 14:48:41 2022 -0800
+++ b/liboctave/util/oct-rl-edit.h	Sat Nov 19 00:03:30 2022 -0500
@@ -129,7 +129,7 @@
 
 extern void octave_rl_set_completer_word_break_characters (const char *);
 
-extern char * octave_rl_get_completer_word_break_characters (void);
+extern const char * octave_rl_get_completer_word_break_characters (void);
 
 extern void octave_rl_set_completion_word_break_hook (rl_completion_hook_fcn_ptr);