# HG changeset patch # User jwe # Date 1082490071 0 # Node ID c7f9ea142fda4f8f568e17f19080ebc8c6aa3894 # Parent 3cb99ace0edbfad595582e304a54c771cfe62b5b [project @ 2004-04-20 19:41:11 by jwe] diff --git a/src/lex.h b/src/lex.h --- a/src/lex.h +++ b/src/lex.h @@ -46,6 +46,9 @@ // Delete a buffer (for unwind-prot). extern void delete_input_buffer (void *buf); +// Is the given string a keyword? +extern bool is_keyword (const std::string& s); + // For communication between the lexer and parser. class diff --git a/src/lex.l b/src/lex.l --- a/src/lex.l +++ b/src/lex.l @@ -229,7 +229,7 @@ static void fixup_column_count (char *s); static void do_comma_insert_check (void); static int is_plot_keyword (const std::string& s); -static int is_keyword (const std::string& s); +static int is_keyword_token (const std::string& s); static void prep_for_function (void); static void prep_for_nested_function (void); static std::string plot_style_token (const std::string& s); @@ -1161,7 +1161,7 @@ // Handle keywords. Return -1 if the keyword should be ignored. static int -is_keyword (const std::string& s) +is_keyword_token (const std::string& s) { int l = input_line_number; int c = current_input_column; @@ -2472,7 +2472,7 @@ // Keywords can be followed by identifiers (TOK_RETURN handles // that). - int kw_token = is_keyword (tok); + int kw_token = is_keyword_token (tok); if (kw_token) { @@ -2653,6 +2653,12 @@ quote_is_transpose = false; } +bool +is_keyword (const std::string& s) +{ + return octave_kw_lookup (s.c_str (), s.length ()) != 0; +} + DEFCMD (iskeyword, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} iskeyword (@var{name})\n\ @@ -2664,7 +2670,7 @@ int argc = args.length () + 1; - string_vector argv = args.make_argv ("help"); + string_vector argv = args.make_argv ("iskeyword"); if (error_state) return retval; @@ -2680,9 +2686,7 @@ } else if (argc == 2) { - std::string s = argv[1]; - - retval = (octave_kw_lookup (s.c_str (), s.length ()) != 0); + retval = is_keyword (argv[1]); } else print_usage ("iskeyword"); diff --git a/src/ls-mat-ascii.cc b/src/ls-mat-ascii.cc --- a/src/ls-mat-ascii.cc +++ b/src/ls-mat-ascii.cc @@ -49,6 +49,7 @@ #include "defun.h" #include "error.h" #include "gripes.h" +#include "lex.h" #include "load-save.h" #include "oct-obj.h" #include "oct-map.h" @@ -209,7 +210,7 @@ else varname = filename; - pos = varname.find ('.'); + pos = varname.rfind ('.'); if (pos != NPOS) varname = varname.substr (0, pos); @@ -222,7 +223,7 @@ varname[i] = '_'; } - if (! isalpha (varname[0])) + if (is_keyword (varname) || ! isalpha (varname[0])) varname.insert (0, "X"); if (valid_identifier (varname))