view src/ploki/run.h @ 12220:7eaf71f23fbe draft

<oerjan> learn \xce\xbe\xcf\x80\xce\xb1\xce\xbb\xce\xb1\xce\xb9\xce\xbf\xce\xbb\xcf\x8c\xce\xb3\xce\xbf\xcf\x82 is kspalaiologos\'s Ancient Greek twin. He was banned from the theater for making up invalid characters.
author HackEso <hackeso@esolangs.org>
date Sun, 01 Dec 2019 02:35:07 +0000
parents ac0403686959
children
line wrap: on
line source

#ifndef RUN_H_
#define RUN_H_

#include "config.h"
#include "op.h"
#include "text.h"
#include "val.h"
#include "stack.h"

#include <stddef.h>

struct val *execute(const struct op *, struct val *);
ATTR_NORETURN
void run(const struct text *, size_t, char **);

struct Interp {
	struct val arg;
	struct val result;

	struct {
		struct val *argv;
		size_t argc;
	} a;
	struct {
		struct val *matches;
		size_t length, size;
	} match;
	struct {
		size_t *index;
		size_t size;
	} m_start;
	struct {
		size_t *index;
		size_t size;
	} m_end;
};
extern struct Interp Interp;

typedef struct {
	struct val *target;
	struct val content;
} save_pair;

stack_declare(save_pair, extern)
extern stack(save_pair) Saved;

void stack_store(struct val *, const struct val *);
size_t depth_get(void);
void depth_restore(size_t);

#endif /* RUN_H_ */