Mercurial > hg > octave-terminal
changeset 5780:cbf717bf8150
[project @ 2006-04-27 20:02:30 by jwe]
author | jwe |
---|---|
date | Thu, 27 Apr 2006 20:03:48 +0000 |
parents | 12eeebfa7ead |
children | faafc2d98b8d |
files | liboctave/CSparse.cc src/ChangeLog src/defaults.cc src/defun-int.h src/defun.cc src/help.cc src/oct-stream.cc src/octave.cc src/sighandlers.cc src/symtab.cc src/symtab.h src/toplev.cc src/variables.cc src/variables.h |
diffstat | 14 files changed, 183 insertions(+), 216 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/CSparse.cc +++ b/liboctave/CSparse.cc @@ -5823,7 +5823,7 @@ Ai, reinterpret_cast<const double *> (Ax), NULL, - reinterpret_cast<double *>, (&Xx[iidx]), + reinterpret_cast<double *> (&Xx[iidx]), NULL, reinterpret_cast<const double *> (Bz), NULL, Numeric,
--- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,8 +1,62 @@ +2006-04-27 John W. Eaton <jwe@octave.org> + + * variables.cc (Fexist): Fix doc string. + + * help.cc (simple_help): No need to handle built-in constants now. + * variables.cc (do_who): Likewise. + (symbol_exist): Likewise. + (link_to_builtin_or_function): Likewise. + + * symtab.cc (SYMBOL_DEF::type_as_string): Likewise. + (record::read_only_error): Likewise. + (SYMBOL_DEF::type): Likewise. + (record::variable_reference): Likewise. + (symbol_record::define_builtin_const): Delete function. + + * symtab.h (symbol_record::define_builtin_const): Delete decl. + (symbol_record::symbol_def::is_constant): Delete function. + (symbol_record::symbol_def::is_builtin_constant): Delete function. + (symbol_record::symbol_def::is_constant): Delete function. + (symbol_record::is_builtin_constant): Delete function. + (SYMTAB_ALL_TYPES): No need to handle builtin-constants now. + (symbol_record::TYPE): Remove BUILTIN_CONSTANT from enum. + (symbol_record): + + * defun.cc (install_builtin_constant): Delete function. + * defun-int.h (install_builtin_constant): Delete decl. + + * variables.cc (bind_builtin_constant): Delete function. + * variables.h (bind_builtin_constant): Delete decl. + + * defun-int.h (DEFCONST, DEFCONSTX, DEFCONST_INTERNAL, + DEFCONSTX_INTERNAL): Delete definitions. + + * sighandlers.cc (FSIG): New function to replace DEFCONST in + symbols_of_sighandlers. + + * octave.cc (intern_argv): Set octave_argv instead of calling + bind_builtin_variable here. + (Fargv, Fprogram_invocation_name, Fprogram_name): New functions to + replace DEFCONSTs in symbols_of_toplvev in toplev.cc. + (octave_program_invocation_name, octave_program_name): + New static variables. + (execute_command_line_file): Use unwind_protect_str to protect + octave_program_invocation_name, octave_program_name instead of + using a restore function. + (restore_program_name): Delete. + + * defaults.cc (FOCTAVE_HOME): New function to replace DEFCONST in + symbols_of_defaults. + 2006-04-27 David Bateman <dbateman@free.fr> * DLD-FUNCTIONS/regexp.cc (octregexp): Fix for infinite loop in regexp. Include news regexp arguments, and associated tests. +2006-04-26 John W. Eaton <jwe@octave.org> + + * oct-stream.cc: Also instantiate do_read functions for boolNDArray. + 2006-04-26 Bill Denney <denney@seas.upenn.edu> * pager.cc (Fterminal_size): Add list_in_columns to @seealso.
--- a/src/defaults.cc +++ b/src/defaults.cc @@ -734,13 +734,22 @@ A colon separated list of directories in which to search for image\n\ files.\n\ @end defvr"); +} - DEFCONST (OCTAVE_HOME, Voctave_home, - "-*- texinfo -*-\n\ -@defvr {Built-in Constant} OCTAVE_HOME\n\ -The name of the top-level Octave installation directory.\n\ -@end defvr"); +DEFUN (OCTAVE_HOME, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} OCTAVE_HOME ()\n\ +Return the name of the top-level Octave installation directory.\n\ +@end deftypefn") +{ + octave_value retval; + if (args.length () == 0) + retval = Voctave_home; + else + print_usage ("OCTAVE_HOME"); + + return retval; } DEFUNX ("OCTAVE_VERSION", FOCTAVE_VERSION, args, ,
--- a/src/defun-int.h +++ b/src/defun-int.h @@ -54,10 +54,6 @@ const std::string& h); extern void -install_builtin_constant (const std::string& n, const octave_value& v, - bool p, const std::string& h); - -extern void install_dld_function (octave_dld_function::fcn f, const std::string& name, const octave_shlib& shl, const std::string& doc, bool is_text_fcn = false); @@ -116,20 +112,6 @@ #define DEFVAR(name, defn, chg_fcn, doc) \ DEFVAR_INTERNAL (#name, SBV_ ## name, defn, false, chg_fcn, doc) -// Define a builtin constant `name' (which may be redefined, but will -// retain its original value when cleared) and also an alias to it -// called `__name__' (which may not be redefined). - -#define DEFCONST(name, defn, doc) \ - DEFCONST_INTERNAL (name, defn, doc) - -// This one can be used when `name' cannot be used directly (if it is -// already defined as a macro). In that case, name is already a -// quoted string, and the name of the structure must to be passed too. - -#define DEFCONSTX(name, sname, defn, doc) \ - DEFCONSTX_INTERNAL (name, sname, defn, doc) - // MAKE_BUILTINS is defined to extract function names and related // information and create the *.df files that are eventually used to // create the builtins.cc file. @@ -177,16 +159,6 @@ XDEFVAR_INTERNAL(name, sname, defn, protect, chg_fcn, doc) \ END_INSTALL_BUILTIN -#define DEFCONST_INTERNAL(name, defn, doc) \ - BEGIN_INSTALL_BUILTIN \ - XDEFCONST_INTERNAL(name, defn, doc) \ - END_INSTALL_BUILTIN - -#define DEFCONSTX_INTERNAL(name, sname, defn, doc) \ - BEGIN_INSTALL_BUILTIN \ - XDEFCONST_INTERNAL(name, defn, doc) \ - END_INSTALL_BUILTIN - #define DEFUN_MAPPER_INTERNAL(name, ch_map, d_b_map, c_b_map, d_d_map, \ d_c_map, c_c_map, lo, hi, \ ch_map_flag, can_ret_cmplx_for_real, doc) \ @@ -226,12 +198,6 @@ #define INSTALL_CONST(name, sname, defn, protect, doc) \ install_builtin_constant (name, octave_value (defn), protect, doc) -#define DEFCONST_INTERNAL(name, defn, doc) \ - INSTALL_CONST (#name, SBV_ ## name, defn, false, doc); - -#define DEFCONSTX_INTERNAL(name, sname, defn, doc) \ - INSTALL_CONST (name, sname, defn, false, doc); - // How mapper functions are actually installed. // FIXME -- Really want to avoid the following casts, since
--- a/src/defun.cc +++ b/src/defun.cc @@ -127,13 +127,6 @@ } void -install_builtin_constant (const std::string& name, const octave_value& val, - bool protect, const std::string& help) -{ - bind_builtin_constant (name, val, protect, false, help); -} - -void install_builtin_variable (const std::string& name, const octave_value& value, bool protect, bool eternal, symbol_record::change_function chg_fcn,
--- a/src/help.cc +++ b/src/help.cc @@ -518,8 +518,6 @@ // FIXME -- is this distinction needed? - LIST_SYMBOLS (symbol_record::BUILTIN_CONSTANT, "built-in constants"); - LIST_SYMBOLS (symbol_record::BUILTIN_VARIABLE, "built-in variables"); LIST_SYMBOLS (symbol_record::COMMAND, "commands");
--- a/src/oct-stream.cc +++ b/src/oct-stream.cc @@ -3195,6 +3195,7 @@ // INSTANTIATE_DO_READ (floatNDArray); INSTANTIATE_DO_READ (NDArray); INSTANTIATE_DO_READ (charNDArray); +INSTANTIATE_DO_READ (boolNDArray); typedef octave_value (*read_fptr) (octave_stream&, octave_idx_type, octave_idx_type, octave_idx_type, octave_idx_type, bool, oct_mach_info::float_format ffmt, octave_idx_type&);
--- a/src/octave.cc +++ b/src/octave.cc @@ -88,6 +88,13 @@ // The command-line options. static string_vector octave_argv; +// The name used to invoke Octave. +static std::string +octave_program_invocation_name; + +// The last component of octave_program_invocation_name. +static std::string octave_program_name; + // TRUE means we read ~/.octaverc and ./.octaverc. // (--norc; --no-init-file; -f) static bool read_init_files = true; @@ -175,21 +182,15 @@ nargin_sr->define (argc-1); - Cell args; - if (argc > 1) { - Array<octave_value> tmp (argc-1); + octave_argv.resize (argc-1); // Skip program name in argv. int i = argc; while (--i > 0) - tmp(i-1) = octave_value (*(argv+i)); - - args = Cell (tmp, argc-1, 1); + octave_argv[i-1] = *(argv+i); } - - bind_builtin_constant ("argv", args, true, true); } static void @@ -354,15 +355,6 @@ } static void -restore_program_name (void *) -{ - bind_builtin_variable ("program_invocation_name", - octave_env::get_program_invocation_name ()); - - bind_builtin_variable ("program_name", octave_env::get_program_name ()); -} - -static void execute_command_line_file (const std::string& fname) { unwind_protect::begin_frame ("execute_command_line_file"); @@ -374,7 +366,8 @@ unwind_protect_str (curr_fcn_file_name); unwind_protect_str (curr_fcn_file_full_name); - unwind_protect::add (restore_program_name, 0); + unwind_protect_str (octave_program_invocation_name); + unwind_protect_str (octave_program_name); interactive = false; reading_script_file = true; @@ -383,14 +376,14 @@ curr_fcn_file_name = fname; curr_fcn_file_full_name = curr_fcn_file_name; - bind_builtin_variable ("program_invocation_name", curr_fcn_file_name); + octave_program_invocation_name = curr_fcn_file_name; size_t pos = curr_fcn_file_name.find_last_of (file_ops::dir_sep_chars); std::string tmp = (pos != NPOS) ? curr_fcn_file_name.substr (pos+1) : curr_fcn_file_name; - bind_builtin_variable ("program_name", tmp); + octave_program_name = tmp; parse_and_execute (fname, false, "octave"); @@ -490,6 +483,9 @@ { octave_env::set_program_name (argv[0]); + octave_program_invocation_name = octave_env::get_program_invocation_name (); + octave_program_name = octave_env::get_program_name (); + // The order of these calls is important. The call to // install_defaults must come before install_builtins because // default variable values must be available for the variables to be @@ -746,6 +742,75 @@ return 0; } +DEFUN (argv, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} argv ()\n\ +Return the command line arguments passed to Octave. For example,\n\ +if you invoked Octave using the command\n\ +\n\ +@example\n\ +octave --no-line-editing --silent\n\ +@end example\n\ +\n\ +@noindent\n\ +@code{argv} would return a cell array of strings with the elements\n\ +@code{--no-line-editing} and @code{--silent}.\n\ +\n\ +If you write an executable Octave script, @code{argv} will return the\n\ +list of arguments passed to the script. @xref{Executable Octave Programs},\n\ +for an example of how to create an executable Octave script.\n\ +@end deftypefn") +{ + octave_value retval; + + if (args.length () == 0) + retval = Cell (octave_argv); + else + print_usage ("argv"); + + return retval; +} + +DEFUN (program_invocation_name, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} program_invocation_name ()\n\ +Return the name that was typed at the shell prompt to run Octave.\n\ +\n\ +If executing a script from the command line (e.g., @code{octave foo.m})\n\ +or using an executable Octave script, the program name is set to the\n\ +name of the script. @xref{Executable Octave Programs}, for an example of\n\ +how to create an executable Octave script.\n\ +@seealso{program_name}\n\ +@end deftypefn") +{ + octave_value retval; + + if (args.length () == 0) + retval = octave_program_invocation_name; + else + print_usage ("program_invocation_name"); + + return retval; +} + +DEFUN (program_name, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} program_name ()\n\ +Return the last component of of the value returned by\n\ +@code{program_invocation_name}.\n\ +@seealso{program_invocation_name}\n\ +@end deftypefn") +{ + octave_value retval; + + if (args.length () == 0) + retval = octave_program_name; + else + print_usage ("program_name"); + + return retval; +} + /* ;;; Local Variables: *** ;;; mode: C++ ***
--- a/src/sighandlers.cc +++ b/src/sighandlers.cc @@ -971,6 +971,26 @@ return retval; } +DEFUN (SIG, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} SIG ()\n\ +Return a structure containing Unix signal names and their defined values.\n\ +@end deftypefn") +{ + octave_value retval; + + if (args.length () == 0) + { + static Octave_map m = make_sig_struct (); + + retval = m; + } + else + print_usage ("SIG"); + + return retval; +} + static int debug_on_interrupt (void) { @@ -1025,12 +1045,6 @@ current variables the the file \"octave-core\" if it receives a\n\ terminate signal. The default value is 1.\n\ @end defvr"); - - DEFCONST (SIG, make_sig_struct (), - "-*- texinfo -*-\n\ -@defvr {Built-in Constant} SIG\n\ -Structure of Unix signal names and their defined values.\n\ -@end defvr"); } /*
--- a/src/symtab.cc +++ b/src/symtab.cc @@ -82,8 +82,6 @@ retval = "built-in mapper function"; else if (is_user_function ()) retval = "user-defined function"; - else if (is_builtin_constant ()) - retval = "built-in constant"; else if (is_builtin_variable ()) retval = "built-in variable"; else if (is_builtin_function ()) @@ -132,9 +130,7 @@ defn->accept (tpc); } } - else if (is_user_variable () - || is_builtin_variable () - || is_builtin_constant ()) + else if (is_user_variable () || is_builtin_variable ()) { if (pr_type_info && ! quiet) os << name << " is a " << type_as_string () << "\n"; @@ -228,21 +224,6 @@ } bool -symbol_record::define_builtin_const (const octave_value& v) -{ - bool retval = false; - - if (! read_only_error ("redefine")) - { - definition->define (v, symbol_record::BUILTIN_CONSTANT); - - retval = true; - } - - return retval; -} - -bool symbol_record::define (octave_function *f, unsigned int sym_type) { bool retval = false; @@ -368,7 +349,7 @@ } } - if (is_function () || is_constant ()) + if (is_function ()) clear (); if (! is_defined ()) @@ -680,7 +661,7 @@ { if (is_read_only ()) { - if (is_variable () || is_constant ()) + if (is_variable ()) ::error ("can't %s read-only constant `%s'", action, nm.c_str ()); else if (is_function ()) ::error ("can't %s read-only function `%s'", action, nm.c_str ());
--- a/src/symtab.h +++ b/src/symtab.h @@ -75,8 +75,7 @@ COMMAND = 16, RAWCOMMAND = 32, MAPPER_FUNCTION = 64, - BUILTIN_VARIABLE = 128, - BUILTIN_CONSTANT = 256 + BUILTIN_VARIABLE = 128 }; private: @@ -94,9 +93,6 @@ ~symbol_def (void) { } - bool is_constant (void) const - { return (symbol_type & symbol_record::BUILTIN_CONSTANT); } - bool is_variable (void) const { return (symbol_type & symbol_record::USER_VARIABLE @@ -143,9 +139,6 @@ bool is_user_function (void) const { return (symbol_type & symbol_record::USER_FUNCTION); } - bool is_builtin_constant (void) const - { return (symbol_type & symbol_record::BUILTIN_CONSTANT); } - bool is_builtin_variable (void) const { return (symbol_type & symbol_record::BUILTIN_VARIABLE); } @@ -331,12 +324,6 @@ bool is_dld_function (void) const { return definition->is_dld_function (); } - bool is_constant (void) const - { return definition->is_constant (); } - - bool is_builtin_constant (void) const - { return definition->is_builtin_constant (); } - bool is_variable (void) const { return definition->is_variable (); } @@ -373,8 +360,6 @@ void define_builtin_var (const octave_value& v); - bool define_builtin_const (const octave_value& v); - bool define (octave_function *f, unsigned int sym_type); void document (const std::string& h) { definition->document (h); } @@ -511,8 +496,7 @@ | symbol_record::COMMAND \ | symbol_record::RAWCOMMAND \ | symbol_record::MAPPER_FUNCTION \ - | symbol_record::BUILTIN_VARIABLE \ - | symbol_record::BUILTIN_CONSTANT) + | symbol_record::BUILTIN_VARIABLE) #define SYMTAB_VARIABLES (symbol_record::USER_VARIABLE \ | symbol_record::BUILTIN_VARIABLE)
--- a/src/toplev.cc +++ b/src/toplev.cc @@ -927,57 +927,6 @@ #endif -void -symbols_of_toplev (void) -{ - DEFCONST (argv, , - "-*- texinfo -*-\n\ -@defvr {Built-in Constant} argv\n\ -The command line arguments passed to Octave are available in this\n\ -variable. For example, if you invoked Octave using the command\n\ -\n\ -@example\n\ -octave --no-line-editing --silent\n\ -@end example\n\ -\n\ -@noindent\n\ -@code{argv} would be a cell array of strings with the elements\n\ -@code{--no-line-editing} and @code{--silent}.\n\ -\n\ -If you write an executable Octave script, @code{argv} will contain the\n\ -list of arguments passed to the script. @xref{Executable Octave Programs},\n\ -for an example of how to create an executable Octave script.\n\ -@end defvr"); - - DEFCONST (program_invocation_name, - octave_env::get_program_invocation_name (), - "-*- texinfo -*-\n\ -@defvr {Built-in Constant} program_invocation_name\n\ -@defvrx {Built-in Constant} program_name\n\ -When Octave starts, the value of the built-in variable\n\ -@code{program_invocation_name} is automatically set to the name that was\n\ -typed at the shell prompt to run Octave, and the value of\n\ -@code{program_name} is automatically set to the final component of\n\ -@code{program_invocation_name}. For example, if you typed\n\ -@samp{@value{OCTAVEHOME}/bin/octave} to start Octave,\n\ -@code{program_invocation_name} would have the value\n\ -@code{\"@value{OCTAVEHOME}/bin/octave\"}, and @code{program_name} would\n\ -have the value @code{\"octave\"}.\n\ -\n\ -If executing a script from the command line (e.g., @code{octave foo.m})\n\ -or using an executable Octave script, the program name is set to the\n\ -name of the script. @xref{Executable Octave Programs}, for an example of\n\ -how to create an executable Octave script.\n\ -@end defvr"); - - DEFCONST (program_name, octave_env::get_program_name (), - "-*- texinfo -*-\n\ -@defvr {Built-in Variable} program_name\n\ -See: program_invocation_name.\n\ -@end defvr"); - -} - /* ;;; Local Variables: *** ;;; mode: C++ ***
--- a/src/variables.cc +++ b/src/variables.cc @@ -805,10 +805,6 @@ { retval = 101; } - else if (var_ok && sr->is_builtin_constant ()) - { - retval = 102; - } } if (! retval @@ -913,7 +909,7 @@ appending @samp{.m}) is a function file in Octave's LOADPATH, 3 if the\n\ name is a @samp{.oct} file in Octave's LOADPATH, 5 if the name is a\n\ built-in function, 7 if the name is a directory, 101 if the name is\n\ -a built-in variable, 102 if the name is a built-in constant, or 103\n\ +a built-in variable, or 103\n\ if the name is a function not associated with a file (entered on\n\ the command line).\n\ \n\ @@ -1365,7 +1361,7 @@ // definition of the builtin variable of the same name. // Make the definition of the symbol record sr be the same as the -// definition of the builtin variable, constant, or function, or user +// definition of the builtin variable or function, or user // function of the same name, provided that the name has not been used // as a formal parameter. @@ -1388,7 +1384,6 @@ if (tmp_sym && (tmp_sym->is_builtin_variable () - || tmp_sym->is_builtin_constant () || tmp_sym->is_function ()) && ! tmp_sym->is_formal_parameter ()) sr->alias (tmp_sym); @@ -1538,7 +1533,6 @@ dim_vector dv (0, 0); - Array<symbol_record *> s1 (dv); Array<symbol_record *> s2 (dv); Array<symbol_record *> s3 (dv); Array<symbol_record *> s4 (dv); @@ -1548,9 +1542,6 @@ if (show_builtins) { - s1 = fbi_sym_tab->symbol_list (pats, symbol_record::BUILTIN_CONSTANT, - SYMTAB_ALL_SCOPES); - s2 = fbi_sym_tab->symbol_list (pats, symbol_record::BUILTIN_VARIABLE, SYMTAB_ALL_SCOPES); @@ -1576,7 +1567,6 @@ SYMTAB_GLOBAL_SCOPE); } - octave_idx_type s1_len = s1.length (); octave_idx_type s2_len = s2.length (); octave_idx_type s3_len = s3.length (); octave_idx_type s4_len = s4.length (); @@ -1585,14 +1575,12 @@ octave_idx_type s7_len = s7.length (); octave_idx_type symbols_len - = s1_len + s2_len + s3_len + s4_len + s5_len + s6_len + s7_len; + = s2_len + s3_len + s4_len + s5_len + s6_len + s7_len; Array<symbol_record *> symbols (dim_vector (symbols_len, 1)); octave_idx_type k = 0; - symbols.insert (s1, k, 0); - k += s1_len; symbols.insert (s2, k, 0); k += s2_len; symbols.insert (s3, k, 0); @@ -1678,10 +1666,6 @@ if (show_builtins) { pad_after += fbi_sym_tab->maybe_list - ("*** built-in constants:", pats, octave_stdout, - show_verbose, symbol_record::BUILTIN_CONSTANT, SYMTAB_ALL_SCOPES); - - pad_after += fbi_sym_tab->maybe_list ("*** built-in variables:", pats, octave_stdout, show_verbose, symbol_record::BUILTIN_VARIABLE, SYMTAB_ALL_SCOPES); @@ -1829,32 +1813,6 @@ } } -// Give a global constant a definition. This will insert the symbol -// in the global table if necessary. - -// How is this different than install_builtin_constant? Are both -// functions needed? - -void -bind_builtin_constant (const std::string& name, const octave_value& val, - bool protect, bool eternal, const std::string& help) -{ - symbol_record *sym_rec = fbi_sym_tab->lookup (name, true); - sym_rec->unprotect (); - - std::string tmp_help = help.empty () ? sym_rec->help () : help; - - sym_rec->define_builtin_const (val); - - sym_rec->document (tmp_help); - - if (protect) - sym_rec->protect (); - - if (eternal) - sym_rec->make_eternal (); -} - // Give a global variable a definition. This will insert the symbol // in the global table if necessary.
--- a/src/variables.h +++ b/src/variables.h @@ -119,11 +119,6 @@ extern void bind_ans (const octave_value& val, bool print); extern void -bind_builtin_constant (const std::string&, const octave_value&, - bool protect = false, bool eternal = false, - const std::string& help = std::string ()); - -extern void bind_builtin_variable (const std::string&, const octave_value&, bool protect = false, bool eternal = false, symbol_record::change_function f = 0,