#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_features.h"
#endif
#ifndef MJS_FEATURES_H_
#define MJS_FEATURES_H_
#if !defined(MJS_AGGRESSIVE_GC)
#define MJS_AGGRESSIVE_GC 0
#endif
#if !defined(MJS_MEMORY_STATS)
#define MJS_MEMORY_STATS 0
#endif
#if !defined(MJS_GENERATE_JSC)
#if defined(CS_MMAP)
#define MJS_GENERATE_JSC 1
#else
#define MJS_GENERATE_JSC 0
#endif
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_core_public.h"
#endif
#ifndef MJS_CORE_PUBLIC_H_
#define MJS_CORE_PUBLIC_H_
#if !defined(_MSC_VER) || _MSC_VER >= 1700
#include <stdint.h>
#else
typedef unsigned __int64 uint64_t;
typedef int int32_t;
typedef unsigned char uint8_t;
#endif
#include <stdio.h>
#include <stddef.h>
#if defined(__cplusplus)
extern "C" {
#endif
#ifndef MJS_ENABLE_DEBUG
#define MJS_ENABLE_DEBUG 0
#endif
typedef uint64_t mjs_val_t;
#if 0#endif
struct mjs;
typedef enum mjs_err {
MJS_OK,
MJS_SYNTAX_ERROR,
MJS_REFERENCE_ERROR,
MJS_TYPE_ERROR,
MJS_OUT_OF_MEMORY,
MJS_INTERNAL_ERROR,
MJS_NOT_IMPLEMENTED_ERROR,
MJS_FILE_READ_ERROR,
MJS_BAD_ARGS_ERROR,
MJS_ERRS_CNT
} mjs_err_t;
struct mjs;
struct mjs *mjs_create();
struct mjs_create_opts {
const struct bf_code *code;
};
struct mjs *mjs_create_opt(struct mjs_create_opts opts);
void mjs_destroy(struct mjs *mjs);
mjs_val_t mjs_get_global(struct mjs *mjs);
void mjs_own(struct mjs *mjs, mjs_val_t *v);
int mjs_disown(struct mjs *mjs, mjs_val_t *v);
mjs_err_t mjs_set_errorf(struct mjs *mjs, mjs_err_t err, const char *fmt, ...);
mjs_err_t mjs_prepend_errorf(struct mjs *mjs, mjs_err_t err, const char *fmt,
...);
void mjs_print_error(struct mjs *mjs, FILE *fp, const char *msg,
int print_stack_trace);
const char *mjs_strerror(struct mjs *mjs, enum mjs_err err);
void mjs_set_generate_jsc(struct mjs *mjs, int generate_jsc);
int mjs_nargs(struct mjs *mjs);
mjs_val_t mjs_arg(struct mjs *mjs, int n);
void mjs_return(struct mjs *mjs, mjs_val_t v);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_ffi_public.h"
#endif
#ifndef MJS_FFI_PUBLIC_H_
#define MJS_FFI_PUBLIC_H_
#if defined(__cplusplus)
extern "C" {
#endif
enum mjs_ffi_ctype {
MJS_FFI_CTYPE_NONE,
MJS_FFI_CTYPE_USERDATA,
MJS_FFI_CTYPE_CALLBACK,
MJS_FFI_CTYPE_INT,
MJS_FFI_CTYPE_BOOL,
MJS_FFI_CTYPE_DOUBLE,
MJS_FFI_CTYPE_FLOAT,
MJS_FFI_CTYPE_CHAR_PTR,
MJS_FFI_CTYPE_VOID_PTR,
MJS_FFI_CTYPE_STRUCT_MG_STR_PTR,
MJS_FFI_CTYPE_STRUCT_MG_STR,
MJS_FFI_CTYPE_INVALID,
};
typedef void *(mjs_ffi_resolver_t)(void *handle, const char *symbol);
void mjs_set_ffi_resolver(struct mjs *mjs, mjs_ffi_resolver_t *dlsym);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_array_public.h"
#endif
#ifndef MJS_ARRAY_PUBLIC_H_
#define MJS_ARRAY_PUBLIC_H_
#if defined(__cplusplus)
extern "C" {
#endif
mjs_val_t mjs_mk_array(struct mjs *mjs);
unsigned long mjs_array_length(struct mjs *mjs, mjs_val_t arr);
mjs_err_t mjs_array_push(struct mjs *mjs, mjs_val_t arr, mjs_val_t v);
mjs_val_t mjs_array_get(struct mjs *, mjs_val_t arr, unsigned long index);
mjs_err_t mjs_array_set(struct mjs *mjs, mjs_val_t arr, unsigned long index,
mjs_val_t v);
int mjs_is_array(mjs_val_t v);
void mjs_array_del(struct mjs *mjs, mjs_val_t arr, unsigned long index);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_core_public.h"
#endif
#ifndef MJS_CORE_PUBLIC_H_
#define MJS_CORE_PUBLIC_H_
#if !defined(_MSC_VER) || _MSC_VER >= 1700
#include <stdint.h>
#else
typedef unsigned __int64 uint64_t;
typedef int int32_t;
typedef unsigned char uint8_t;
#endif
#include <stdio.h>
#include <stddef.h>
#if defined(__cplusplus)
extern "C" {
#endif
#ifndef MJS_ENABLE_DEBUG
#define MJS_ENABLE_DEBUG 0
#endif
typedef uint64_t mjs_val_t;
#if 0#endif
struct mjs;
typedef enum mjs_err {
MJS_OK,
MJS_SYNTAX_ERROR,
MJS_REFERENCE_ERROR,
MJS_TYPE_ERROR,
MJS_OUT_OF_MEMORY,
MJS_INTERNAL_ERROR,
MJS_NOT_IMPLEMENTED_ERROR,
MJS_FILE_READ_ERROR,
MJS_BAD_ARGS_ERROR,
MJS_ERRS_CNT
} mjs_err_t;
struct mjs;
struct mjs *mjs_create();
struct mjs_create_opts {
const struct bf_code *code;
};
struct mjs *mjs_create_opt(struct mjs_create_opts opts);
void mjs_destroy(struct mjs *mjs);
mjs_val_t mjs_get_global(struct mjs *mjs);
void mjs_own(struct mjs *mjs, mjs_val_t *v);
int mjs_disown(struct mjs *mjs, mjs_val_t *v);
mjs_err_t mjs_set_errorf(struct mjs *mjs, mjs_err_t err, const char *fmt, ...);
mjs_err_t mjs_prepend_errorf(struct mjs *mjs, mjs_err_t err, const char *fmt,
...);
void mjs_print_error(struct mjs *mjs, FILE *fp, const char *msg,
int print_stack_trace);
const char *mjs_strerror(struct mjs *mjs, enum mjs_err err);
void mjs_set_generate_jsc(struct mjs *mjs, int generate_jsc);
int mjs_nargs(struct mjs *mjs);
mjs_val_t mjs_arg(struct mjs *mjs, int n);
void mjs_return(struct mjs *mjs, mjs_val_t v);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_exec_public.h"
#endif
#ifndef MJS_EXEC_PUBLIC_H_
#define MJS_EXEC_PUBLIC_H_
#include <stdio.h>
#if defined(__cplusplus)
extern "C" {
#endif
mjs_err_t mjs_exec(struct mjs *, const char *src, mjs_val_t *res);
mjs_err_t mjs_exec_buf(struct mjs *, const char *src, size_t, mjs_val_t *res);
mjs_err_t mjs_exec_file(struct mjs *mjs, const char *path, mjs_val_t *res);
mjs_err_t mjs_apply(struct mjs *mjs, mjs_val_t *res, mjs_val_t func,
mjs_val_t this_val, int nargs, mjs_val_t *args);
mjs_err_t mjs_call(struct mjs *mjs, mjs_val_t *res, mjs_val_t func,
mjs_val_t this_val, int nargs, ...);
mjs_val_t mjs_get_this(struct mjs *mjs);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_ffi_public.h"
#endif
#ifndef MJS_FFI_PUBLIC_H_
#define MJS_FFI_PUBLIC_H_
#if defined(__cplusplus)
extern "C" {
#endif
enum mjs_ffi_ctype {
MJS_FFI_CTYPE_NONE,
MJS_FFI_CTYPE_USERDATA,
MJS_FFI_CTYPE_CALLBACK,
MJS_FFI_CTYPE_INT,
MJS_FFI_CTYPE_BOOL,
MJS_FFI_CTYPE_DOUBLE,
MJS_FFI_CTYPE_FLOAT,
MJS_FFI_CTYPE_CHAR_PTR,
MJS_FFI_CTYPE_VOID_PTR,
MJS_FFI_CTYPE_STRUCT_MG_STR_PTR,
MJS_FFI_CTYPE_STRUCT_MG_STR,
MJS_FFI_CTYPE_INVALID,
};
typedef void *(mjs_ffi_resolver_t)(void *handle, const char *symbol);
void mjs_set_ffi_resolver(struct mjs *mjs, mjs_ffi_resolver_t *dlsym);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_gc_public.h"
#endif
#ifndef MJS_GC_PUBLIC_H_
#define MJS_GC_PUBLIC_H_
#if defined(__cplusplus)
extern "C" {
#endif
void mjs_gc(struct mjs *mjs, int full);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_object_public.h"
#endif
#ifndef MJS_OBJECT_PUBLIC_H_
#define MJS_OBJECT_PUBLIC_H_
#include <stddef.h>
#if defined(__cplusplus)
extern "C" {
#endif
int mjs_is_object(mjs_val_t v);
mjs_val_t mjs_mk_object(struct mjs *mjs);
enum mjs_struct_field_type {
MJS_STRUCT_FIELD_TYPE_INVALID,
MJS_STRUCT_FIELD_TYPE_STRUCT,
MJS_STRUCT_FIELD_TYPE_STRUCT_PTR,
MJS_STRUCT_FIELD_TYPE_INT,
MJS_STRUCT_FIELD_TYPE_BOOL,
MJS_STRUCT_FIELD_TYPE_DOUBLE,
MJS_STRUCT_FIELD_TYPE_FLOAT,
MJS_STRUCT_FIELD_TYPE_CHAR_PTR,
MJS_STRUCT_FIELD_TYPE_VOID_PTR,
MJS_STRUCT_FIELD_TYPE_MG_STR_PTR,
MJS_STRUCT_FIELD_TYPE_MG_STR,
MJS_STRUCT_FIELD_TYPE_DATA,
MJS_STRUCT_FIELD_TYPE_INT8,
MJS_STRUCT_FIELD_TYPE_INT16,
MJS_STRUCT_FIELD_TYPE_UINT8,
MJS_STRUCT_FIELD_TYPE_UINT16,
MJS_STRUCT_FIELD_TYPE_CUSTOM,
};
struct mjs_c_struct_member {
const char *name;
int offset;
enum mjs_struct_field_type type;
const void *arg;
};
mjs_val_t mjs_struct_to_obj(struct mjs *mjs, const void *base,
const struct mjs_c_struct_member *members);
mjs_val_t mjs_get(struct mjs *mjs, mjs_val_t obj, const char *name,
size_t name_len);
mjs_val_t mjs_get_v(struct mjs *mjs, mjs_val_t obj, mjs_val_t name);
mjs_val_t mjs_get_v_proto(struct mjs *mjs, mjs_val_t obj, mjs_val_t key);
mjs_err_t mjs_set(struct mjs *mjs, mjs_val_t obj, const char *name, size_t len,
mjs_val_t val);
mjs_err_t mjs_set_v(struct mjs *mjs, mjs_val_t obj, mjs_val_t name,
mjs_val_t val);
int mjs_del(struct mjs *mjs, mjs_val_t obj, const char *name, size_t len);
mjs_val_t mjs_next(struct mjs *mjs, mjs_val_t obj, mjs_val_t *iterator);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_primitive_public.h"
#endif
#ifndef MJS_PRIMITIVE_PUBLIC_H_
#define MJS_PRIMITIVE_PUBLIC_H_
#if defined(__cplusplus)
extern "C" {
#endif
#define MJS_NULL MJS_TAG_NULL
#define MJS_UNDEFINED MJS_TAG_UNDEFINED
typedef void (*mjs_func_ptr_t)(void);
mjs_val_t mjs_mk_null(void);
int mjs_is_null(mjs_val_t v);
mjs_val_t mjs_mk_undefined(void);
int mjs_is_undefined(mjs_val_t v);
mjs_val_t mjs_mk_number(struct mjs *mjs, double num);
double mjs_get_double(struct mjs *mjs, mjs_val_t v);
int mjs_get_int(struct mjs *mjs, mjs_val_t v);
int32_t mjs_get_int32(struct mjs *mjs, mjs_val_t v);
int mjs_is_number(mjs_val_t v);
mjs_val_t mjs_mk_foreign(struct mjs *mjs, void *ptr);
mjs_val_t mjs_mk_foreign_func(struct mjs *mjs, mjs_func_ptr_t fn);
void *mjs_get_ptr(struct mjs *mjs, mjs_val_t v);
int mjs_is_foreign(mjs_val_t v);
mjs_val_t mjs_mk_boolean(struct mjs *mjs, int v);
int mjs_get_bool(struct mjs *mjs, mjs_val_t v);
int mjs_is_boolean(mjs_val_t v);
mjs_val_t mjs_mk_function(struct mjs *mjs, size_t off);
int mjs_is_function(mjs_val_t v);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_string_public.h"
#endif
#ifndef MJS_STRING_PUBLIC_H_
#define MJS_STRING_PUBLIC_H_
#define MJS_STRING_LITERAL_MAX_LEN 128
#if defined(__cplusplus)
extern "C" {
#endif
mjs_val_t mjs_mk_string(struct mjs *mjs, const char *str, size_t len, int copy);
int mjs_is_string(mjs_val_t v);
const char *mjs_get_string(struct mjs *mjs, mjs_val_t *v, size_t *len);
const char *mjs_get_cstring(struct mjs *mjs, mjs_val_t *v);
int mjs_strcmp(struct mjs *mjs, mjs_val_t *a, const char *b, size_t len);
#if defined(__cplusplus)
}
#endif
#endif
#ifdef MJS_MODULE_LINES
#line 1 "src/mjs_util_public.h"
#endif
#ifndef MJS_UTIL_PUBLIC_H_
#define MJS_UTIL_PUBLIC_H_
#include <stdio.h>
#if defined(__cplusplus)
extern "C" {
#endif
const char *mjs_typeof(mjs_val_t v);
void mjs_fprintf(mjs_val_t v, struct mjs *mjs, FILE *fp);
void mjs_sprintf(mjs_val_t v, struct mjs *mjs, char *buf, size_t buflen);
#if MJS_ENABLE_DEBUG
void mjs_disasm(const uint8_t *code, size_t len);
void mjs_dump(struct mjs *mjs, int do_disasm);
#endif
const char *mjs_get_bcode_filename_by_offset(struct mjs *mjs, int offset);
int mjs_get_lineno_by_offset(struct mjs *mjs, int offset);
int mjs_get_offset_by_call_frame_num(struct mjs *mjs, int cf_num);
#if defined(__cplusplus)
}
#endif
#endif