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