[BACK]Return to debug.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / parse

Diff for /OpenXM_contrib2/asir2000/parse/debug.c between version 1.1 and 1.21

version 1.1, 1999/12/03 07:39:12 version 1.21, 2015/08/04 06:20:45
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/asir99/parse/debug.c,v 1.2 1999/11/18 05:42:02 noro Exp $ */  /*
    * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
    * All rights reserved.
    *
    * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
    * non-exclusive and royalty-free license to use, copy, modify and
    * redistribute, solely for non-commercial and non-profit purposes, the
    * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
    * conditions of this Agreement. For the avoidance of doubt, you acquire
    * only a limited right to use the SOFTWARE hereunder, and FLL or any
    * third party developer retains all rights, including but not limited to
    * copyrights, in and to the SOFTWARE.
    *
    * (1) FLL does not grant you a license in any way for commercial
    * purposes. You may use the SOFTWARE only for non-commercial and
    * non-profit purposes only, such as academic, research and internal
    * business use.
    * (2) The SOFTWARE is protected by the Copyright Law of Japan and
    * international copyright treaties. If you make copies of the SOFTWARE,
    * with or without modification, as permitted hereunder, you shall affix
    * to all such copies of the SOFTWARE the above copyright notice.
    * (3) An explicit reference to this SOFTWARE and its copyright owner
    * shall be made on your publication or presentation in any form of the
    * results obtained by use of the SOFTWARE.
    * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
    * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
    * for such modification or the source code of the modified part of the
    * SOFTWARE.
    *
    * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
    * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
    * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
    * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
    * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
    * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
    * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
    * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
    * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
    * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
    * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
    * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
    * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
    * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
    * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
    * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
    * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
    *
    * $OpenXM: OpenXM_contrib2/asir2000/parse/debug.c,v 1.20 2011/06/16 08:17:15 noro Exp $
   */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
 #include <ctype.h>  #include <ctype.h>
 #include "genpari.h"  
   
 void show_stack(VS);  
 void change_stack(int,NODE *);  
 void showpos(void);  
 void printvars(char *,VS);  
 void println(int,char **,int);  
 void bp(SNODE);  
 void searchsn(SNODE *,int,SNODE **);  
 void showbp(int);  
 void showbps(void);  
 void delbp(int,char **);  
 int searchbp(void);  
 void clearbp(FUNC);  
 void settp(char *);  
 void setbp(char *);  
 void setf(int,char **);  
 void show_alias(char *);  
 void add_alias(char *,char *);  
   
 extern do_server_in_X11,do_file;  extern do_server_in_X11,do_file;
   
 typedef enum {  typedef enum {
Line 46  static int curline = 1;
Line 75  static int curline = 1;
 extern NODE PVSS;  extern NODE PVSS;
 extern unsigned int evalstatline;  extern unsigned int evalstatline;
 extern int debug_mode;  extern int debug_mode;
 extern jmp_buf debug_env;  extern JMP_BUF debug_env;
   
 char *debcom[] = {  char *debcom[] = {
         "next",          "next",
Line 103  void debug_init() {
Line 132  void debug_init() {
         for ( n = 0; dckwd[n].id != D_UNKNOWN; n++ );          for ( n = 0; dckwd[n].id != D_UNKNOWN; n++ );
         for ( i = 0; i < n; i++ )          for ( i = 0; i < n; i++ )
                 MKNODE(dckwd[i].names,debcom[i],0);                  MKNODE(dckwd[i].names,debcom[i],0);
 #if defined(THINK_C)  
         strcpy(buf,"dbxinit");  
 #else  
         home = (char *)getenv("HOME");          home = (char *)getenv("HOME");
         if ( home )          if ( home )
                 strcpy(buf,home);                  strcpy(buf,home);
         else          else
                 buf[0] = 0;                  buf[0] = 0;
         strcat(buf,"/.dbxinit");          strcat(buf,"/.dbxinit");
 #endif  
         if ( (fp = fopen(".dbxinit","r")) || (fp = fopen(buf,"r")) ) {          if ( (fp = fopen(".dbxinit","r")) || (fp = fopen(buf,"r")) ) {
                 while ( fgets(buf,BUFSIZ,fp) ) {                  while ( fgets(buf,BUFSIZ,fp) ) {
                         stoarg(buf,&ac,av);                          stoarg(buf,&ac,av);
Line 121  void debug_init() {
Line 146  void debug_init() {
                 }                  }
                 fclose(fp);                  fclose(fp);
         }          }
   #if 0
 #if !defined(VISUAL)  #if !defined(VISUAL)
         if ( do_server_in_X11 )          if ( do_server_in_X11 )
                 init_cmdwin();                  init_cmdwin();
 #endif  #endif
   #endif
 }  }
   
 void add_alias(com,alias)  void add_alias(char *com,char *alias)
 char *com,*alias;  
 {  {
         int i;          int i;
         NODE tn;          NODE tn;
Line 143  char *com,*alias;
Line 169  char *com,*alias;
                 }                  }
 }  }
   
 void show_alias(alias)  void show_alias(char *alias)
 char *alias;  
 {  {
         int i;          int i;
         NODE tn;          NODE tn;
Line 169  char *alias;
Line 194  char *alias;
                                 }                                  }
 }  }
   
 void debug(f)  void debug(SNODE f)
 SNODE f;  
 {  {
         int ac,i,n;          int ac,i,n;
         did id;          did id;
Line 182  SNODE f;
Line 206  SNODE f;
         char buf[BUFSIZ];          char buf[BUFSIZ];
         char prompt[BUFSIZ];          char prompt[BUFSIZ];
         char *p,*pe;          char *p,*pe;
   #if !defined(VISUAL)
           char *line;
   #endif
         NODE tn;          NODE tn;
         extern int kernelmode,do_fep;          extern int do_fep;
         NODE pvss;          NODE pvss;
   
 #if !defined(VISUAL)  #if !defined(MPI) && !defined(VISUAL)
         if ( !isatty(fileno(stdin)) && !do_server_in_X11 )          if ( !isatty(fileno(stdin)) && !do_server_in_X11 )
                 if ( do_file )                  if ( do_file )
                         ExitAsir();                          ExitAsir();
                 else                  else
                         return;                          return;
 #endif  #endif
 #if defined(VISUAL) || defined(THINK_C)  #if defined(VISUAL)
         suspend_timer();          suspend_timer();
 #endif  #endif
         pvss = PVSS; debug_mode = 1;          pvss = PVSS; debug_mode = 1;
Line 201  SNODE f;
Line 228  SNODE f;
         if ( do_server_in_X11 )          if ( do_server_in_X11 )
 #endif  #endif
                 show_debug_window(1);                  show_debug_window(1);
         sprintf(prompt,"(debug)%c",kernelmode?0xfe:' ');          sprintf(prompt,"(debug) ");
         if ( kernelmode )          SETJMP(debug_env);
                 fputc('\0',stderr);  
         setjmp(debug_env);  
         while ( 1 ) {          while ( 1 ) {
                 if ( !do_server_in_X11 )  #if FEP
                         fputs(prompt,stderr);                  if ( !do_fep )
   #endif
                           if ( !do_server_in_X11 )
                                   fputs(prompt,stderr);
                 bzero(buf,BUFSIZ);                  bzero(buf,BUFSIZ);
                 while ( 1 ) {                  while ( 1 ) {
   #if FEP
                           if ( do_fep ) {
                                   line = (char *)readline_console(prompt);
                                   strcpy(buf,line); free(line);
                           } else
   #endif
                         {                          {
                                 int len;                                  int len;
   
Line 305  SNODE f;
Line 339  SNODE f;
                 }                  }
         }          }
 LAST:  LAST:
         if ( kernelmode )  
                 fputc('\0',stderr);  
         debug_mode = 0;          debug_mode = 0;
 #if defined(THINK_C)  #if !defined(VISUAL)
         show_debug_window(0);  
         resume_timer();  
 #elif !defined(VISUAL)  
         if ( do_server_in_X11 )          if ( do_server_in_X11 )
 #endif  #endif
                 show_debug_window(0);                  show_debug_window(0);
 }  }
   
 void setf(ac,av)  void setf(int ac,char **av)
 int ac;  
 char **av;  
 {  {
         FUNC r;          FUNC r;
   
         if ( !ac )          if ( !ac )
                 return;                  return;
         searchf(usrf,av[0],&r);          searchuf(av[0],&r);
         if ( r ) {          if ( r ) {
                 targetf = r;                  targetf = r;
                 curline = targetf->f.usrf->startl;                  curline = targetf->f.usrf->startl;
Line 344  static struct {
Line 371  static struct {
   
 static int bpindex = 0;  static int bpindex = 0;
   
 void setbp(p)  void setbp(char *p)
 char *p;  
 {  {
         int ac;          int ac;
         char *av[BUFSIZ];          char *av[BUFSIZ];
         char *buf,*savp;          char *buf,*savp;
         char *fname;          char *fname;
         FUNC r;          FUNC r;
         USRF t;          USRF uf,t;
         SNODE *snp = 0;          SNODE *snp = 0;
         FNODE cond;          FNODE cond;
         NODE tn;          NODE tn;
Line 364  char *p;
Line 390  char *p;
         if ( !strcmp(av[0],"at") ) {          if ( !strcmp(av[0],"at") ) {
                 if ( !targetf )                  if ( !targetf )
                         return;                          return;
                 n = atoi(av[1]); fname = targetf->f.usrf->fname;                  n = atoi(av[1]);
                 for ( tn = usrf; tn; tn = NEXT(tn) ) {                  uf = targetf->f.usrf;
                   fname = uf->fname;
                   tn = uf->module?uf->module->usrf_list:usrf;
                   for ( ; tn; tn = NEXT(tn) ) {
                         r = (FUNC)BDY(tn); t = r->f.usrf;                          r = (FUNC)BDY(tn); t = r->f.usrf;
                         if ( t && t->fname && !strcmp(t->fname,fname)                          if ( t && t->fname && !strcmp(t->fname,fname)
                                 && ( t->startl <= n ) && ( n <= t->endl ) )                                  && ( t->startl <= n ) && ( n <= t->endl ) )
Line 379  char *p;
Line 408  char *p;
                 }                  }
                 at = 1; searchsn(&BDY(t),n,&snp);                  at = 1; searchsn(&BDY(t),n,&snp);
         } else if ( !strcmp(av[0],"in") ) {          } else if ( !strcmp(av[0],"in") ) {
                 searchf(usrf,av[1],&r);                  searchuf(av[1],&r);
                 if ( !r ) {                  if ( !r ) {
                         fprintf(stderr,"%s() : no such function\n",av[1]);                          fprintf(stderr,"%s() : no such function\n",av[1]);
                         return;                          return;
Line 411  char *p;
Line 440  char *p;
                                 default:                                  default:
                                         ln = (*snp)->ln; break;                                          ln = (*snp)->ln; break;
                         }                          }
                         *snp = (SNODE)mksnode(3,S_BP,*snp,cond,0);                          *snp = (SNODE)mksnode(3,S_BP,*snp,cond,NULLP);
                         (*snp)->ln = ln;                          (*snp)->ln = ln;
                         if ( cond ) {                          if ( cond ) {
                                 bpt[bpi].cond = (char *)MALLOC(strlen(savp)+1);                                  bpt[bpi].cond = (char *)MALLOC(strlen(savp)+1);
Line 427  char *p;
Line 456  char *p;
         }          }
 }  }
   
 void settp(p)  void settp(char *p)
 char *p;  
 {  {
         int ac;          int ac;
         char *_av[BUFSIZ];          char *_av[BUFSIZ];
Line 466  char *p;
Line 494  char *p;
                 }                  }
                 at = 1; searchsn(&BDY(t),n,&snp);                  at = 1; searchsn(&BDY(t),n,&snp);
         } else if ( !strcmp(av[0],"in") ) {          } else if ( !strcmp(av[0],"in") ) {
                 searchf(usrf,av[1],&r);                  searchuf(av[1],&r);
                 if ( !r ) {                  if ( !r ) {
                         fprintf(stderr,"%s() : no such function\n",av[1]);                          fprintf(stderr,"%s() : no such function\n",av[1]);
                         return;                          return;
Line 513  char *p;
Line 541  char *p;
         }          }
 }  }
   
 void clearbp(f)  void clearbp(FUNC f)
 FUNC f;  
 {  {
         int i;          int i;
   
Line 539  int searchbp()
Line 566  int searchbp()
                 return bpindex++;                  return bpindex++;
 }  }
   
 void delbp(ac,av)  void delbp(int ac,char **av)
 int ac;  
 char **av;  
 {  {
         int n;          int n;
   
Line 562  void showbps() {
Line 587  void showbps() {
                 showbp(i);                  showbp(i);
 }  }
   
 void showbp(n)  void showbp(int n)
 int n;  
 {  {
         if ( bpt[n].snp )          if ( bpt[n].snp )
                 if ( bpt[n].texpr )                  if ( bpt[n].texpr )
Line 598  int n;
Line 622  int n;
                         }                          }
 }  }
   
 void searchsn(fp,n,fpp)  void searchsn(SNODE *fp,int n,SNODE **fpp)
 SNODE *fp;  
 int n;  
 SNODE **fpp;  
 {  {
         NODE tn;          NODE tn;
         SNODE sn;          SNODE sn;
Line 658  SNODE **fpp;
Line 679  SNODE **fpp;
         }          }
 }  }
   
 void bp(f)  void bp(SNODE f)
 SNODE f;  
 {  {
         int ln;          int ln;
   
Line 680  SNODE f;
Line 700  SNODE f;
                 CPVS->usrf->name,ln,CPVS->usrf->f.usrf->fname);                  CPVS->usrf->name,ln,CPVS->usrf->f.usrf->fname);
         targetf = CPVS->usrf; curline = ln;          targetf = CPVS->usrf; curline = ln;
         println(0,0,1);          println(0,0,1);
 #if !defined(VISUAL)  #if !defined(MPI) && !defined(VISUAL)
         if ( do_server_in_X11 || isatty(0) )          if ( do_server_in_X11 || isatty(0) )
 #endif  #endif
                 debug(f);                  debug(f);
 }  }
   
 void println(ac,av,l)  void println(int ac,char **av,int l)
 int ac;  
 char **av;  
 int l;  
 {  {
         FILE *fp;          FILE *fp;
         char buf[BUFSIZ+1];          char buf[BUFSIZ+1];
         int i;          int i;
         int ln;          int ln;
         FUNC r;          FUNC r;
 #if defined(THINK_C)  
         void setDir(short);  
 #endif  
   
         if ( !ac )          if ( !ac )
                 ln = curline;                  ln = curline;
         else if ( isdigit(av[0][0]) )          else if ( isdigit(av[0][0]) )
                 ln = atoi(av[0]);                  ln = atoi(av[0]);
         else {          else {
                 searchf(usrf,av[0],&r);                  searchuf(av[0],&r);
                 if ( r && r->id != A_UNDEF ) {                  if ( r && r->id != A_UNDEF ) {
                         targetf = r;                          targetf = r;
                         ln = r->f.usrf->startl;                          ln = r->f.usrf->startl;
Line 716  int l;
Line 730  int l;
         }          }
         if ( !targetf )          if ( !targetf )
                 return;                  return;
 #if defined(THINK_C)  
         setDir(targetf->f.usrf->vol);  
 #endif  
         fp = fopen(targetf->f.usrf->fname,"r");          fp = fopen(targetf->f.usrf->fname,"r");
 #if defined(THINK_C)  
         resetDir();  
 #endif  
         if ( !fp ) {          if ( !fp ) {
                 fprintf(stderr,"\"%s\" not found\n",targetf->name);                  fprintf(stderr,"\"%s\" not found\n",targetf->name);
                 return;                  return;
Line 739  int l;
Line 747  int l;
         fclose(fp);          fclose(fp);
 }  }
   
 void printvars(s,vs)  void printvars(char *s,VS vs)
 char *s;  
 VS vs;  
 {  {
         FNODE expr;          FNODE expr;
         char *p;          char *p;
Line 755  VS vs;
Line 761  VS vs;
                 }                  }
         if ( exprparse(vs==GPVS?0:vs->usrf,s,&expr) ) {          if ( exprparse(vs==GPVS?0:vs->usrf,s,&expr) ) {
                 cpvs = CPVS; CPVS = vs;                  cpvs = CPVS; CPVS = vs;
                 if ( !(err = setjmp(debug_env)) )                  if ( !(err = SETJMP(debug_env)) )
                         val = eval(expr);                          val = eval(expr);
                 CPVS = cpvs;                  CPVS = cpvs;
                 if ( !err ) {                  if ( !err ) {
 #if PARI  
 #if PARI1  
                         outfile = stderr;  
 #else  
                         pari_outfile = stderr;  
 #endif  
 #endif  
                         asir_out = stderr;                          asir_out = stderr;
                         for ( p = s; isspace(*p); p++ );                          for ( p = s; isspace(*p); p++ );
                         fprintf(asir_out,"%s = ",p);                          fprintf(asir_out,"%s = ",p);
Line 778  VS vs;
Line 777  VS vs;
 #if defined(VISUAL_LIB)  #if defined(VISUAL_LIB)
                         w_noflush_stderr(0);                          w_noflush_stderr(0);
 #endif  #endif
 #if PARI  
 #if PARI1  
                         outfile = stdout;  
 #else  
                         pari_outfile = stdout;  
 #endif  
 #endif  
                         asir_out = stdout;                          asir_out = stdout;
                 }                  }
         }          }
Line 809  void showpos()
Line 801  void showpos()
         }          }
 }  }
   
 void showpos_to_string(buf)  void showpos_to_string(char *buf)
 char *buf;  
 {  {
         NODE n;          NODE n;
         VS vs;          VS vs;
Line 832  char *buf;
Line 823  char *buf;
         }          }
 }  }
   
 void change_stack(level,pvss)  /* [[file,line,name],...] */
 int level;  
 NODE *pvss;  extern int at_root;
   
   void showpos_to_list(LIST *r)
 {  {
           NODE n,u,u1,t;
           VS vs;
           STRING null,name,fname,kwd;
           LIST l,b;
           USINT us;
   
           u = 0;
           if ( PVSS ) {
                   if ( cur_binf ) {
                           /* builtin : [0,0,name] */
                           MKSTR(null,"");
                           MKSTR(name,cur_binf->name);
                           t = mknode(3,null,name,NULLP);
                           MKLIST(l,t);
                           MKNODE(u1,l,0); u = u1;
                   }
                   ((VS)BDY(PVSS))->at = evalstatline;
                   for ( n = PVSS; n; n = NEXT(n) ) {
                           vs = (VS)BDY(n);
                           MKSTR(fname,vs->usrf->f.usrf->fname);
                           MKUSINT(us,vs->at);
                           MKSTR(name,vs->usrf->name);
                           t = mknode(3,fname,name,us);
                           MKLIST(l,t);
                           MKNODE(u1,l,u); u = u1;
                   }
           }
           /* line number at the toplevel */
           MKSTR(fname,"toplevel"); MKUSINT(us,at_root);
           t = mknode(2,fname,us); MKLIST(l,t); MKNODE(u1,l,u); u = u1;
           MKLIST(b,u);
   
           MKSTR(kwd,"asir_where");
           t = mknode(2,kwd,b);
           MKLIST(*r,t);
   }
   
   void change_stack(int level,NODE *pvss)
   {
         extern NODE PVSS;          extern NODE PVSS;
         NODE n;          NODE n;
         int i;          int i;
Line 854  NODE *pvss;
Line 886  NODE *pvss;
         targetf = vs->usrf; curline = vs->at;          targetf = vs->usrf; curline = vs->at;
 }  }
   
 void show_stack(vs)  void show_stack(VS vs)
 VS vs;  
 {  {
         fprintf(stderr,"#%d %s(), line %d in \"%s\"\n",          fprintf(stderr,"#%d %s(), line %d in \"%s\"\n",
                 ((VS)BDY(PVSS))->level-vs->level,vs->usrf->name,vs->at,vs->usrf->f.usrf->fname);                  ((VS)BDY(PVSS))->level-vs->level,vs->usrf->name,vs->at,vs->usrf->f.usrf->fname);

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.21

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>