mie: implement caching and emitting string data
This commit is contained in:
@@ -66,43 +66,39 @@ void mie_builder_put_record(
|
||||
b_queue_push_back(&builder->b_module->m_records, &rec->r_base.v_entry);
|
||||
}
|
||||
|
||||
#if 0
|
||||
void mie_builder_put_data(struct mie_builder *builder, struct mie_data *data)
|
||||
{
|
||||
if (!builder->b_module) {
|
||||
return;
|
||||
}
|
||||
|
||||
b_queue_iterator it = {};
|
||||
b_queue_foreach (&it, &builder->b_module->m_data) {
|
||||
struct mie_value *cur
|
||||
= b_unbox(struct mie_value, it.entry, v_entry);
|
||||
|
||||
if (!strcmp(cur->v_name.n_str, data->d_base.v_name.n_str)) {
|
||||
return;
|
||||
}
|
||||
const char *data_name = data->d_base.v_name.n_str;
|
||||
struct mie_data *v = mie_module_get_data(builder->b_module, data_name);
|
||||
if (v) {
|
||||
return;
|
||||
}
|
||||
|
||||
b_queue_push_back(&builder->b_module->m_data, &data->d_base.v_entry);
|
||||
mie_module_put_data(builder->b_module, data);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
void mie_builder_put_type(struct mie_builder *builder, struct mie_type *type)
|
||||
{
|
||||
if (!builder->b_module) {
|
||||
return;
|
||||
}
|
||||
|
||||
b_queue_iterator it = {};
|
||||
b_queue_foreach (&it, &builder->b_module->m_types) {
|
||||
struct mie_value *cur
|
||||
= b_unbox(struct mie_value, it.entry, v_entry);
|
||||
|
||||
if (!strcmp(cur->v_name.n_str, type->t_base.v_name.n_str)) {
|
||||
return;
|
||||
}
|
||||
const char *type_name = type->t_base.v_name.n_str;
|
||||
struct mie_data *v = mie_module_get_data(builder->b_module, type_name);
|
||||
if (v) {
|
||||
return;
|
||||
}
|
||||
|
||||
b_queue_push_back(&builder->b_module->m_data, &type->t_base.v_entry);
|
||||
mie_module_put_data(builder->b_module, MIE_VALUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
void mie_builder_set_insert_point(
|
||||
struct mie_builder *builder, struct mie_block *block)
|
||||
@@ -127,7 +123,32 @@ struct mie_value *mie_builder_get_data_ptr(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mie_module_put_data(builder->b_module, data);
|
||||
mie_module_put_data(builder->b_module, data, data_ident);
|
||||
}
|
||||
|
||||
return MIE_VALUE(data);
|
||||
}
|
||||
|
||||
struct mie_value *mie_builder_get_string_ptr(
|
||||
struct mie_builder *builder, const char *s)
|
||||
{
|
||||
if (!builder->b_module) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct mie_data *data = mie_module_get_string_ptr(builder->b_module, s);
|
||||
if (!data) {
|
||||
struct mie_type *str
|
||||
= mie_ctx_get_type(builder->b_ctx, MIE_TYPE_STR);
|
||||
struct mie_value *value = mie_ctx_get_string(builder->b_ctx, s);
|
||||
|
||||
data = mie_data_create_const((struct mie_const *)value);
|
||||
|
||||
if (!data) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mie_module_put_data(builder->b_module, data, ".str");
|
||||
}
|
||||
|
||||
return MIE_VALUE(data);
|
||||
|
||||
Reference in New Issue
Block a user