home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / kaffe-0.5p4-src.tgz / tar.out / contrib / kaffe / kaffevm / jit / seq.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  1KB  |  65 lines

  1. /* seq.c
  2.  * Pseudo instruction sequences.
  3.  *
  4.  * Copyright (c) 1996 Systems Architecture Research Centre,
  5.  *           City University, London, UK.
  6.  *
  7.  * See the file "license.terms" for information on usage and redistribution
  8.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9.  *
  10.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, July 1996.
  11.  */
  12.  
  13. #include "config.h"
  14. #include <assert.h>
  15. #include <stdlib.h>
  16. #include "gtypes.h"
  17. #include "seq.h"
  18.  
  19. sequence* firstSeq;
  20. sequence* lastSeq;
  21. sequence* currSeq;
  22.  
  23. /*
  24.  * Reset the sequence list.
  25.  */
  26. void
  27. initSeq(void)
  28. {
  29.     currSeq = firstSeq;
  30. }
  31.  
  32. /*
  33.  * Allocate a new sequence element.
  34.  */
  35. sequence*
  36. nextSeq(void)
  37. {
  38.     int i;
  39.     sequence* ret = currSeq;
  40.  
  41.     if (ret == 0) {
  42.         /* Allocate chunk of sequence elements */
  43.         ret = calloc(ALLOCSEQNR, sizeof(sequence));
  44.         assert(ret != 0);
  45.  
  46.         /* Attach to current chain */
  47.         if (lastSeq == 0) {
  48.             firstSeq = ret;
  49.         }
  50.         else {
  51.             lastSeq->next = ret;
  52.         }
  53.         lastSeq = &ret[ALLOCSEQNR-1];
  54.  
  55.         /* Link elements into list */
  56.         for (i = 0; i < ALLOCSEQNR-1; i++) {
  57.             ret[i].next = &ret[i+1];
  58.         }
  59.         ret[ALLOCSEQNR-1].next = 0;
  60.     }
  61.     currSeq = ret->next;
  62.     ret->ref = 1;
  63.     return (ret);
  64. }
  65.