A minimalistic programming language written in C89.
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

64 行
1.3 KiB

#pragma once
#include "stddef.h"
#define INK_INTEGER 0
#define INK_NATIVE_FUNCTION 1
#define INK_FUNCTION 2
struct elem {
int type;
int value;
};
struct stack_frame {
struct elem executing;
int index;
};
struct fn {
char* name;
struct elem* things;
int size;
};
struct context;
struct native_fn {
char* name;
void(*value)(struct context*);
};
struct context {
int panic;
void*(*malloc)(size_t);
void*(*realloc)(void*, size_t);
void(*free)(void*);
struct elem* stack;
int capacity;
int top;
struct stack_frame* function_stack;
int function_stack_capacity;
int function_stack_top;
struct native_fn* native_words;
int native_words_capacity;
int native_words_top;
struct fn* words;
int words_capacity;
int words_top;
char** lex_reserved_words;
int lex_reserved_words_capacity;
int lex_reserved_words_top;
};
void ink_add_native(struct context* ctx, const char* name, void(*value)(struct context*));
void ink_push(struct context* ctx, struct elem value);
void ink_push_fn(struct context* ctx, struct stack_frame value);
struct context* ink_make_context(void*(*malloc)(size_t), void*(*realloc)(void*, size_t), void(*free)(void*));
struct context* ink_make_default_context();
int ink_step(struct context *pContext);
void ink_run(struct context *pContext, char* buffer);