From d4bd835cd0d96d926cb6444170e6b420230ef51b Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Sun, 12 Jul 2020 13:35:09 -0500 Subject: [PATCH] Progress: featuerless make. Enable detection of quotes when processing extended content within the lists inside of the fakefile (except for the settings list). fss-quoted.h must come before fss-named.h. Be sure to include level_0/type_array.h. Fix mistake in f_macro_uintX_tss_new() macros where the f_macro_memory_structures_new() has the wrong arguments. Use fll_fss_snatch_map_apart() instead of fll_fss_snatch_map_mash_apart() when expanding iki variables. The arguments need to be separated so they can potentially be passed to an exec() equivalent call as individual arguments. Any operation that expects a single argument can still implode these strings before executing. --- level_0/f_fss/c/fss-named.h | 32 ++++++++++--- level_0/f_fss/c/fss.h | 2 +- level_0/f_type/c/type_array.h | 26 +++++------ level_3/fake/c/fake.h | 1 + level_3/fake/c/private-make.c | 98 ++++++++++++++++++++++++++-------------- level_3/fake/c/private-make.h | 11 ++++- level_3/fake/data/build/fakefile | 2 +- 7 files changed, 115 insertions(+), 57 deletions(-) diff --git a/level_0/f_fss/c/fss-named.h b/level_0/f_fss/c/fss-named.h index b8a81a5..2dac9dc 100644 --- a/level_0/f_fss/c/fss-named.h +++ b/level_0/f_fss/c/fss-named.h @@ -17,14 +17,15 @@ extern "C" { #endif /** - * This holds a named set of fss objects and contents. + * This holds a named set of fss objects, contents, and quotedss. * - * The objects and contents should each be of the same used and size. + * The objects, contents, and quotedss should each be of the same used and size. * Any deviation to this would require implementing custom equivelents to the standard management macros. * * object: The name representing this set. * objects: The array of objects. * contents: The array of contents. + * quotedss: The array of quoted for each content. */ #ifndef _di_f_fss_named_ typedef struct { @@ -32,51 +33,70 @@ extern "C" { f_fss_objects objects; f_fss_contents contents; + f_fss_quotedss quotedss; } f_fss_named; - #define f_fss_named_initialize { f_fss_object_initialize, f_fss_objects_initialize, f_fss_contents_initialize } + #define f_fss_named_initialize { f_fss_object_initialize, f_fss_objects_initialize, f_fss_contents_initialize, f_fss_quotedss_initialize } #define f_macro_fss_named_clear(set) \ f_macro_fss_object_clear(set.object) \ f_macro_fss_objects_clear(set.objects) \ - f_macro_fss_contents_clear(set.contents) + f_macro_fss_contents_clear(set.contents) \ + f_macro_fss_quotedss_clear(set.quotedss) #define f_macro_fss_named_new(status, set, length) \ f_macro_fss_objects_new(status, set.objects, length) \ if (F_status_is_fine(status)) { \ f_macro_fss_contents_new(status, set.contents, length) \ + } \ + if (F_status_is_fine(status)) { \ + f_macro_fss_quotedss_new(status, set.quotedss, length) \ } #define f_macro_fss_named_delete(status, set) \ f_macro_fss_objects_delete(status, set.objects) \ if (F_status_is_fine(status)) { \ f_macro_fss_contents_delete(status, set.contents) \ + } \ + if (F_status_is_fine(status)) { \ + f_macro_fss_quotedss_delete(status, set.quotedss) \ } #define f_macro_fss_named_destroy(status, set) \ f_macro_fss_objects_destroy(status, set.objects) \ if (F_status_is_fine(status)) { \ f_macro_fss_contents_destroy(status, set.contents) \ + } \ + if (F_status_is_fine(status)) { \ + f_macro_fss_quotedss_destroy(status, set.quotedss) \ } #define f_macro_fss_named_delete_simple(set) \ f_macro_fss_objects_delete_simple(set.objects) \ - f_macro_fss_contents_delete_simple(set.contents) + f_macro_fss_contents_delete_simple(set.contents) \ + f_macro_fss_quotedss_delete_simple(set.quotedss) #define f_macro_fss_named_destroy_simple(set) \ f_macro_fss_objects_destroy_simple(set.objects) \ - f_macro_fss_contents_destroy_simple(set.contents) + f_macro_fss_contents_destroy_simple(set.contents) \ + f_macro_fss_quotedss_destroy_simple(set.quotedss) #define f_macro_fss_named_resize(status, set, new_length) \ f_macro_fss_objects_resize(status, set.objects, new_length) \ if (F_status_is_fine(status)) { \ f_macro_fss_contents_resize(status, set.contents, new_length) \ + } \ + if (F_status_is_fine(status)) { \ + f_macro_fss_quotedss_resize(status, set.quotedss, new_length) \ } #define f_macro_fss_named_adjust(status, set, new_length) \ f_macro_fss_objects_adjust(status, set.objects, new_length) \ if (F_status_is_fine(status)) { \ f_macro_fss_contents_adjust(status, set.contents, new_length) \ + } \ + if (F_status_is_fine(status)) { \ + f_macro_fss_quotedss_adjust(status, set.quotedss, new_length) \ } #endif // _di_f_fss_named_ diff --git a/level_0/f_fss/c/fss.h b/level_0/f_fss/c/fss.h index a7d39c6..a321930 100644 --- a/level_0/f_fss/c/fss.h +++ b/level_0/f_fss/c/fss.h @@ -25,9 +25,9 @@ // fll-0 fss includes #include +#include #include #include -#include #include #ifdef __cplusplus diff --git a/level_0/f_type/c/type_array.h b/level_0/f_type/c/type_array.h index c44ab55..ae93bc0 100644 --- a/level_0/f_type/c/type_array.h +++ b/level_0/f_type/c/type_array.h @@ -70,7 +70,7 @@ extern "C" { #define f_macro_array_lengthss_clear(lengths) f_macro_memory_structures_clear(lengths) - #define f_macro_array_lengthss_new(status, lengths, length) f_macro_memory_structures_new(status, lengths, f_array_length, f_array_lengths, length) + #define f_macro_array_lengthss_new(status, lengths, length) f_macro_memory_structures_new(status, lengths, f_array_length, length) #define f_macro_array_lengthss_delete(status, lengths) f_macro_memory_structures_delete(status, lengths, f_array_length, f_array_lengths) #define f_macro_array_lengthss_destroy(status, lengths) f_macro_memory_structures_destroy(status, lengths, f_array_length, f_array_lengths) @@ -194,7 +194,7 @@ extern "C" { #define f_macro_int8_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_int8_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int8_t, f_int8_ts, length) + #define f_macro_int8_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int8_t, length) #define f_macro_int8_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, int8_t, f_int8_ts) #define f_macro_int8_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, int8_t, f_int8_ts) @@ -256,7 +256,7 @@ extern "C" { #define f_macro_uint8_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_uint8_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint8_t, f_uint8_ts, length) + #define f_macro_uint8_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint8_t, length) #define f_macro_uint8_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, uint8_t, f_uint8_ts) #define f_macro_uint8_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, uint8_t, f_uint8_ts) @@ -318,7 +318,7 @@ extern "C" { #define f_macro_int16_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_int16_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int16_t, f_int16_ts, length) + #define f_macro_int16_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int16_t, length) #define f_macro_int16_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, int16_t, f_int16_ts) #define f_macro_int16_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, int16_t, f_int16_ts) @@ -380,7 +380,7 @@ extern "C" { #define f_macro_uint16_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_uint16_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint16_t, f_uint16_ts, length) + #define f_macro_uint16_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint16_t, length) #define f_macro_uint16_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, uint16_t, f_uint16_ts) #define f_macro_uint16_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, uint16_t, f_uint16_ts) @@ -442,7 +442,7 @@ extern "C" { #define f_macro_int32_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_int32_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int32_t, f_int32_ts, length) + #define f_macro_int32_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int32_t, length) #define f_macro_int32_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, int32_t, f_int32_ts) #define f_macro_int32_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, int32_t, f_int32_ts) @@ -504,7 +504,7 @@ extern "C" { #define f_macro_uint32_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_uint32_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint32_t, f_uint32_ts, length) + #define f_macro_uint32_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint32_t, length) #define f_macro_uint32_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, uint32_t, f_uint32_ts) #define f_macro_uint32_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, uint32_t, f_uint32_ts) @@ -566,7 +566,7 @@ extern "C" { #define f_macro_int64_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_int64_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int64_t, f_int64_ts, length) + #define f_macro_int64_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int64_t, length) #define f_macro_int64_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, int64_t, f_int64_ts) #define f_macro_int64_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, int64_t, f_int64_ts) @@ -628,7 +628,7 @@ extern "C" { #define f_macro_uint64_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_uint64_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint64_t, f_uint64_ts, length) + #define f_macro_uint64_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint64_t, length) #define f_macro_uint64_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, uint64_t, f_uint64_ts) #define f_macro_uint64_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, uint64_t, f_uint64_ts) @@ -691,7 +691,7 @@ extern "C" { #define f_macro_int128_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_int128_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, __int128_t, f_int128_ts, length) + #define f_macro_int128_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, __int128_t, length) #define f_macro_int128_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, __int128_t, f_int128_ts) #define f_macro_int128_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, __int128_t, f_int128_ts) @@ -753,7 +753,7 @@ extern "C" { #define f_macro_uint128_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_uint128_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, __uint128_t, f_uint128_ts, length) + #define f_macro_uint128_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, __uint128_t, length) #define f_macro_uint128_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, __uint128_t, f_uint128_ts) #define f_macro_uint128_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, __uint128_t, f_uint128_ts) @@ -815,7 +815,7 @@ extern "C" { #define f_macro_int128_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_int128_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int64_t, f_int128_ts, length) + #define f_macro_int128_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, int64_t, length) #define f_macro_int128_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, int64_t, f_int128_ts) #define f_macro_int128_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, int64_t, f_int128_ts) @@ -877,7 +877,7 @@ extern "C" { #define f_macro_uint128_tss_clear(numbers) f_macro_memory_structures_clear(numbers) - #define f_macro_uint128_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint64_t, f_uint128_ts, length) + #define f_macro_uint128_tss_new(status, numbers, length) f_macro_memory_structures_new(status, numbers, uint64_t, length) #define f_macro_uint128_tss_delete(status, numbers) f_macro_memory_structures_delete(status, numbers, uint64_t, f_uint128_ts) #define f_macro_uint128_tss_destroy(status, numbers) f_macro_memory_structures_destroy(status, numbers, uint64_t, f_uint128_ts) diff --git a/level_3/fake/c/fake.h b/level_3/fake/c/fake.h index 3ee8192..aa89cee 100644 --- a/level_3/fake/c/fake.h +++ b/level_3/fake/c/fake.h @@ -51,6 +51,7 @@ // fll-0 includes #include #include +#include #include #include #include diff --git a/level_3/fake/c/private-make.c b/level_3/fake/c/private-make.c index fc16497..9d228b2 100644 --- a/level_3/fake/c/private-make.c +++ b/level_3/fake/c/private-make.c @@ -76,27 +76,18 @@ extern "C" { continue; } - f_fss_quotedss quoted_contents = f_fss_quotedss_initialize; - content_range = list_contents.array[i].array[0]; - *status = fll_fss_extended_read(&data_make->buffer, &content_range, &settings.objects, &settings.contents, 0, "ed_contents); + *status = fll_fss_extended_read(&data_make->buffer, &content_range, &settings.objects, &settings.contents, 0, 0); if (F_status_is_error(*status)) { fake_print_error_fss(data.context, data.verbosity, *status, "fll_fss_extended_read", data.file_data_build_fakefile.string, content_range, F_true); - f_macro_fss_quotedss_delete_simple(quoted_contents); f_macro_fss_set_delete_simple(settings); f_macro_fss_objects_delete_simple(list_objects); f_macro_fss_contents_delete_simple(list_contents); return; } - if (quoted_contents.used) { - // @todo - } - - f_macro_fss_quotedss_delete_simple(quoted_contents); - missing_settings = F_false; continue; } @@ -114,7 +105,7 @@ extern "C" { content_range = list_contents.array[i].array[0]; - *status = fll_fss_extended_read(&data_make->buffer, &content_range, &data_make->fakefile.array[data_make->fakefile.used].objects, &data_make->fakefile.array[data_make->fakefile.used].contents, 0, 0); + *status = fll_fss_extended_read(&data_make->buffer, &content_range, &data_make->fakefile.array[data_make->fakefile.used].objects, &data_make->fakefile.array[data_make->fakefile.used].contents, 0, &data_make->fakefile.array[data_make->fakefile.used].quotedss); if (F_status_is_error(*status)) { fake_print_error_fss(data.context, data.verbosity, *status, "fll_fss_extended_read", data.file_data_build_fakefile.string, content_range, F_true); @@ -205,9 +196,9 @@ extern "C" { &data_make->setting_make.parameter, }; - *status = fll_fss_snatch_map_mash_apart(data_make->buffer, settings.objects, settings.contents, settings_name, settings_length, 2, " ", 1, settings_value, 0); + *status = fll_fss_snatch_map_apart(data_make->buffer, settings.objects, settings.contents, settings_name, settings_length, 2, settings_value, 0); if (F_status_is_error(*status)) { - fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fll_fss_snatch_map_mash_apart", F_true); + fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fll_fss_snatch_map_apart", F_true); f_macro_fss_set_delete_simple(settings); return; @@ -246,7 +237,7 @@ extern "C" { #endif // _di_fake_make_operate_ #ifndef _di_fake_make_operation_expand_ - void fake_make_operation_expand(const fake_data data, const f_string_range section_name, const f_array_length operation, const f_string_static operation_name, const f_fss_content content, fake_make_data *data_make, f_string_dynamics *arguments, f_status *status) { + void fake_make_operation_expand(const fake_data data, const f_string_range section_name, const f_array_length operation, const f_string_static operation_name, const f_fss_content content, const f_fss_quoteds quoteds, fake_make_data *data_make, f_string_dynamics *arguments, f_status *status) { if (F_status_is_error(*status)) return; if (content.used == 0) return; @@ -294,15 +285,20 @@ extern "C" { f_array_length k = 0; f_array_length l = 0; + f_array_length used_arguments = 0; + f_string_length previous = 0; for (; i < content.used; i++) { + if (content.array[i].start > content.array[i].stop) { continue; } range = content.array[i]; + used_arguments = arguments->used; + *status = fl_iki_read(&data_make->buffer, &range, &iki_variable, &iki_vocabulary, &iki_content); if (F_status_is_error(*status)) { fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_iki_read", F_true); @@ -379,30 +375,61 @@ extern "C" { break; } - // @todo: consider designing a way to designate appending map as a single value string or multiple separate strings. - // this could potential be done by considering single vs double quotes. - // then arguments->used would have to be incremented based on this number. if (map_multis->used) { for (k = 0; k < map_multis->used; k++) { *status = fl_string_dynamic_partial_compare_dynamic(map_multis->array[k].name, data_make->buffer, iki_content.array[j]); if (*status == F_equal_to) { if (map_multis->array[k].value.used) { - for (l = 0; l < map_multis->array[k].value.used; l++) { - if (l > 0) { - *status = fl_string_append(" ", 1, &arguments->array[arguments->used]); + if (quoteds.array[i]) { + for (l = 0; l < map_multis->array[k].value.used; l++) { + if (l > 0) { + *status = fl_string_append(" ", 1, &arguments->array[arguments->used]); + if (F_status_is_error(*status)) { + fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_append", F_true); + break; + } + } + + *status = fl_string_dynamic_append_nulless(map_multis->array[k].value.array[l], &arguments->array[arguments->used]); if (F_status_is_error(*status)) { - fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_append", F_true); + fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_append_nulless", F_true); + break; + } + } // for + } + else { + if (arguments->used + map_multis->array[k].value.used > arguments->size) { + if (arguments->used + map_multis->array[k].value.used > F_buffer_too_large) { + *status = F_status_set_error(F_buffer_too_large); + + fake_print_error(data.context, data.verbosity, F_buffer_too_large, "f_macro_string_dynamics_resize", F_true); break; } - } - *status = fl_string_dynamic_append_nulless(map_multis->array[k].value.array[l], &arguments->array[arguments->used]); - if (F_status_is_error(*status)) { - fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_append_nulless", F_true); - break; + f_macro_string_dynamics_resize((*status), (*arguments), arguments->used + map_multis->array[k].value.used); + if (F_status_is_error(*status)) { + fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "f_macro_string_dynamics_resize", F_true); + break; + } } - } // for + + for (l = 0; l < map_multis->array[k].value.used; l++) { + *status = fl_string_dynamic_append_nulless(map_multis->array[k].value.array[l], &arguments->array[arguments->used]); + if (F_status_is_error(*status)) { + fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_dynamic_append_nulless", F_true); + break; + } + + *status = fl_string_dynamic_terminate_after(&arguments->array[arguments->used]); + if (F_status_is_error(*status)) { + fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_terminate_after", F_true); + break; + } + + arguments->used++; + } // for + } } break; @@ -440,13 +467,16 @@ extern "C" { } } - *status = fl_string_dynamic_terminate_after(&arguments->array[arguments->used]); - if (F_status_is_error(*status)) { - fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_terminate_after", F_true); - break; - } + // if iki variable did not match (results in empty string) or iki variable is inside quotes, then increment. + if (used_arguments == arguments->used) { + *status = fl_string_dynamic_terminate_after(&arguments->array[arguments->used]); + if (F_status_is_error(*status)) { + fake_print_error(data.context, data.verbosity, F_status_set_fine(*status), "fl_string_terminate_after", F_true); + break; + } - arguments->used++; + arguments->used++; + } f_macro_iki_variable_delete_simple(iki_variable); f_macro_iki_vocabulary_delete_simple(iki_vocabulary); @@ -609,7 +639,7 @@ extern "C" { operations[i] = operation; - fake_make_operation_expand(data, section->name, operation, *operation_name, section->contents.array[i], data_make, &arguments[i], status); + fake_make_operation_expand(data, section->name, operation, *operation_name, section->contents.array[i], section->quotedss.array[i], data_make, &arguments[i], status); if (F_status_is_error(*status)) { has_error = F_true; *status = F_none; diff --git a/level_3/fake/c/private-make.h b/level_3/fake/c/private-make.h index 82ce457..fc4b66e 100644 --- a/level_3/fake/c/private-make.h +++ b/level_3/fake/c/private-make.h @@ -277,17 +277,24 @@ extern "C" { #endif // _di_fake_make_operate_ /** - * Execute the make operation. + * For a given make operation section, expand the content into an arguments array. * * @param data * The program data. * @param section_name + * The section name. * @param operation + * The operation being performed. * @param operation_name + * The operation name. * @param content + * The content array. + * @param quotedss + * The array of quoted associated with the content. * @param data_make * All make related setting data, including data from the fakefile and optionally build settings file. * @param arguments + * The expanded arguments. * @param section_id * The array location id within the fakefile of the section to operate on. * @param status @@ -296,7 +303,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fake_make_operation_expand_ - extern void fake_make_operation_expand(const fake_data data, const f_string_range section_name, const f_array_length operation, const f_string_static operation_name, const f_fss_content content, fake_make_data *data_make, f_string_dynamics *arguments, f_status *status) f_gcc_attribute_visibility_internal; + extern void fake_make_operation_expand(const fake_data data, const f_string_range section_name, const f_array_length operation, const f_string_static operation_name, const f_fss_content content, const f_fss_quoteds quoteds, fake_make_data *data_make, f_string_dynamics *arguments, f_status *status) f_gcc_attribute_visibility_internal; #endif // _di_fake_make_operation_expand_ /** diff --git a/level_3/fake/data/build/fakefile b/level_3/fake/data/build/fakefile index 6bbeffd..82e9769 100644 --- a/level_3/fake/data/build/fakefile +++ b/level_3/fake/data/build/fakefile @@ -11,7 +11,7 @@ settings: parameter verbose4 +v and then " some" main: - print This is a line "(define = 'define:"example"') parameter:"verbose4"." + print This is a line "(define = 'define:"example"')." parameter:"verbose4" invalid -- 1.8.3.1