diff options
Diffstat (limited to 'src/mds-kbdc')
-rw-r--r-- | src/mds-kbdc/builtin-functions.c | 4 | ||||
-rw-r--r-- | src/mds-kbdc/compile-layout.c | 19 |
2 files changed, 12 insertions, 11 deletions
diff --git a/src/mds-kbdc/builtin-functions.c b/src/mds-kbdc/builtin-functions.c index 4ccc31f..fbff16f 100644 --- a/src/mds-kbdc/builtin-functions.c +++ b/src/mds-kbdc/builtin-functions.c @@ -145,7 +145,7 @@ static char32_t* builtin_function_rsh_2(const char32_t** restrict args) { define_2; for (i = 0; i < n; i++) - rc[i] = a[i % an] << b[i % bn]; + rc[i] = a[i % an] >> b[i % bn]; return(rc); } @@ -160,7 +160,7 @@ static char32_t* builtin_function_lsh_2(const char32_t** restrict args) { define_2; for (i = 0; i < n; i++) - rc[i] = a[i % an] >> b[i % bn]; + rc[i] = a[i % an] << b[i % bn]; return(rc); } diff --git a/src/mds-kbdc/compile-layout.c b/src/mds-kbdc/compile-layout.c index ae29046..e6b6ced 100644 --- a/src/mds-kbdc/compile-layout.c +++ b/src/mds-kbdc/compile-layout.c @@ -18,7 +18,7 @@ #include "compile-layout.h" /* TODO add call stack */ /* TODO fix so that for-loops do not generate the same errors/warnings in all iterations [loopy_error]. */ -/* TODO test all builtin functions */ +/* TODO test set/3 and get/2 */ /* TODO test function- and macro-overloading */ /* TODO test same-named macros and functions */ @@ -224,27 +224,28 @@ static int check_set_3_get_2_call(mds_kbdc_tree_t* restrict tree, int is_set, co mds_kbdc_tree_t* variable; mds_kbdc_tree_t* element; - size_t index; + size_t index, arg_count; if ((variable_arg[0] <= 0) || (variable_arg[1] != -1)) - FUN_ERROR(tree, ERROR, "first argument in call to function ‘%s’ must be a variable index", F);/* TODO test */ + FUN_ERROR(tree, ERROR, "first argument in call to function ‘%s’ must be a variable index", F); if ((index_arg[0] < 0) || (index_arg[1] != -1)) - FUN_ERROR(tree, ERROR, "second argument in call to function ‘%s’ must be an element index", F);/* TODO test */ + FUN_ERROR(tree, ERROR, "second argument in call to function ‘%s’ must be an element index", F); variable = variables_get((size_t)*variable_arg); if (variable == NULL) - FUN_ERROR(tree, ERROR, "‘\\%zu’ is not declared", (size_t)*variable_arg);/* TODO test */ + FUN_ERROR(tree, ERROR, "‘\\%zu’ is not declared", (size_t)*variable_arg); if (variable->type != C(ARRAY)) - FUN_ERROR(tree, ERROR, "‘\\%zu’ is not an array", (size_t)*variable_arg);/* TODO test */ + FUN_ERROR(tree, ERROR, "‘\\%zu’ is not an array", (size_t)*variable_arg); - index = (size_t)*index_arg; + arg_count = index = (size_t)*index_arg; element = variable->array.elements; while (element && index--) element = element->next; if (element == NULL) - FUN_ERROR(tree, ERROR, "‘\\%zu’ does not hold %zu elements", (size_t)*variable_arg, (size_t)*index_arg);/* TODO test */ + FUN_ERROR(tree, ERROR, "‘\\%zu’ does not hold %zu %s", + (size_t)*variable_arg, arg_count + 1, arg_count ? "elements" : "element"); return 0; fail: @@ -361,7 +362,7 @@ static int call_function(mds_kbdc_tree_t* restrict tree, const char* restrict na FUN_ERROR(tree, ERROR, "built-in function ‘%s/%zu’ requires that either none of" " the arguments are empty strings or that all of them are", - name, arg_count);/* TODO test */ + name, arg_count); } /* Call the function. */ |