Changeset 6c8772 in git for modules/tools/misc.cc


Ignore:
Timestamp:
Apr 1, 1999, 12:03:24 AM (25 years ago)
Author:
Kai Krüger <krueger@…>
Branches:
(u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
Children:
dcafdbfd5e7cf5689011aad6c9b81fd43bd118b1
Parents:
740e1f7291b169d818475089a70366a328feb8d1
Message:
Major rewrite of modgen


git-svn-id: file:///usr/local/Singular/svn/trunk@2972 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • modules/tools/misc.cc

    r740e1f7 r6c8772  
    22*  Computer Algebra System SINGULAR     *
    33****************************************/
    4 /* $Id: misc.cc,v 1.4 1999-03-24 13:04:20 krueger Exp $ */
     4/* $Id: misc.cc,v 1.5 1999-03-31 22:03:22 krueger Exp $ */
    55/*
    66* ABSTRACT: lib parsing
     
    2828#define SYSTYP_HPUX10 3
    2929
    30 #if 0
     30#if 1
    3131#  define logx printf
    3232#else
     
    7575  if( strcmp(n, "SELF") == 0) {
    7676    tok = SELF_CMD;
     77    logx("IsCmd: [%d] %s\n", tok, n);
     78    return tok;
     79  }
     80 
     81  if( strcmp(n, "none") == 0) {
     82    tok = NONE;
     83    logx("IsCmd: [%d] %s\n", tok, n);
    7784    return tok;
    7885  }
     
    225232  }
    226233  module->revision = (char *)malloc(strlen(libnamebuf)+1);
    227   strcpy(module->revision, libnamebuf);
     234  memset(module->revision, '\0', strlen(libnamebuf)+1);
     235  memcpy(module->revision, libnamebuf, strlen(libnamebuf));
    228236}
    229237
     
    257265
    258266/*========================================================================*/
    259 /*  procdefv Add2proclist(procdefv pi, char *name)*/
    260267void Add2proclist(
    261268  moddefv module,
     
    270277 
    271278  memset((void *)&pnew, '\0', sizeof(procdef));
     279
    272280  pnew.procname = (char *)malloc(strlen(name)+1);
    273281  if(pnew.procname==NULL) printf("Error 1\n");
     282  memset(pnew.procname, '\0', strlen(name)+1);
     283  memcpy(pnew.procname, name, strlen(name));
     284
    274285  pnew.funcname = (char *)malloc(strlen(name)+1);
     286  if(pnew.funcname==NULL) printf("Error 1\n");
    275287  memset(pnew.funcname, '\0', strlen(name)+1);
    276   memset(pnew.procname, '\0', strlen(name)+1);
     288  memcpy(pnew.funcname, name, strlen(name));
     289
    277290  pnew.param = NULL;
    278291  (pnew).is_static = 0;
    279292  (pnew).paramcnt = 0;
    280   strcpy(pnew.procname, name);
    281   strcpy(pnew.funcname, name);
    282 
     293  pnew.c_code = NULL;
     294 
    283295  pnew.return_val.name = (char *)malloc(strlen(ret_val)+1);
    284296  memset(pnew.return_val.name, '\0', strlen(ret_val)+1);
     
    442454}
    443455
     456void gen_func_param_check(
     457  FILE *fp,
     458  procdefv pi,
     459  int i
     460  )
     461{
     462  fprintf(fp, "  if(v==NULL) goto mod_%s_error;\n", pi->funcname);
     463  fprintf(fp, "  tok = v->Typ();\n");
     464  fprintf(fp, "  if((index=iiTestConvert(tok, %s))==0)\n",
     465          pi->param[i].typname);
     466  fprintf(fp, "     goto mod_%s_error;\n", pi->funcname);
     467  fprintf(fp, "  v_save = v->next;\n");
     468  fprintf(fp, "  v->next = NULL;\n");
     469  fprintf(fp, "  if(iiConvert(tok, %s, index, v, res%d))\n",
     470          pi->param[i].typname, i);
     471  fprintf(fp, "     goto mod_%s_error;\n", pi->funcname);
     472  fprintf(fp, "  v = v_save;\n");
     473}
     474
    444475void generate_function(procdefv pi, FILE *fp)
    445476{
     
    450481  if(pi->paramcnt>0) {
    451482    if(pi->param[0].typ==SELF_CMD) {
     483      if(pi->c_code != NULL) fprintf(fp, "%s\n", pi->c_code);
     484 
    452485      fprintf(fp, "  return(%s(res,h));\n", pi->funcname);
    453486      fprintf(fp, "}\n\n");
    454487    }
    455488    else {
    456       fprintf(fp, "  leftv v = h;\n");
     489      fprintf(fp, "  leftv v = h, v_save;\n");
    457490      fprintf(fp, "  int tok = NONE, index = 0;\n");
    458491      for (i=0;i<pi->paramcnt; i++)
     
    461494      fprintf(fp, "\n");
    462495   
    463       for (i=0;i<pi->paramcnt; i++) {
    464         fprintf(fp, "  if(v==NULL) goto mod_%s_error;\n", pi->funcname);
    465         fprintf(fp, "  tok = v->Typ();\n");
    466         fprintf(fp, "  printf(\"test %d.1\\n\");\n", i);
    467         fprintf(fp, "  if((index=iiTestConvert(tok, %s))==0)\n",
    468                 pi->param[i].typname);
    469         logx("==>'%s'\n", pi->param[i].typname);
    470         fprintf(fp, "     goto mod_%s_error;\n", pi->funcname);
    471         fprintf(fp, "  printf(\"test %d.2\\n\");\n", i);
    472         fprintf(fp, "  if(iiConvert(tok, %s, index, v, res%d))\n",
    473                 pi->param[i].typname, cnt);
    474         fprintf(fp, "     goto mod_%s_error;\n", pi->funcname);
    475         fprintf(fp, "  printf(\"test %d.3\\n\");\n", i);
    476         fprintf(fp, "  v = v->next;\n");
    477       }
     496      if(pi->c_code != NULL) fprintf(fp, "%s\n", pi->c_code);
     497 
     498      for (i=0;i<pi->paramcnt; i++) gen_func_param_check(fp, pi, i);
     499
    478500      fprintf(fp, "  if(v!=NULL) { tok = v->Typ(); goto mod_%s_error; }\n",
    479501              pi->funcname);
    480       fprintf(fp, "  printf(\"test before return\\n\");\n");
    481502
    482503      fprintf(fp, "\n");
     
    513534    }
    514535  } else {
    515       fprintf(fp, "  return(%s(res));\n}\n\n", pi->funcname);
     536      switch( pi->return_val.typ) {
     537          case SELF_CMD:
     538            fprintf(fp, "  return(%s(res));\n}\n\n", pi->funcname);
     539           break;
     540
     541          case NONE:
     542            fprintf(fp, "  res->rtyp = %s;\n", pi->return_val.typname);
     543            fprintf(fp, "  res->data = NULL;\n");
     544            fprintf(fp, "  %s();\n", pi->funcname);
     545            fprintf(fp, "  return FALSE;\n}\n\n");
     546            break;
     547           
     548          default:
     549            fprintf(fp, "  res->rtyp = %s;\n", pi->return_val.typname);
     550            fprintf(fp, "  res->data = (void *)%s();\n", pi->funcname);
     551            fprintf(fp, "  return FALSE;\n}\n\n");
     552      }
     553   
    516554  }
    517555     
     
    613651  fprintf(fp, "CC\t= gcc\n");
    614652  fprintf(fp, "CXX\t= gcc\n");
    615   fprintf(fp, "CFLAGS\t= -DNDEBUG -I. -I../include\n");
     653  fprintf(fp, "CFLAGS\t= -DNDEBUG -DBUILD_MODULE -I. -I../include\n");
    616654  fprintf(fp, "#LD\t=\n");
    617655  fprintf(fp, "\n");
Note: See TracChangeset for help on using the changeset viewer.