diff options
author | Mattias Andrée <maandree@operamail.com> | 2014-12-01 13:27:13 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2014-12-01 13:27:13 +0100 |
commit | 2d0181e9e07236ea28fb638c4a9eafb5896635b6 (patch) | |
tree | 2cd560e7bd8fa5960a06e4fade81fd57b6dc581f /src/mds-kbdc/validate-tree.c | |
parent | m (diff) | |
download | mds-2d0181e9e07236ea28fb638c4a9eafb5896635b6.tar.gz mds-2d0181e9e07236ea28fb638c4a9eafb5896635b6.tar.bz2 mds-2d0181e9e07236ea28fb638c4a9eafb5896635b6.tar.xz |
mds-kbdc: add some test cases + fix issued with inclusion
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to '')
-rw-r--r-- | src/mds-kbdc/validate-tree.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/mds-kbdc/validate-tree.c b/src/mds-kbdc/validate-tree.c index 73ec07e..e1369e0 100644 --- a/src/mds-kbdc/validate-tree.c +++ b/src/mds-kbdc/validate-tree.c @@ -77,6 +77,16 @@ static mds_kbdc_parse_error_t* error; static mds_kbdc_parsed_t* restrict result; /** + * The original value of `result->pathname` + */ +static char* original_pathname; + +/** + * The original value of `result->source_code` + */ +static mds_kbdc_source_code_t* original_source_code; + +/** * Stack of visited include-statements */ static mds_kbdc_tree_include_t** restrict includes = NULL; @@ -152,10 +162,20 @@ static int validate_subtree(mds_kbdc_tree_t* restrict tree); */ static int dump_include_stack(size_t ptr) { + char* old_pathname = result->pathname; + mds_kbdc_source_code_t* old_source_code = result->source_code; while (ptr--) - NEW_ERROR(includes[ptr], NOTE, "included from here"); + { + result->pathname = ptr ? includes[ptr - 1]->filename : original_pathname; + result->source_code = ptr ? includes[ptr - 1]->source_code : original_source_code; + NEW_ERROR(includes[ptr], NOTE, "included from here"); + } + result->pathname = old_pathname; + result->source_code = old_source_code; return 0; pfail: + result->pathname = old_pathname; + result->source_code = old_source_code; return -1; } @@ -169,12 +189,18 @@ static int dump_include_stack(size_t ptr) static int validate_include(mds_kbdc_tree_include_t* restrict tree) { mds_kbdc_tree_include_t** old; + char* pathname = result->pathname; + mds_kbdc_source_code_t* source_code = result->source_code; int r, saved_errno; if (includes_ptr == includes_size) if (xxrealloc(old, includes, includes_size += 4, mds_kbdc_tree_include_t*)) return saved_errno = errno, free(old), errno = saved_errno, -1; includes[includes_ptr++] = tree; + result->pathname = tree->filename; + result->source_code = tree->source_code; r = validate_subtree(tree->inner); + result->pathname = pathname; + result->source_code = source_code; return includes_ptr--, r; } @@ -569,8 +595,12 @@ int validate_tree(mds_kbdc_parsed_t* restrict result_) { int r, saved_errno; result = result_; + original_pathname = result_->pathname; + original_source_code = result_->source_code; r = validate_subtree(result_->tree); saved_errno = errno; + result_->pathname = original_pathname; + result_->source_code = original_source_code; free(includes), includes = NULL, includes_size = includes_ptr = 0; free(fors), fors = NULL, fors_size = fors_ptr = 0; return errno = saved_errno, r; |