Changeset daeb6d in git


Ignore:
Timestamp:
Oct 22, 1998, 2:26:17 PM (26 years ago)
Author:
Kai Krüger <krueger@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'c7af8613769b29c741d6c338945669719f1fc4f8')
Children:
c6217051c24f5239a0f05fbcbf54346d4765c2e5
Parents:
f78e2660572d74fc77f51e15288a9f225a21bd10
Message:
 	tesths.cc subexpr.h subexpr.cc ipshell.h ipshell.cc iplib.cc
 	ipid.h ipid.cc ipassign.cc iparith.cc ChangeLog
	  - Added assignment <package>=<package> via ref-counter
	    rewriten killhdl for packages
	  - Added libname,language to packages
	  - exportto(Up,...) 'Up' defined in syMake
	  - listvar() shows toplevel-packages too.


git-svn-id: file:///usr/local/Singular/svn/trunk@2589 2c84dea3-7e68-4137-9b89-c4e89433aadc
Location:
Singular
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • Singular/ChangeLog

    rf78e26 rdaeb6d  
     1Thu Oct 22 14:21:17 MEST 1998 <krueger@mathematik.uni-kl.de>
     2        * tesths.cc,subexpr.h,subexpr.cc,ipshell.h,ipshell.cc,iplib.cc
     3        * ipid.h,ipid.cc,ipassign.cc,iparith.cc
     4          - Added assignment <package>=<package> via ref-counter
     5            rewriten killhdl for packages
     6          - Added libname,language to packages
     7          - exportto(Up,...) 'Up' defined in syMake
     8          - listvar() shows toplevel-packages too.
     9         
    110Mon Oct 19 16:01:18 MESZ 1998 hannes
    211* hannes: limitations on length of arguments removed (was 200 chars)
  • Singular/iparith.cc

    rf78e26 rdaeb6d  
    197197  { "listvar",     0, LISTVAR_CMD ,       LISTVAR_CMD},
    198198  { "list",        0, LIST_CMD ,          ROOT_DECL_LIST},
    199   { "load",        0, LOAD_CMD ,          CMD_M},
     199  { "load",        0, LOAD_CMD ,          CMD_1},
    200200  { "lres",        0, LRES_CMD ,          CMD_2},
    201201  { "map",         0, MAP_CMD ,           RING_DECL},
     
    296296  { "verbose",     2, OPTION_CMD ,        CMD_M},
    297297//  { "rank",        1, ROWS_CMD ,          CMD_1},
     298
     299//  { "Current",     0, -1 ,                SYSVAR},
     300//  { "Top",         0, -1 ,                SYSVAR},
     301//  { "Up",          0, -1 ,                SYSVAR},
    298302
    299303/* set sys vars*/
     
    29112915  return FALSE;
    29122916}
     2917
     2918static BOOLEAN jjLOAD(leftv res, leftv v)
     2919{
     2920  return(iiLibCmd((char *)v->CopyD(), FALSE));
     2921}
     2922
    29132923/*=================== operations with 1 arg.: table =================*/
    29142924
     
    33833393,{kWeight,      WEIGHT_CMD,      INTVEC_CMD,     IDEAL_CMD }
    33843394,{kWeight,      WEIGHT_CMD,      INTVEC_CMD,     MODUL_CMD }
     3395#ifdef HAVE_NAMESPACES
     3396 ,{jjLOAD,      LOAD_CMD,        NONE,           STRING_CMD }
     3397#endif /* HAVE_NAMESPACES */
    33853398,{NULL,         0,               0,              0}
    33863399};
     
    42944307static BOOLEAN jjNAMES0(leftv res, leftv v)
    42954308{
    4296 #ifdef HAVE_NAMESPACES
    4297   res->data=(void *)ipNameList(NSROOT(namespaceroot->root));
    4298 #else /* HAVE_NAMESPACES */
    42994309  res->data=(void *)ipNameList(IDROOT);
    4300 #endif /* HAVE_NAMESPACES */
    43014310  return FALSE;
    43024311}
     
    44224431#ifdef HAVE_NAMESPACES
    44234432  BOOLEAN nok=TRUE;
    4424   if(v->rtyp==NSHDL) {
    4425     Print("Export to toplevel\n");
     4433  leftv u=v;
     4434  if(u->rtyp==NSHDL) {
     4435    namehdl ns = (namehdl)(u->data);
     4436    idhdl h = namespaceroot->root->get(ns->name, 0, TRUE);
     4437    Print("Export to '%s', lev %d\n", ns->name, ns->myynest);
    44264438    while(v->next!=NULL) {
    4427       nok = iiInternalExport(v->next, 0, v->data);
     4439      nok = iiInternalExport(v->next, ns->myynest, h);
     4440      if(nok) { return nok; }
     4441     
     4442      v = v->next;
     4443    }
     4444    return FALSE;
     4445  }
     4446  if(u->Typ()==PACKAGE_CMD) {
     4447    Print("export to package\n");
     4448    while(v->next!=NULL) {
     4449      nok = iiInternalExport(v->next, 0, u->data);
    44284450      if(nok) return nok;
    4429     }
    4430   }
    4431   if(v->Typ()==PACKAGE_CMD) {
    4432     while(v->next!=NULL) {
    4433       nok = iiInternalExport(v->next, 0, v->data);
    4434       if(nok) return nok;
    4435     }
     4451      v = v->next;
     4452    }
     4453    return FALSE;
    44364454  }
    44374455#else /* HAVE_NAMESPACES */
     
    44584476  }
    44594477  return TRUE;
    4460 }
    4461 
    4462 static BOOLEAN jjLOAD(leftv res, leftv v)
    4463 {
    4464   BOOLEAN nok=FALSE;
    4465   while( v!= NULL) {
    4466     if(v->Typ()==STRING_CMD) {
    4467       nok = iiLibCmd((char *)v->CopyD(), FALSE);
    4468       if(nok) return nok;
    4469     } else
    4470       return TRUE;
    4471     v = v->next;
    4472   }
    4473   return FALSE;
    44744478}
    44754479
     
    45264530#endif
    45274531,{jjIMPORTFROM,IMPORTFROM_CMD,  ANY_TYPE,           -2 }
    4528 ,{jjEXPORTTO,  EXPORTTO_CMD,    ANY_TYPE,           -2 }
     4532,{jjEXPORTTO,  EXPORTTO_CMD,    NONE,               -2 }
    45294533#ifdef HAVE_NAMESPACES
    4530  ,{jjLOAD,      LOAD_CMD,        NONE,              -2 }
    4531  ,{jjUNLOAD,    UNLOAD_CMD,      NONE,              -2 }
     4534 ,{jjUNLOAD,   UNLOAD_CMD,      NONE,               -2 }
    45324535#endif /* HAVE_NAMESPACES */
    45334536 ,{NULL,        0,               0,                  0  }
  • Singular/ipassign.cc

    rf78e26 rdaeb6d  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: ipassign.cc,v 1.37 1998-10-21 15:56:04 Singular Exp $ */
     4/* $Id: ipassign.cc,v 1.38 1998-10-22 12:26:14 krueger Exp $ */
    55
    66/*
     
    503503static BOOLEAN jiA_PACKAGE(leftv res, leftv a, Subexpr e)
    504504{
    505   Print("Currently not supported\n");
    506     return FALSE;
    507   package pack=IDPACKAGE((idhdl)a->data);
    508   printf("Copy package - 1\n");
    509 
    510   idhdl rl=(idhdl)res->data;
    511   if(rl == NULL) {
    512     return TRUE;
    513   }
    514   printf("Copy package - 2\n");
    515   if (&IDPACKAGE(rl)!=NULL) Free(IDPACKAGE(rl), sizeof(ip_package));
    516   IDPACKAGE(rl)=pack;
    517   printf("Copy package - 3\n");
    518   pack->ref++;
    519   printf("Copy package - 4\n");
     505  res->data=(void *)a->CopyD(PACKAGE_CMD);
     506  jiAssignAttr(res,a);
    520507  return FALSE;
    521508}
  • Singular/ipid.cc

    rf78e26 rdaeb6d  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: ipid.cc,v 1.20 1998-10-21 15:56:05 Singular Exp $ */
     4/* $Id: ipid.cc,v 1.21 1998-10-22 12:26:14 krueger Exp $ */
    55
    66/*
     
    3737char* iiNoName="_";
    3838
     39void paCleanUp(package pack);
     40BOOLEAN paKill(package pack, BOOLEAN force_top=FALSE);
     41
    3942/*0 implementation*/
    4043
     
    173176      IDPROC(h)->language=LANG_NONE;
    174177    }
     178    else if (t == PACKAGE_CMD)
     179    {
     180      IDPACKAGE(h)->language=LANG_NONE;
     181    }
     182
    175183  }
    176184  // --------------------------------------------------------
     
    208216#endif
    209217#ifdef HAVE_NAMESPACES
    210         if(strcmp(s,"Top")==0) {
    211         Warn("identifier `%s` in use",s);
    212         return(h);
    213       }
     218        if(t==PACKAGE_CMD && strcmp(s,"Top")==0) {
     219          Warn("identifier `%s` in use",s);
     220          return(h);
     221        }
    214222#endif /* HAVE_NAMESPACES */
    215223        if (s==IDID(h))
     
    350358  }
    351359  // ring / qring  --------------------------------------------------------
    352   // package  -------------------------------------------------------------
    353360  if ((IDTYP(h) == RING_CMD) || (IDTYP(h) == QRING_CMD))
    354361  {
     
    394401  // package -------------------------------------------------------------
    395402  else if (IDTYP(h) == PACKAGE_CMD) {
    396     package pack = IDPACKAGE(h);
    397     if(!checkPackage(pack)) return;
    398     idhdl hdh = pack->idroot;
    399     //idhdl  hdh = IDNEXT(*hd);
    400     idhdl  temp;
    401     //Print(">>>>>>Free package\n");
    402     while (hdh!=NULL)
    403     {
    404       temp = IDNEXT(hdh);
    405       //Print("killing %s\n", IDID(hdh));
    406       killhdl(hdh,&(IDPACKAGE(h)->idroot));
    407       hdh = temp;
    408     }
    409     //Print("killing last %s\n", IDID(*hd));
    410     //killhdl(*hd,hd);
    411     //Print(">>>>>>Free package... done\n");
     403    if(IDPACKAGE(h)->language!=LANG_TOP) {
     404      if(!paKill(IDPACKAGE(h))) return;
     405    } else {
     406      if(strcmp(IDID(h), "Top")!=0) {
     407        if(!paKill(IDPACKAGE(h))) return;
     408      }
     409      else {
     410        if(!paKill(IDPACKAGE(h), TRUE)) return;
     411      }
     412    }
    412413  }
    413414  // pointer -------------------------------------------------------------
     
    690691  if (pi->ref <= 0)
    691692    Free((ADDRESS)pi, sizeof(procinfo));
     693}
     694
     695void paCleanUp(package pack)
     696{
     697  (pack->ref)--;
     698  if (pack->ref < 0)
     699  {
     700    if( pack->language == LANG_C)
     701    {
     702      Print("//dclose(%s)\n",pack->libname);
     703     
     704    }
     705    FreeL((ADDRESS)pack->libname);
     706    memset((void *) pack, 0, sizeof(package));
     707    pack->language=LANG_NONE;
     708  }
     709}
     710
     711BOOLEAN paKill(package pack, BOOLEAN force_top)
     712{
     713  if (pack->ref <= 0 || force_top) {
     714    idhdl hdh = pack->idroot;
     715    idhdl temp;
     716    while (hdh!=NULL)
     717    {
     718      temp = IDNEXT(hdh);
     719      if((IDTYP(hdh)!=PACKAGE_CMD) ||
     720         (IDTYP(hdh)==PACKAGE_CMD && IDPACKAGE(hdh)->language!=LANG_TOP) ||
     721         (IDTYP(hdh)==PACKAGE_CMD && IDPACKAGE(hdh)->language==LANG_TOP &&
     722         IDPACKAGE(hdh)->ref>0 ))
     723        killhdl(hdh,&(pack->idroot));
     724      hdh = temp;
     725    }
     726    if(checkPackage(pack)) {
     727      paCleanUp(pack);
     728      Free((ADDRESS)pack, sizeof(package));
     729    } else return FALSE;
     730  } else paCleanUp(pack);
     731  return TRUE;
    692732}
    693733
     
    857897  }
    858898  if (nshdl->pack==pack) {
     899    //Print("NSstack: %s:%d, nesting=%d\n", nshdl->name, nshdl->lev, nshdl->myynest);
    859900    Warn("package '%s' still in use on level %d",nshdl->name, nshdl->lev);
    860901    return FALSE;
  • Singular/ipid.h

    rf78e26 rdaeb6d  
    44*  Computer Algebra System SINGULAR     *
    55****************************************/
    6 /* $Id: ipid.h,v 1.18 1998-10-21 10:25:33 krueger Exp $ */
     6/* $Id: ipid.h,v 1.19 1998-10-22 12:26:13 krueger Exp $ */
    77/*
    88* ABSTRACT: identfier handling
     
    7474struct sip_package
    7575{
    76   idhdl      idroot; /* local objects */
    77   short      ref;
     76  idhdl         idroot; /* local objects */
     77  char          *libname;
     78  short         ref;
    7879  language_defs language;
    7980};
     81
     82inline package paCopy(package pack)
     83{
     84  pack->ref++;
     85  return pack;
     86}
    8087
    8188union uutypes;
  • Singular/iplib.cc

    rf78e26 rdaeb6d  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: iplib.cc,v 1.37 1998-10-21 15:56:06 Singular Exp $ */
     4/* $Id: iplib.cc,v 1.38 1998-10-22 12:26:12 krueger Exp $ */
    55/*
    66* ABSTRACT: interpreter: LIB and help
     
    674674                  &NSROOT(namespaceroot->root), TRUE );
    675675    IDPACKAGE(pl)->language = LANG_SINGULAR;
     676    IDPACKAGE(pl)->libname=mstrdup(newlib);
    676677  } else {
    677678    if(IDTYP(pl)!=PACKAGE_CMD) {
  • Singular/ipshell.cc

    rf78e26 rdaeb6d  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: ipshell.cc,v 1.26 1998-10-21 10:25:35 krueger Exp $ */
     4/* $Id: ipshell.cc,v 1.27 1998-10-22 12:26:11 krueger Exp $ */
    55/*
    66* ABSTRACT:
     
    103103}
    104104
    105 static void list1(char* s, idhdl h,BOOLEAN c)
     105static void list1(char* s, idhdl h,BOOLEAN c, BOOLEAN fullname)
    106106{
    107107  char buffer[22];
    108108  int l;
    109 
    110   Print("%s%-20.20s [%d]  ",s,IDID(h),IDLEV(h));
     109  char buf2[128];
     110
     111  if(fullname) sprintf(buf2, "%s::%s\0", "", IDID(h));
     112  else sprintf(buf2, "%s\0", IDID(h));
     113
     114  Print("%s%-20.20s [%d]  ",s,buf2,IDLEV(h));
    111115  if (h == currRingHdl) PrintS("*");
    112116  PrintS(Tok2Cmdname((int)IDTYP(h)));
     
    139143                    );
    140144                    break;
     145    case PACKAGE_CMD:
     146                    Print(" (");
     147                    switch (IDPACKAGE(h)->language) {
     148                        case LANG_SINGULAR: Print("S"); break;
     149                        case LANG_C:        Print("C"); break;
     150                        case LANG_TOP:      Print("T"); break;
     151                        case LANG_NONE:     Print("N"); break;
     152                        default:            Print("U");
     153                    }
     154                    if(IDPACKAGE(h)->libname!=NULL) Print(",%s", IDPACKAGE(h)->libname);
     155                    Print(")");
     156                    break;
    141157    case PROC_CMD: if(strlen(IDPROC(h)->libname)>0)
    142158                     Print(" from %s",IDPROC(h)->libname);
    143159                   if(IDPROC(h)->is_static)
    144                      Print(" (static)");
     160                     Print(" (static)");
    145161                   break;
    146162    case STRING_CMD:
     
    179195  int saveShortOut=pShortOut;
    180196  pShortOut=1;
    181   list1("// ",h,FALSE);
     197  list1("// ",h,FALSE,FALSE);
    182198  if (IDTYP(h)!=INT_CMD)
    183199  {
     
    293309}
    294310
    295 void list_cmd(int typ, const char* what, char *prefix,BOOLEAN iterate)
     311void list_cmd(int typ, const char* what, char *prefix,BOOLEAN iterate, BOOLEAN fullname)
    296312{
    297313  idhdl h,start;
    298314  BOOLEAN all = typ==-1;
    299315  BOOLEAN really_all=FALSE;
    300 
     316  BOOLEAN do_packages=FALSE;
     317 
     318  if ( typ < 0 ) do_packages=TRUE;
    301319  if ( typ==0 )
    302320  {
     
    318336      if (h!=NULL)
    319337      {
    320         if (iterate) list1(prefix,h,TRUE);
     338        if (iterate) list1(prefix,h,TRUE,fullname);
    321339        if ((IDTYP(h)==RING_CMD)
    322340            || (IDTYP(h)==QRING_CMD))
     
    353371    || ((IDTYP(h)==QRING_CMD) && (typ==RING_CMD)))
    354372    {
    355       list1(prefix,h,start==currRingHdl);
     373      list1(prefix,h,start==currRingHdl, fullname);
    356374      if (((IDTYP(h)==RING_CMD)||(IDTYP(h)==QRING_CMD))
    357375        && (really_all || (all && (h==currRingHdl)))
     
    371389    h = IDNEXT(h);
    372390  }
     391#ifdef HAVE_NAMESPACES
     392  if(!namespaceroot->isroot && do_packages) {
     393    //namespaceroot->push(namespaceroot->root->pack, "Top", myynest);
     394    list_cmd(PACKAGE_CMD,"Top","// ",FALSE, TRUE);
     395    //namespaceroot->pop();
     396  }
     397#endif /* HAVE_NAMESPACES */
    373398}
    374399
  • Singular/ipshell.h

    rf78e26 rdaeb6d  
    44*  Computer Algebra System SINGULAR     *
    55****************************************/
    6 /* $Id: ipshell.h,v 1.14 1998-10-21 10:25:36 krueger Exp $ */
     6/* $Id: ipshell.h,v 1.15 1998-10-22 12:26:11 krueger Exp $ */
    77/*
    88* ABSTRACT
     
    3636void    type_cmd(idhdl h);
    3737void    test_cmd(int i);
    38 void    list_cmd(int typ, const char* what, char * prefix, BOOLEAN iterate);
     38void    list_cmd(int typ, const char* what, char * prefix, BOOLEAN iterate,
     39                 BOOLEAN fullname=FALSE);
    3940void    iiWriteMatrix(matrix im, const char *n, int dim, int spaces=0);
    4041char *  iiStringMatrix(matrix im, int dim, char ch=',');
  • Singular/subexpr.cc

    rf78e26 rdaeb6d  
    104104            char *typ;
    105105            language_defs lang = ((package)d)->language;
    106             ::Print("// Package : %-*.*s`%s`\n",spaces,spaces," ",n);
     106            ::Print("// Package : %-*.*s`%s`, ref=%d\n",spaces,spaces," ",n,
     107                    ((package)d)->ref);
    107108            switch (lang) {
     109                case LANG_TOP:      typ="Toplevel"; break;
    108110                case LANG_SINGULAR: typ="singular"; break;
    109111                case LANG_C:        typ="object";   break;
     
    111113                default:            typ="unknow language";
    112114            }
     115            if(((package)d)->libname!=NULL)
     116              ::Print("// libname : %s\n", ((package)d)->libname);
     117           
    113118            ::Print("// language: %-*.*s%s",spaces,spaces," ",typ);
    114119          }
     
    442447    case POINTER_CMD:
    443448      return d;
     449    case PACKAGE_CMD:
     450      return  (void *)paCopy((package) d);
    444451    case PROC_CMD:
    445452      return  (void *)piCopy((procinfov) d);
     
    11141121        v->name = IDID(h);
    11151122        v->attribute=IDATTR(h);
     1123        return;
     1124      }
     1125      if (strcmp(id,"Up")==0)
     1126      { namehdl ns=namespaceroot;
     1127        if (!ns->isroot) ns=ns->next;
     1128        if (id!=ns->name) FreeL((ADDRESS)id);
     1129        v->rtyp = NSHDL;
     1130        v->data = (char *)ns;
     1131        v->name = mstrdup(ns->name);
    11161132        return;
    11171133      }
  • Singular/subexpr.h

    rf78e26 rdaeb6d  
    44*  Computer Algebra System SINGULAR     *
    55****************************************/
    6 /* $Id: subexpr.h,v 1.10 1998-10-21 10:25:43 krueger Exp $ */
     6/* $Id: subexpr.h,v 1.11 1998-10-22 12:26:09 krueger Exp $ */
    77/*
    88* ABSTRACT: handling of leftv
     
    133133typedef union uprocinfodata procinfodata;
    134134
    135 typedef enum { LANG_NONE, LANG_SINGULAR, LANG_C } language_defs;
    136 
     135typedef enum { LANG_NONE, LANG_TOP, LANG_SINGULAR, LANG_C } language_defs;
     136// LANG_TOP     : Toplevel package only
     137// LANG_SINGULAR:
     138// LANG_C       :
    137139class procinfo
    138140{
  • Singular/tesths.cc

    rf78e26 rdaeb6d  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: tesths.cc,v 1.55 1998-10-21 10:25:41 krueger Exp $ */
     4/* $Id: tesths.cc,v 1.56 1998-10-22 12:26:09 krueger Exp $ */
    55
    66/*
     
    491491    h=enterid(mstrdup("Top"), 0, PACKAGE_CMD, &IDROOT, TRUE);
    492492    IDPACKAGE(h) = NSPACK(namespaceroot);
     493    IDPACKAGE(h)->language = LANG_TOP;
    493494#endif /* HAVE_NAMESPACES */
    494495  }
Note: See TracChangeset for help on using the changeset viewer.