Fix a misinterpretation of the bc spec
diff --git a/include/bc/data.h b/include/bc/data.h
index 44ef9ba..603f247 100644
--- a/include/bc/data.h
+++ b/include/bc/data.h
@@ -251,8 +251,8 @@
 int bc_entry_cmp(void* entry1, void*entry2);
 void bc_entry_free(void* entry);
 
-void bc_arb_free(void* num);
-
 void bc_num_free(void* num);
 
+void bc_constant_free(void* constant);
+
 #endif // BC_DATA_H
diff --git a/src/bc/data.c b/src/bc/data.c
index cf72258..d58133f 100644
--- a/src/bc/data.c
+++ b/src/bc/data.c
@@ -399,15 +399,6 @@
   free(e->name);
 }
 
-void bc_arb_free(void* num) {
-
-  fxdpnt* n;
-
-  n = *((fxdpnt**) num);
-
-  arb_free(n);
-}
-
 void bc_num_free(void* num) {
 
   BcNum* n;
@@ -433,3 +424,12 @@
     }
   }
 }
+
+void bc_constant_free(void* constant) {
+
+  char* c;
+
+  c = *((char**) constant);
+
+  free(c);
+}
diff --git a/src/bc/parse.c b/src/bc/parse.c
index 4c14daa..efa9c73 100644
--- a/src/bc/parse.c
+++ b/src/bc/parse.c
@@ -1219,13 +1219,10 @@
       case BC_LEX_NUMBER:
       {
         size_t idx;
-        fxdpnt* num;
 
         idx = parse->program->constants.len;
 
-        num = arb_str2fxdpnt(parse->token.string);
-
-        status = bc_vec_push(&parse->program->constants, &num);
+        status = bc_vec_push(&parse->program->constants, &parse->token.string);
 
         if (status) {
           return status;
diff --git a/src/bc/program.c b/src/bc/program.c
index 2525c27..504aba2 100644
--- a/src/bc/program.c
+++ b/src/bc/program.c
@@ -275,24 +275,12 @@
     goto string_err;
   }
 
-  s = bc_vec_init(&p->constants, sizeof(fxdpnt*), bc_arb_free);
+  s = bc_vec_init(&p->constants, sizeof(char*), bc_constant_free);
 
   if (s) {
     goto const_err;
   }
 
-  s = bc_vec_push(&p->constants, &p->zero);
-
-  if (s) {
-    goto expr_err;
-  }
-
-  s = bc_vec_push(&p->constants, &p->one);
-
-  if (s) {
-    goto expr_err;
-  }
-
   s = bc_vec_init(&p->expr_stack, sizeof(BcNum), bc_num_free);
 
   if (s) {
@@ -343,8 +331,6 @@
 expr_err:
 
   bc_vec_free(&p->constants);
-  p->zero = NULL;
-  p->one = NULL;
 
 const_err:
 
@@ -606,10 +592,17 @@
       {
         size_t idx;
         BcNum num;
+        char* str;
 
         idx = bc_program_index(code, &ip->idx);
 
-        num.num = *((fxdpnt**) bc_vec_item(&p->constants, idx));
+        str = *((char**) bc_vec_item(&p->constants, idx));
+
+        if (!str) {
+          return BC_STATUS_VM_INVALID_EXPR;
+        }
+
+        num.num = arb_str2fxdpnt(str);
 
         if (!num.num) {
           return BC_STATUS_VM_INVALID_EXPR;