Lines Matching refs:parser
59 ucl_set_err (struct ucl_parser *parser, int code, const char *str, UT_string **err) in ucl_set_err() argument
62 struct ucl_chunk *chunk = parser->chunks; in ucl_set_err()
64 if (parser->cur_file) { in ucl_set_err()
65 filename = parser->cur_file; in ucl_set_err()
89 parser->err_code = code; in ucl_set_err()
93 ucl_save_comment (struct ucl_parser *parser, const char *begin, size_t len) in ucl_save_comment() argument
100 if (parser->last_comment) { in ucl_save_comment()
102 DL_APPEND (parser->last_comment, nobj); in ucl_save_comment()
105 parser->last_comment = nobj; in ucl_save_comment()
111 ucl_attach_comment (struct ucl_parser *parser, ucl_object_t *obj, bool before) in ucl_attach_comment() argument
113 if (parser->last_comment) { in ucl_attach_comment()
114 ucl_object_insert_key (parser->comments, parser->last_comment, in ucl_attach_comment()
118 parser->last_comment->flags |= UCL_OBJECT_INHERITED; in ucl_attach_comment()
121 parser->last_comment = NULL; in ucl_attach_comment()
131 ucl_skip_comments (struct ucl_parser *parser) in ucl_skip_comments() argument
133 struct ucl_chunk *chunk = parser->chunks; in ucl_skip_comments()
142 if (parser->state != UCL_STATE_SCOMMENT && in ucl_skip_comments()
143 parser->state != UCL_STATE_MCOMMENT) { in ucl_skip_comments()
148 if (parser->flags & UCL_PARSER_SAVE_COMMENTS) { in ucl_skip_comments()
149 ucl_save_comment (parser, beg, p - beg); in ucl_skip_comments()
179 if (parser->flags & UCL_PARSER_SAVE_COMMENTS) { in ucl_skip_comments()
180 ucl_save_comment (parser, beg, p - beg + 1); in ucl_skip_comments()
201 ucl_set_err (parser, UCL_ENESTED, in ucl_skip_comments()
202 "unfinished multiline comment", &parser->err); in ucl_skip_comments()
208 if (beg && p > beg && (parser->flags & UCL_PARSER_SAVE_COMMENTS)) { in ucl_skip_comments()
209 ucl_save_comment (parser, beg, p - beg); in ucl_skip_comments()
311 ucl_check_variable_safe (struct ucl_parser *parser, const char *ptr, size_t remain, in ucl_check_variable_safe() argument
319 LL_FOREACH (parser->variables, var) { in ucl_check_variable_safe()
341 if (!(*found) && parser->var_handler != NULL && strict) { in ucl_check_variable_safe()
343 if (parser->var_handler (ptr, remain, &dst, &dstlen, &need_free, in ucl_check_variable_safe()
344 parser->var_data)) { in ucl_check_variable_safe()
367 ucl_check_variable (struct ucl_parser *parser, const char *ptr, in ucl_check_variable() argument
379 ret = ucl_check_variable_safe (parser, ptr + 1, p - ptr - 1, in ucl_check_variable()
398 ret = ucl_check_variable_safe (parser, ptr, remain, out_len, false, &found); in ucl_check_variable()
423 ucl_expand_single_variable (struct ucl_parser *parser, const char *ptr, in ucl_expand_single_variable() argument
449 LL_FOREACH (parser->variables, var) { in ucl_expand_single_variable()
461 if (strict && parser->var_handler != NULL) { in ucl_expand_single_variable()
466 if (parser->var_handler (p, var_len, &dst, &dstlen, &need_free, in ucl_expand_single_variable()
467 parser->var_data)) { in ucl_expand_single_variable()
506 ucl_expand_variable (struct ucl_parser *parser, unsigned char **dst, in ucl_expand_variable() argument
514 if (parser->flags & UCL_PARSER_DISABLE_MACRO) { in ucl_expand_variable()
522 p = ucl_check_variable (parser, p + 1, end - p - 1, &out_len, &vars_found); in ucl_expand_variable()
545 p = ucl_expand_single_variable (parser, p, end - p, &d); in ucl_expand_variable()
570 ucl_copy_or_store_ptr (struct ucl_parser *parser, in ucl_copy_or_store_ptr() argument
579 (need_expand && parser->variables != NULL) || in ucl_copy_or_store_ptr()
580 !(parser->flags & UCL_PARSER_ZEROCOPY)) { in ucl_copy_or_store_ptr()
584 ucl_set_err (parser, UCL_EINTERNAL, "cannot allocate memory for a string", in ucl_copy_or_store_ptr()
585 &parser->err); in ucl_copy_or_store_ptr()
601 ret = ucl_expand_variable (parser, dst, tmp, ret); in ucl_copy_or_store_ptr()
630 ucl_parser_add_container (ucl_object_t *obj, struct ucl_parser *parser, in ucl_parser_add_container() argument
637 obj = ucl_object_new_full (UCL_OBJECT, parser->chunks->priority); in ucl_parser_add_container()
643 obj->value.ov = ucl_hash_create (parser->flags & UCL_PARSER_KEY_LOWERCASE); in ucl_parser_add_container()
645 parser->state = UCL_STATE_KEY; in ucl_parser_add_container()
649 obj = ucl_object_new_full (UCL_ARRAY, parser->chunks->priority); in ucl_parser_add_container()
654 parser->state = UCL_STATE_VALUE; in ucl_parser_add_container()
660 ucl_set_err (parser, UCL_EINTERNAL, "cannot allocate memory for an object", in ucl_parser_add_container()
661 &parser->err); in ucl_parser_add_container()
668 LL_PREPEND (parser->stack, st); in ucl_parser_add_container()
669 parser->cur_obj = obj; in ucl_parser_add_container()
938 ucl_lex_number (struct ucl_parser *parser, in ucl_lex_number() argument
945 true, false, ((parser->flags & UCL_PARSER_NO_TIME) == 0)); in ucl_lex_number()
954 ucl_set_err (parser, UCL_ESYNTAX, "numeric value out of range", in ucl_lex_number()
955 &parser->err); in ucl_lex_number()
971 ucl_lex_json_string (struct ucl_parser *parser, in ucl_lex_json_string() argument
983 ucl_set_err (parser, UCL_ESYNTAX, "unexpected newline", in ucl_lex_json_string()
984 &parser->err); in ucl_lex_json_string()
987 ucl_set_err (parser, UCL_ESYNTAX, "unexpected control character", in ucl_lex_json_string()
988 &parser->err); in ucl_lex_json_string()
996 ucl_set_err (parser, UCL_ESYNTAX, "unfinished escape character", in ucl_lex_json_string()
997 &parser->err); in ucl_lex_json_string()
1005 ucl_set_err (parser, UCL_ESYNTAX, "invalid utf escape", in ucl_lex_json_string()
1006 &parser->err); in ucl_lex_json_string()
1012 ucl_set_err (parser, UCL_ESYNTAX, "unfinished escape character", in ucl_lex_json_string()
1013 &parser->err); in ucl_lex_json_string()
1038 ucl_set_err (parser, UCL_ESYNTAX, "no quote at the end of json string", in ucl_lex_json_string()
1039 &parser->err); in ucl_lex_json_string()
1044 ucl_parser_append_elt (struct ucl_parser *parser, ucl_hash_t *cont, in ucl_parser_append_elt() argument
1050 if ((parser->flags & UCL_PARSER_NO_IMPLICIT_ARRAYS) == 0) { in ucl_parser_append_elt()
1054 parser->stack->obj->len ++; in ucl_parser_append_elt()
1075 ucl_parser_process_object_element (struct ucl_parser *parser, ucl_object_t *nobj) in ucl_parser_process_object_element() argument
1081 container = parser->stack->obj->value.ov; in ucl_parser_process_object_element()
1086 parser->flags & UCL_PARSER_KEY_LOWERCASE); in ucl_parser_process_object_element()
1089 parser->stack->obj->len ++; in ucl_parser_process_object_element()
1094 switch (parser->chunks->strategy) { in ucl_parser_process_object_element()
1113 ucl_parser_append_elt (parser, container, tobj, nobj); in ucl_parser_process_object_element()
1121 DL_APPEND (parser->trash_objs, nobj); in ucl_parser_process_object_element()
1141 ucl_set_err (parser, UCL_EMERGE, errmsg, &parser->err); in ucl_parser_process_object_element()
1154 ucl_parser_append_elt (parser, container, tobj, nobj); in ucl_parser_process_object_element()
1162 DL_APPEND (parser->trash_objs, nobj); in ucl_parser_process_object_element()
1172 parser->stack->obj->value.ov = container; in ucl_parser_process_object_element()
1173 parser->cur_obj = nobj; in ucl_parser_process_object_element()
1174 ucl_attach_comment (parser, nobj, false); in ucl_parser_process_object_element()
1188 ucl_parse_key (struct ucl_parser *parser, struct ucl_chunk *chunk, in ucl_parse_key() argument
1203 if (!(parser->flags & UCL_PARSER_DISABLE_MACRO)) { in ucl_parse_key()
1207 parser->prev_state = parser->state; in ucl_parse_key()
1208 parser->state = UCL_STATE_MACRO_NAME; in ucl_parse_key()
1218 if (!ucl_skip_comments (parser)) { in ucl_parse_key()
1246 parser->prev_state = parser->state; in ucl_parse_key()
1247 parser->state = UCL_STATE_MACRO_NAME; in ucl_parse_key()
1252 ucl_set_err (parser, UCL_ESYNTAX, "key must begin with a letter", in ucl_parse_key()
1253 &parser->err); in ucl_parse_key()
1269 ucl_set_err (parser, UCL_ESYNTAX, "invalid character in a key", in ucl_parse_key()
1270 &parser->err); in ucl_parse_key()
1276 if (!ucl_lex_json_string (parser, chunk, &need_unescape, &ucl_escape, &var_expand)) { in ucl_parse_key()
1288 ucl_set_err (parser, UCL_ESYNTAX, "unfinished key", &parser->err); in ucl_parse_key()
1306 ucl_set_err (parser, UCL_ESYNTAX, "unexpected '=' character", in ucl_parse_key()
1307 &parser->err); in ucl_parse_key()
1317 ucl_set_err (parser, UCL_ESYNTAX, "unexpected ':' character", in ucl_parse_key()
1318 &parser->err); in ucl_parse_key()
1324 if (!ucl_skip_comments (parser)) { in ucl_parse_key()
1336 ucl_set_err (parser, UCL_ESYNTAX, "unfinished key", &parser->err); in ucl_parse_key()
1371 nobj = ucl_object_new_full (UCL_NULL, parser->chunks->priority); in ucl_parse_key()
1372 keylen = ucl_copy_or_store_ptr (parser, c, &nobj->trash_stack[UCL_TRASH_KEY], in ucl_parse_key()
1373 &key, end - c, need_unescape, parser->flags & UCL_PARSER_KEY_LOWERCASE, false); in ucl_parse_key()
1379 ucl_set_err (parser, UCL_ESYNTAX, "empty keys are not allowed", &parser->err); in ucl_parse_key()
1387 if (!ucl_parser_process_object_element (parser, nobj)) { in ucl_parse_key()
1408 ucl_parse_string_value (struct ucl_parser *parser, in ucl_parse_string_value() argument
1479 ucl_parse_multiline_string (struct ucl_parser *parser, in ucl_parse_multiline_string() argument
1528 ucl_parser_get_container (struct ucl_parser *parser) in ucl_parser_get_container() argument
1532 if (parser == NULL || parser->stack == NULL || parser->stack->obj == NULL) { in ucl_parser_get_container()
1536 if (parser->stack->obj->type == UCL_ARRAY) { in ucl_parser_get_container()
1538 obj = ucl_object_new_full (UCL_NULL, parser->chunks->priority); in ucl_parser_get_container()
1539 t = parser->stack->obj; in ucl_parser_get_container()
1546 parser->cur_obj = obj; in ucl_parser_get_container()
1547 ucl_attach_comment (parser, obj, false); in ucl_parser_get_container()
1551 obj = parser->cur_obj; in ucl_parser_get_container()
1564 ucl_parse_value (struct ucl_parser *parser, struct ucl_chunk *chunk) in ucl_parse_value() argument
1580 if (!ucl_skip_comments (parser)) { in ucl_parse_value()
1592 if (!ucl_lex_json_string (parser, chunk, &need_unescape, &ucl_escape, in ucl_parse_value()
1597 obj = ucl_parser_get_container (parser); in ucl_parse_value()
1604 if ((str_len = ucl_copy_or_store_ptr (parser, c + 1, in ucl_parse_value()
1612 parser->state = UCL_STATE_AFTER_VALUE; in ucl_parse_value()
1618 obj = ucl_parser_get_container (parser); in ucl_parse_value()
1620 obj = ucl_parser_add_container (obj, parser, false, parser->stack->level); in ucl_parse_value()
1630 obj = ucl_parser_get_container (parser); in ucl_parse_value()
1632 obj = ucl_parser_add_container (obj, parser, true, parser->stack->level); in ucl_parse_value()
1643 if (parser->stack && parser->stack->obj->type == UCL_ARRAY) { in ucl_parse_value()
1644 parser->state = UCL_STATE_AFTER_VALUE; in ucl_parse_value()
1652 obj = ucl_parser_get_container (parser); in ucl_parse_value()
1668 if ((str_len = ucl_parse_multiline_string (parser, chunk, c, in ucl_parse_value()
1670 ucl_set_err (parser, UCL_ESYNTAX, in ucl_parse_value()
1671 "unterminated multiline value", &parser->err); in ucl_parse_value()
1677 if ((str_len = ucl_copy_or_store_ptr (parser, c, in ucl_parse_value()
1685 parser->state = UCL_STATE_AFTER_VALUE; in ucl_parse_value()
1695 obj = ucl_parser_get_container (parser); in ucl_parse_value()
1700 if (!ucl_lex_number (parser, chunk, obj)) { in ucl_parse_value()
1701 if (parser->state == UCL_STATE_ERROR) { in ucl_parse_value()
1706 parser->state = UCL_STATE_AFTER_VALUE; in ucl_parse_value()
1712 if (!ucl_parse_string_value (parser, chunk, &var_expand, in ucl_parse_value()
1724 ucl_set_err (parser, UCL_ESYNTAX, "string value must not be empty", in ucl_parse_value()
1725 &parser->err); in ucl_parse_value()
1734 if ((str_len = ucl_copy_or_store_ptr (parser, c, in ucl_parse_value()
1742 parser->state = UCL_STATE_AFTER_VALUE; in ucl_parse_value()
1760 ucl_parse_after_value (struct ucl_parser *parser, struct ucl_chunk *chunk) in ucl_parse_after_value() argument
1775 if (!ucl_skip_comments (parser)) { in ucl_parse_after_value()
1784 if (parser->stack == NULL) { in ucl_parse_after_value()
1785 ucl_set_err (parser, UCL_ESYNTAX, in ucl_parse_after_value()
1787 &parser->err); in ucl_parse_after_value()
1790 if ((*p == '}' && parser->stack->obj->type == UCL_OBJECT) || in ucl_parse_after_value()
1791 (*p == ']' && parser->stack->obj->type == UCL_ARRAY)) { in ucl_parse_after_value()
1794 st = parser->stack; in ucl_parse_after_value()
1795 parser->stack = st->next; in ucl_parse_after_value()
1798 if (parser->cur_obj) { in ucl_parse_after_value()
1799 ucl_attach_comment (parser, parser->cur_obj, true); in ucl_parse_after_value()
1802 while (parser->stack != NULL) { in ucl_parse_after_value()
1803 st = parser->stack; in ucl_parse_after_value()
1809 parser->stack = st->next; in ucl_parse_after_value()
1810 parser->cur_obj = st->obj; in ucl_parse_after_value()
1815 ucl_set_err (parser, UCL_ESYNTAX, in ucl_parse_after_value()
1817 &parser->err); in ucl_parse_after_value()
1821 if (parser->stack == NULL) { in ucl_parse_after_value()
1839 ucl_set_err (parser, UCL_ESYNTAX, "delimiter is missing", in ucl_parse_after_value()
1840 &parser->err); in ucl_parse_after_value()
1851 ucl_skip_macro_as_comment (struct ucl_parser *parser, in ucl_skip_macro_as_comment() argument
1942 if (parser->flags & UCL_PARSER_SAVE_COMMENTS) { in ucl_skip_macro_as_comment()
1943 ucl_save_comment (parser, c, p - c); in ucl_skip_macro_as_comment()
1963 ucl_parse_macro_value (struct ucl_parser *parser, in ucl_parse_macro_value() argument
1977 if (!ucl_lex_json_string (parser, chunk, &need_unescape, &ucl_escape, &var_expand)) { in ucl_parse_macro_value()
2040 ucl_parse_macro_arguments (struct ucl_parser *parser, in ucl_parse_macro_arguments() argument
2106 params_parser = ucl_parser_new (parser->flags); in ucl_parse_macro_arguments()
2108 ucl_set_err (parser, UCL_ESYNTAX, "macro arguments parsing error", in ucl_parse_macro_arguments()
2109 &parser->err); in ucl_parse_macro_arguments()
2133 #define SKIP_SPACES_COMMENTS(parser, chunk, p) do { \ argument
2137 if (!ucl_skip_comments (parser)) { \
2154 ucl_state_machine (struct ucl_parser *parser) in ucl_state_machine() argument
2157 struct ucl_chunk *chunk = parser->chunks; in ucl_state_machine()
2164 if (parser->top_obj == NULL) { in ucl_state_machine()
2165 parser->state = UCL_STATE_INIT; in ucl_state_machine()
2170 switch (parser->state) { in ucl_state_machine()
2177 if (!ucl_skip_comments (parser)) { in ucl_state_machine()
2178 parser->prev_state = parser->state; in ucl_state_machine()
2179 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2192 parser->state = UCL_STATE_VALUE; in ucl_state_machine()
2196 parser->state = UCL_STATE_KEY; in ucl_state_machine()
2202 if (parser->top_obj == NULL) { in ucl_state_machine()
2203 if (parser->state == UCL_STATE_VALUE) { in ucl_state_machine()
2204 obj = ucl_parser_add_container (NULL, parser, true, 0); in ucl_state_machine()
2207 obj = ucl_parser_add_container (NULL, parser, false, 0); in ucl_state_machine()
2214 parser->top_obj = obj; in ucl_state_machine()
2215 parser->cur_obj = obj; in ucl_state_machine()
2227 parser->state = UCL_STATE_AFTER_VALUE; in ucl_state_machine()
2230 if (parser->stack == NULL) { in ucl_state_machine()
2232 ucl_set_err (parser, UCL_ESYNTAX, "top object is finished but the parser " in ucl_state_machine()
2233 "expects a key", &parser->err); in ucl_state_machine()
2234 parser->prev_state = parser->state; in ucl_state_machine()
2235 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2238 if (!ucl_parse_key (parser, chunk, &next_key, &end_of_object)) { in ucl_state_machine()
2239 parser->prev_state = parser->state; in ucl_state_machine()
2240 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2245 parser->state = UCL_STATE_AFTER_VALUE; in ucl_state_machine()
2248 else if (parser->state != UCL_STATE_MACRO_NAME) { in ucl_state_machine()
2249 if (next_key && parser->stack->obj->type == UCL_OBJECT) { in ucl_state_machine()
2251 obj = ucl_parser_add_container (parser->cur_obj, parser, false, in ucl_state_machine()
2252 parser->stack->level + 1); in ucl_state_machine()
2258 parser->state = UCL_STATE_VALUE; in ucl_state_machine()
2268 if (!parser->cur_obj || !ucl_parse_value (parser, chunk)) { in ucl_state_machine()
2269 parser->prev_state = parser->state; in ucl_state_machine()
2270 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2277 if (!ucl_parse_after_value (parser, chunk)) { in ucl_state_machine()
2278 parser->prev_state = parser->state; in ucl_state_machine()
2279 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2283 if (parser->stack != NULL) { in ucl_state_machine()
2284 if (parser->stack->obj->type == UCL_OBJECT) { in ucl_state_machine()
2285 parser->state = UCL_STATE_KEY; in ucl_state_machine()
2289 parser->state = UCL_STATE_VALUE; in ucl_state_machine()
2300 if (parser->flags & UCL_PARSER_DISABLE_MACRO) { in ucl_state_machine()
2301 if (!ucl_skip_macro_as_comment (parser, chunk)) { in ucl_state_machine()
2303 ucl_create_err (&parser->err, in ucl_state_machine()
2307 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2312 parser->state = parser->prev_state; in ucl_state_machine()
2324 HASH_FIND (hh, parser->macroes, c, macro_len, macro); in ucl_state_machine()
2326 ucl_create_err (&parser->err, in ucl_state_machine()
2334 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2338 SKIP_SPACES_COMMENTS(parser, chunk, p); in ucl_state_machine()
2339 parser->state = UCL_STATE_MACRO; in ucl_state_machine()
2343 ucl_create_err (&parser->err, in ucl_state_machine()
2347 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2355 macro_args = ucl_parse_macro_arguments (parser, chunk); in ucl_state_machine()
2358 SKIP_SPACES_COMMENTS(parser, chunk, p); in ucl_state_machine()
2364 if (!ucl_parse_macro_value (parser, chunk, macro, in ucl_state_machine()
2366 parser->prev_state = parser->state; in ucl_state_machine()
2367 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2370 macro_len = ucl_expand_variable (parser, ¯o_escaped, in ucl_state_machine()
2372 parser->state = parser->prev_state; in ucl_state_machine()
2378 parser->top_obj, in ucl_state_machine()
2390 parser->top_obj, in ucl_state_machine()
2402 ucl_set_err (parser, UCL_EINTERNAL, in ucl_state_machine()
2403 "internal error: parser has macro undefined", &parser->err); in ucl_state_machine()
2409 chunk = parser->chunks; in ucl_state_machine()
2421 ucl_set_err (parser, UCL_EINTERNAL, in ucl_state_machine()
2422 "internal error: parser is in an unknown state", &parser->err); in ucl_state_machine()
2423 parser->state = UCL_STATE_ERROR; in ucl_state_machine()
2428 if (parser->last_comment) { in ucl_state_machine()
2429 if (parser->cur_obj) { in ucl_state_machine()
2430 ucl_attach_comment (parser, parser->cur_obj, true); in ucl_state_machine()
2432 else if (parser->stack && parser->stack->obj) { in ucl_state_machine()
2433 ucl_attach_comment (parser, parser->stack->obj, true); in ucl_state_machine()
2435 else if (parser->top_obj) { in ucl_state_machine()
2436 ucl_attach_comment (parser, parser->top_obj, true); in ucl_state_machine()
2439 ucl_object_unref (parser->last_comment); in ucl_state_machine()
2449 struct ucl_parser *parser; in ucl_parser_new() local
2451 parser = UCL_ALLOC (sizeof (struct ucl_parser)); in ucl_parser_new()
2452 if (parser == NULL) { in ucl_parser_new()
2456 memset (parser, 0, sizeof (struct ucl_parser)); in ucl_parser_new()
2458 ucl_parser_register_macro (parser, "include", ucl_include_handler, parser); in ucl_parser_new()
2459 ucl_parser_register_macro (parser, "try_include", ucl_try_include_handler, parser); in ucl_parser_new()
2460 ucl_parser_register_macro (parser, "includes", ucl_includes_handler, parser); in ucl_parser_new()
2461 ucl_parser_register_macro (parser, "priority", ucl_priority_handler, parser); in ucl_parser_new()
2462 ucl_parser_register_macro (parser, "load", ucl_load_handler, parser); in ucl_parser_new()
2463 ucl_parser_register_context_macro (parser, "inherit", ucl_inherit_handler, parser); in ucl_parser_new()
2465 parser->flags = flags; in ucl_parser_new()
2466 parser->includepaths = NULL; in ucl_parser_new()
2469 parser->comments = ucl_object_typed_new (UCL_OBJECT); in ucl_parser_new()
2474 ucl_parser_set_filevars (parser, NULL, false); in ucl_parser_new()
2477 return parser; in ucl_parser_new()
2481 ucl_parser_set_default_priority (struct ucl_parser *parser, unsigned prio) in ucl_parser_set_default_priority() argument
2483 if (parser == NULL) { in ucl_parser_set_default_priority()
2487 parser->default_priority = prio; in ucl_parser_set_default_priority()
2493 ucl_parser_register_macro (struct ucl_parser *parser, const char *macro, in ucl_parser_register_macro() argument
2511 HASH_ADD_KEYPTR (hh, parser->macroes, new->name, strlen (new->name), new); in ucl_parser_register_macro()
2515 ucl_parser_register_context_macro (struct ucl_parser *parser, const char *macro, in ucl_parser_register_context_macro() argument
2534 HASH_ADD_KEYPTR (hh, parser->macroes, new->name, strlen (new->name), new); in ucl_parser_register_context_macro()
2538 ucl_parser_register_variable (struct ucl_parser *parser, const char *var, in ucl_parser_register_variable() argument
2548 LL_FOREACH (parser->variables, cur) { in ucl_parser_register_variable()
2559 DL_DELETE (parser->variables, new); in ucl_parser_register_variable()
2581 DL_APPEND (parser->variables, new); in ucl_parser_register_variable()
2592 ucl_parser_set_variables_handler (struct ucl_parser *parser, in ucl_parser_set_variables_handler() argument
2595 parser->var_handler = handler; in ucl_parser_set_variables_handler()
2596 parser->var_data = ud; in ucl_parser_set_variables_handler()
2600 ucl_parser_add_chunk_full (struct ucl_parser *parser, const unsigned char *data, in ucl_parser_add_chunk_full() argument
2606 if (parser == NULL) { in ucl_parser_add_chunk_full()
2611 ucl_create_err (&parser->err, "invalid chunk added"); in ucl_parser_add_chunk_full()
2615 if (parser->state != UCL_STATE_ERROR) { in ucl_parser_add_chunk_full()
2618 ucl_create_err (&parser->err, "cannot allocate chunk structure"); in ucl_parser_add_chunk_full()
2644 LL_PREPEND (parser->chunks, chunk); in ucl_parser_add_chunk_full()
2645 parser->recursion ++; in ucl_parser_add_chunk_full()
2647 if (parser->recursion > UCL_MAX_RECURSION) { in ucl_parser_add_chunk_full()
2648 ucl_create_err (&parser->err, "maximum include nesting limit is reached: %d", in ucl_parser_add_chunk_full()
2649 parser->recursion); in ucl_parser_add_chunk_full()
2658 return ucl_state_machine (parser); in ucl_parser_add_chunk_full()
2660 return ucl_parse_msgpack (parser); in ucl_parser_add_chunk_full()
2662 return ucl_parse_csexp (parser); in ucl_parser_add_chunk_full()
2667 if (parser->top_obj == NULL) { in ucl_parser_add_chunk_full()
2672 parser->top_obj = ucl_object_new_full (UCL_OBJECT, priority); in ucl_parser_add_chunk_full()
2679 ucl_create_err (&parser->err, "a parser is in an invalid state"); in ucl_parser_add_chunk_full()
2685 ucl_parser_add_chunk_priority (struct ucl_parser *parser, in ucl_parser_add_chunk_priority() argument
2689 if (parser == NULL) { in ucl_parser_add_chunk_priority()
2693 return ucl_parser_add_chunk_full (parser, data, len, in ucl_parser_add_chunk_priority()
2698 ucl_parser_add_chunk (struct ucl_parser *parser, const unsigned char *data, in ucl_parser_add_chunk() argument
2701 if (parser == NULL) { in ucl_parser_add_chunk()
2705 return ucl_parser_add_chunk_full (parser, data, len, in ucl_parser_add_chunk()
2706 parser->default_priority, UCL_DUPLICATE_APPEND, UCL_PARSE_UCL); in ucl_parser_add_chunk()
2710 ucl_parser_add_string_priority (struct ucl_parser *parser, const char *data, in ucl_parser_add_string_priority() argument
2714 ucl_create_err (&parser->err, "invalid string added"); in ucl_parser_add_string_priority()
2721 return ucl_parser_add_chunk_priority (parser, in ucl_parser_add_string_priority()
2726 ucl_parser_add_string (struct ucl_parser *parser, const char *data, in ucl_parser_add_string() argument
2729 if (parser == NULL) { in ucl_parser_add_string()
2733 return ucl_parser_add_string_priority (parser, in ucl_parser_add_string()
2734 (const unsigned char *)data, len, parser->default_priority); in ucl_parser_add_string()
2738 ucl_set_include_path (struct ucl_parser *parser, ucl_object_t *paths) in ucl_set_include_path() argument
2740 if (parser == NULL || paths == NULL) { in ucl_set_include_path()
2744 if (parser->includepaths == NULL) { in ucl_set_include_path()
2745 parser->includepaths = ucl_object_copy (paths); in ucl_set_include_path()
2748 ucl_object_unref (parser->includepaths); in ucl_set_include_path()
2749 parser->includepaths = ucl_object_copy (paths); in ucl_set_include_path()
2752 if (parser->includepaths == NULL) { in ucl_set_include_path()