Implement OperandStack for Runtime
This commit is contained in:
parent
986c04053e
commit
920251e99f
3 changed files with 52 additions and 1 deletions
|
|
@ -1,5 +1,10 @@
|
|||
CC=gcc
|
||||
CFLAGS=-I.
|
||||
DEPS=OperandStack.h
|
||||
OBJ=OperandStack.o salruntime.o
|
||||
|
||||
salruntime: salruntime.c
|
||||
%.o: %.c $(DEPS)
|
||||
$(CC) -c -o $@ $< $(CFLAGS)
|
||||
|
||||
salruntime: $(OBJ)
|
||||
$(CC) -o $@ $^ $(CFLAGS)
|
||||
|
|
|
|||
29
runtime/OperandStack.c
Normal file
29
runtime/OperandStack.c
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#include "OperandStack.h"
|
||||
|
||||
int OStackSize(OperandStack* stack) {
|
||||
return stack->top;
|
||||
}
|
||||
|
||||
int OStackPush(OperandStack* stack, int operand) {
|
||||
if (OStackSize(stack) >= TYPE_STACK_SIZE) {
|
||||
// Stack overflow
|
||||
return -1;
|
||||
}
|
||||
|
||||
stack->operands[stack->top] = operand;
|
||||
stack->top++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int OStackPop(OperandStack* stack, int* result) {
|
||||
if (OStackSize(stack) == 0) {
|
||||
// Stack underflow
|
||||
return -1;
|
||||
}
|
||||
|
||||
*result = stack->operands[stack->top - 1];
|
||||
stack->top--;
|
||||
|
||||
return 0;
|
||||
}
|
||||
17
runtime/OperandStack.h
Normal file
17
runtime/OperandStack.h
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef OPERAND_STACK
|
||||
#define OPERAND_STACK
|
||||
|
||||
#define TYPE_STACK_SIZE 32
|
||||
|
||||
typedef struct OperandStack {
|
||||
int top;
|
||||
int operands[TYPE_STACK_SIZE];
|
||||
} OperandStack;
|
||||
|
||||
int OStackSize(OperandStack* stack);
|
||||
|
||||
int OStackPush(OperandStack* stack, int operand);
|
||||
|
||||
int OStackPop(OperandStack* stack, int* result);
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue