struct value * value_from_string (lex_string_t *s, enum value_tp tp) { struct value *val = emalloc (sizeof(struct value)); val->type = tp; val->cont.string = get_lex_string (s); return val; }
struct pair * build_pair (lex_string_t * fieldname, struct value * val) { struct pair *res = emalloc (sizeof(struct pair)); res->key = get_lex_string (fieldname); res->value = val; return res; }
struct value * build_rec_from_value (lex_string_t *tag, struct value *val) { struct gen_record *rec = emalloc (sizeof(struct gen_record)); struct value *res = emalloc (sizeof(struct value)); rec->id = get_lex_string (tag); rec->singleton = 1; rec->cont.value = val; res->type = VAL_TP_RECORD; res->cont.record = rec; return res; }
struct value * build_rec_from_pairlist (lex_string_t *tag, struct pair_lst *plst) { struct gen_record *rec = emalloc (sizeof(struct gen_record)); struct value *val = emalloc (sizeof(struct value)); rec->id = get_lex_string (tag); rec->singleton = 0; rec->cont.list = plst; val->type = VAL_TP_RECORD; val->cont.record = rec; return val; }
int setup_use_directive (struct symtab *symtab, lex_string_t *id, lex_string_t *val) { int status = 0; str_ptr neo = get_lex_string (val); if (neo == NULL) return 1; if (LEX_STRING_EQUAL(id, "stack")) str_copy (symtab->directives->stack, neo); else if (LEX_STRING_EQUAL(id, "strategy")) str_copy (symtab->directives->strategy, neo); else if (LEX_STRING_EQUAL(id, "multi_fit")) str_copy (symtab->directives->multi_fit, neo); else status = 1; STR_PTR_FREE(neo); return status; }