]> git.sur5r.net Git - cc65/blob - src/cc65/loop.c
ec51dc951050bef86aa2701214c0d1bf8a4abb5c
[cc65] / src / cc65 / loop.c
1 /*
2  * loop.c
3  *
4  * Ullrich von Bassewitz, 20.06.1998
5  */
6
7
8
9 #include "error.h"
10 #include "mem.h"
11 #include "loop.h"
12
13
14
15 /*****************************************************************************/
16 /*                                   data                                    */
17 /*****************************************************************************/
18
19
20
21 /* The root */
22 static struct loopdesc* loopstack = 0;
23
24
25
26 /*****************************************************************************/
27 /*                                   code                                    */
28 /*****************************************************************************/
29
30
31
32 struct loopdesc* addloop (unsigned sp, unsigned loop, unsigned label,
33                           unsigned linc, unsigned lstat)
34 /* Create and add a new loop descriptor */
35 {
36     struct loopdesc* l;
37
38     /* Allocate a new struct */
39     l = xmalloc (sizeof (struct loopdesc));
40
41     /* Fill in the data */
42     l->sp       = sp;
43     l->loop     = loop;
44     l->label    = label;
45     l->linc     = linc;
46     l->lstat    = lstat;
47
48     /* Insert it into the list */
49     l->next = loopstack;
50     loopstack = l;
51
52     /* Return a pointer to the struct */
53     return l;
54 }
55
56
57
58 struct loopdesc* currentloop (void)
59 /* Return a pointer to the descriptor of the current loop */
60 {
61     if (loopstack == 0) {
62         /* Stack is empty */
63         Error (ERR_NO_ACTIVE_LOOP);
64     }
65     return loopstack;
66 }
67
68
69
70 void delloop (void)
71 /* Remove the current loop */
72 {
73     struct loopdesc* l;
74
75     l = loopstack;
76     loopstack = loopstack->next;
77     xfree (l);
78 }
79
80
81