Mercurial > hg > octave-lyh
diff src/help.cc @ 1281:fcdf6c5d0302
[project @ 1995-04-27 19:21:47 by jwe]
author | jwe |
---|---|
date | Thu, 27 Apr 1995 19:23:54 +0000 |
parents | b6360f2d4fa6 |
children | 4acabfbdd381 |
line wrap: on
line diff
--- a/src/help.cc +++ b/src/help.cc @@ -771,7 +771,22 @@ if (! *argv || ! **argv) continue; - symbol_record *sym_rec = lookup_by_name (*argv, 0); + char *id = strsave (*argv); + char *elts = 0; + char *ptr = strchr (id, '.'); + if (ptr) + { + *ptr = '\0'; + + elts = ptr + 1; + ptr = strrchr (elts, '.'); + if (ptr) + *ptr = '\0'; + else + elts = 0; + } + + symbol_record *sym_rec = lookup_by_name (id, 0); if (sym_rec) { @@ -791,35 +806,52 @@ output_buf << *argv << " is a builtin text-function\n"; else if (sym_rec->is_builtin_function ()) output_buf << *argv << " is a builtin function\n"; - else if (sym_rec->is_user_variable ()) + else if (sym_rec->is_user_variable () + || sym_rec->is_builtin_variable ()) { tree_fvc *defn = sym_rec->def (); - if (nargout == 0 && ! quiet) - output_buf << *argv << " is a user-defined variable\n"; + assert (defn->is_constant ()); + + tree_constant *tmp = (tree_constant *) defn; - defn->print_code (output_buf); + int var_ok = 1; + if (tmp && tmp->is_map ()) + { + if (elts && *elts) + { + tree_constant ult; + ult = tmp->lookup_map_element (elts, 0, 1); - if (nargout == 0) - output_buf << "\n"; - } - else if (sym_rec->is_builtin_variable ()) - { - tree_fvc *defn = sym_rec->def (); + if (! ult.is_defined ()) + var_ok = 0; + } + } + + if (nargout == 0 && ! quiet) + { + output_buf << *argv; + if (sym_rec->is_user_variable ()) + output_buf << " is a user-defined variable\n"; + else + output_buf << " is a built-in variable\n"; + } - if (nargout == 0 && ! quiet) - output_buf << *argv << " is a builtin variable\n"; + if (! tmp->is_map ()) + { + tmp->print_code (output_buf); - defn->print_code (output_buf); - - if (nargout == 0) - output_buf << "\n"; + if (nargout == 0) + output_buf << "\n"; + } } else output_buf << "type: `" << *argv << "' has unknown type!\n"; } else output_buf << "type: `" << *argv << "' undefined\n"; + + delete [] id; } output_buf << ends;