#ifndef RUNTIME_H
#define RUNTIME_H

#include "types.h"
struct arg_file;

#define ANT_RUNTIME_CRYPTO_INIT (1u << 0)
#define CODE_ARENA_BLOCK_SIZE   (64 * 1024)

struct ant_runtime {
  ant_t *js;
  char **argv;
  ant_value_t ant_obj;
  int argc;
  int pid;
  unsigned int flags;
  const char *ls_fp;
};

typedef struct {
  void *block;
  size_t used;
} code_arena_mark_t;

extern struct ant_runtime *const rt;
struct ant_runtime *ant_runtime_init(ant_t *js, int argc, char **argv, struct arg_file *ls_p);

size_t code_arena_get_memory(void);
const char *code_arena_alloc(const char *code, size_t len);

code_arena_mark_t code_arena_mark(void);
void code_arena_rewind(code_arena_mark_t mark);

void code_arena_reset(void);
void destroy_runtime(ant_t *js);
void *code_arena_bump(size_t size);

#endif
