fix msvc
This commit is contained in:
59
vendor/mruby-compiler2/src/ccontext.c
vendored
Normal file
59
vendor/mruby-compiler2/src/ccontext.c
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
#include <string.h>
|
||||
#include "../include/mrc_ccontext.h"
|
||||
#include "../include/mrc_parser_util.h"
|
||||
|
||||
MRC_API mrc_ccontext *
|
||||
mrc_ccontext_new(mrb_state *mrb)
|
||||
{
|
||||
mrc_ccontext temp_c = {0};
|
||||
temp_c.mrb = mrb;
|
||||
mrc_ccontext *c = (mrc_ccontext *)mrc_calloc((&temp_c), 1, sizeof(mrc_ccontext));
|
||||
c->p = (mrc_parser_state *)mrc_calloc((&temp_c), 1, sizeof(mrc_parser_state));
|
||||
c->mrb = temp_c.mrb;
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
MRC_API void
|
||||
mrc_ccontext_cleanup_local_variables(mrc_ccontext *cc)
|
||||
{
|
||||
cc->keep_lv = FALSE;
|
||||
|
||||
if (cc->options && cc->options->scopes) {
|
||||
for (int i = 0; i < cc->options->scopes[0].locals_count; i++) {
|
||||
mrc_free(cc, (void *)cc->options->scopes[0].locals[i].source);
|
||||
}
|
||||
mrc_free(cc, cc->options);
|
||||
}
|
||||
}
|
||||
|
||||
MRC_API const char *
|
||||
mrc_ccontext_filename(mrc_ccontext *c, const char *s)
|
||||
{
|
||||
if (s) {
|
||||
size_t len = strlen(s);
|
||||
char *p = (char*)mrc_malloc(c, len + 1);
|
||||
|
||||
if (p == NULL) return NULL;
|
||||
memcpy(p, s, len + 1);
|
||||
if (c->filename) {
|
||||
mrc_free(c, c->filename);
|
||||
}
|
||||
c->filename = p;
|
||||
}
|
||||
return c->filename;
|
||||
}
|
||||
|
||||
MRC_API void
|
||||
mrc_ccontext_free(mrc_ccontext *c)
|
||||
{
|
||||
if (c->filename_table) mrc_free(c, c->filename_table);
|
||||
if (c->filename) mrc_free(c, c->filename);
|
||||
pm_parser_free(c->p);
|
||||
mrc_diagnostic_list_free(c);
|
||||
if (c->p->lex_callback) {
|
||||
mrc_free(c, c->p->lex_callback);
|
||||
}
|
||||
mrc_free(c, c->p);
|
||||
mrc_free(c, c);
|
||||
}
|
||||
Reference in New Issue
Block a user