File: stack.c

package info (click to toggle)
rlinetd 0.6.2-3
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 2,052 kB
  • ctags: 465
  • sloc: sh: 9,460; ansic: 2,859; yacc: 1,453; lex: 125; makefile: 116; perl: 4
file content (45 lines) | stat: -rw-r--r-- 970 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdlib.h>

#include "bytecode.h"
#include "error.h"
#include "stack.h"

void rlstk_push(struct rl_stack *s, rl_opcode_t val) {
	if(s->top == STACKSIZE)
		rl_fatal(EX_SOFTWARE, "Stack overflow");
	s->data[s->top++] = val;
}

rl_opcode_t rlstk_pop(struct rl_stack *s) {
	if(!s->top)
		rl_fatal(EX_SOFTWARE, "Stack underflow");
	return s->data[--s->top];
}

rl_opcode_t rlstk_peek(struct rl_stack *s, int offset) {
	if(offset >= s->top)
		rl_fatal(EX_SOFTWARE, "Stack peek undefined");
	return s->data[s->top - offset - 1];
}

void rlstk_poke(struct rl_stack *s, int offset, rl_opcode_t val) {
	if(offset >= s->top)
		rl_fatal(EX_SOFTWARE, "Stack peek undefined");
	s->data[s->top - offset - 1] = val;
}

struct rl_stack *rlstk_new() {
	struct rl_stack *s;

	s = malloc(sizeof(*s));
	if (!s)
		rl_fatal(EX_SOFTWARE, "ABORT - Can't allocate memory");
	memset(s, 0, sizeof(*s));
	return s;
}

void rlstk_free(struct rl_stack *s) {
	free(s);
}

/* vim: set ts=2: */