Add pedantic and comply with C99
diff --git a/README.md b/README.md
index 88b0b24..727d4cb 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@
## Language
-This `bc` is written in pure ISO C11.
+This `bc` is written in pure ISO C99.
## Git Workflow
diff --git a/include/data.h b/include/data.h
index 96c9a77..b8c44a7 100644
--- a/include/data.h
+++ b/include/data.h
@@ -123,12 +123,17 @@
bool var;
union {
+
BcNum num;
+
struct {
+
BcNum* array;
- uint32_t num_elems;
- };
- };
+ uint32_t nelems;
+
+ } array;
+
+ } data;
} BcLocal;
@@ -141,7 +146,7 @@
BcNum num;
const char* name;
- };
+ } data;
} BcTemp;
@@ -194,9 +199,9 @@
char* name;
size_t idx;
- };
+ } id;
- };
+ } data;
} BcResult;
diff --git a/src/bc/data.c b/src/bc/data.c
index 53168af..9707b92 100644
--- a/src/bc/data.c
+++ b/src/bc/data.c
@@ -233,14 +233,14 @@
{
BcStatus status;
- status = bc_num_init(&local->num, strlen(num));
+ status = bc_num_init(&local->data.num, strlen(num));
if (status) return status;
local->name = name;
local->var = true;
- return bc_num_parse(&local->num, num, base, scale);
+ return bc_num_parse(&local->data.num, num, base, scale);
}
BcStatus bc_local_initArray(BcLocal* local, const char* name, uint32_t nelems) {
@@ -276,12 +276,12 @@
free((void*) l->name);
if (l->var) {
- bc_num_free(&l->num);
+ bc_num_free(&l->data.num);
}
else {
- nelems = l->num_elems;
- array = l->array;
+ nelems = l->data.array.nelems;
+ array = l->data.array.array;
for (uint32_t i = 0; i < nelems; ++i) {
bc_num_free(array + i);
@@ -289,8 +289,8 @@
free(array);
- l->array = NULL;
- l->num_elems = 0;
+ l->data.array.array = NULL;
+ l->data.array.nelems = 0;
}
}
@@ -316,7 +316,7 @@
return BC_STATUS_EXEC_INVALID_NAME;
}
- temp->name = name;
+ temp->data.name = name;
return BC_STATUS_SUCCESS;
}
@@ -339,7 +339,7 @@
t = (BcTemp*) temp;
if (t->type == BC_TEMP_NUM) {
- bc_num_free(&t->num);
+ bc_num_free(&t->data.num);
}
}
@@ -383,7 +383,7 @@
case BC_RESULT_INTERMEDIATE:
case BC_RESULT_CONSTANT:
{
- bc_num_free(&r->num);
+ bc_num_free(&r->data.num);
break;
}
diff --git a/src/bc/program.c b/src/bc/program.c
index 8820f6e..9543b79 100644
--- a/src/bc/program.c
+++ b/src/bc/program.c
@@ -631,7 +631,7 @@
num = bc_vec_top(&p->expr_stack);
- bc_num_print(&num->num, p->obase);
+ bc_num_print(&num->data.num, p->obase);
bc_vec_pop(&p->expr_stack);
@@ -685,7 +685,7 @@
BcResult result;
result.type = BC_RESULT_CONSTANT;
- result.idx = bc_program_index(code, &ip->idx);
+ result.data.id.idx = bc_program_index(code, &ip->idx);
status = bc_vec_push(&p->expr_stack, &result);
@@ -714,15 +714,15 @@
result.type = BC_RESULT_INTERMEDIATE;
- status = bc_num_init(&result.num, BC_NUM_DEF_SIZE);
+ status = bc_num_init(&result.data.num, BC_NUM_DEF_SIZE);
if (status) return status;
- status = bc_num_copy(&result.num, &ptr->num);
+ status = bc_num_copy(&result.data.num, &ptr->data.num);
if (status) return status;
- result.num.neg = !result.num.neg;
+ result.data.num.neg = !result.data.num.neg;
status = bc_vec_pop(&p->expr_stack);
@@ -762,7 +762,7 @@
result.type = BC_RESULT_INTERMEDIATE;
- status = bc_num_init(&result.num, BC_NUM_DEF_SIZE);
+ status = bc_num_init(&result.data.num, BC_NUM_DEF_SIZE);
if (status) return status;
@@ -780,10 +780,12 @@
op = bc_math_ops[inst - BC_INST_OP_MODULUS];
- status = op(&result1->num, &result2->num, &result.num, p->scale);
+ status = op(&result1->data.num, &result2->data.num,
+ &result.data.num, p->scale);
}
else {
- status = bc_num_pow(&result1->num, &result2->num, &result.num, p->scale);
+ status = bc_num_pow(&result1->data.num, &result2->data.num,
+ &result.data.num, p->scale);
}
if (status) return status;
@@ -938,7 +940,7 @@
case BC_RESULT_INTERMEDIATE:
{
- *num = &result->num;
+ *num = &result->data.num;
break;
}
@@ -947,19 +949,19 @@
char** s;
size_t idx;
- idx = result->idx;
+ idx = result->data.id.idx;
s = bc_vec_item(&p->constants, idx);
if (!s) return BC_STATUS_EXEC_INVALID_CONSTANT;
- status = bc_num_init(&result->num, strlen(*s));
+ status = bc_num_init(&result->data.num, strlen(*s));
if (status) return status;
- *num = &result->num;
+ *num = &result->data.num;
- status = bc_num_parse(&result->num, *s, p->ibase, p->scale);
+ status = bc_num_parse(&result->data.num, *s, p->ibase, p->scale);
break;
}