Fix scan-build warnings
diff --git a/include/bc.h b/include/bc.h
index 36ccf61..959a275 100644
--- a/include/bc.h
+++ b/include/bc.h
@@ -107,6 +107,7 @@
   BC_STATUS_EXEC_INVALID_TEMP,
   BC_STATUS_EXEC_INVALID_READ_EXPR,
   BC_STATUS_EXEC_PRINT_ERR,
+  BC_STATUS_EXEC_INVALID_CONSTANT,
   BC_STATUS_EXEC_HALT,
 
   BC_STATUS_POSIX_NAME_LEN,
diff --git a/include/data.h b/include/data.h
index 5c71d2a..96c9a77 100644
--- a/include/data.h
+++ b/include/data.h
@@ -218,7 +218,7 @@
 BcStatus bc_array_init(BcArray* array);
 void bc_array_free(void* array);
 
-BcStatus bc_local_initVar(BcLocal* local, const char* name, const char* num);
+BcStatus bc_local_initVar(BcLocal* local, const char* name, const char* num, size_t base, size_t scale);
 BcStatus bc_local_initArray(BcLocal* local, const char* name, uint32_t nelems);
 void bc_local_free(void* local);
 
diff --git a/src/bc/bc.c b/src/bc/bc.c
index ca5b692..caa7f4f 100644
--- a/src/bc/bc.c
+++ b/src/bc/bc.c
@@ -93,6 +93,7 @@
   "Runtime",
   "Runtime",
   "Runtime",
+  "Runtime",
 
   "POSIX",
   "POSIX",
@@ -175,6 +176,7 @@
   "invalid temp variable; this is most likely a bug in bc",
   "invalid read() expression",
   "print error",
+  "invalid constant",
   "bc was not halted correctly; this is a bug in bc",
 
   "POSIX only allows one character names; the following is invalid:",
diff --git a/src/bc/data.c b/src/bc/data.c
index 96d168b..53168af 100644
--- a/src/bc/data.c
+++ b/src/bc/data.c
@@ -99,6 +99,7 @@
       return BC_STATUS_MALLOC_FAIL;
     }
 
+    func->params = params;
     func->param_cap = new_cap;
   }
 
@@ -128,6 +129,7 @@
       return BC_STATUS_MALLOC_FAIL;
     }
 
+    func->autos = autos;
     func->auto_cap = new_cap;
   }
 
@@ -226,15 +228,19 @@
   bc_vec_free(a);
 }
 
-BcStatus bc_local_initVar(BcLocal* local, const char* name, const char* num) {
+BcStatus bc_local_initVar(BcLocal* local, const char* name,
+                          const char* num, size_t base, size_t scale)
+{
+  BcStatus status;
+
+  status = bc_num_init(&local->num, strlen(num));
+
+  if (status) return status;
 
   local->name = name;
   local->var = true;
 
-  // TODO: Don't malloc.
-  //arb_str2fxdpnt(num);
-
-  return BC_STATUS_SUCCESS;
+  return bc_num_parse(&local->num, num, base, scale);
 }
 
 BcStatus bc_local_initArray(BcLocal* local, const char* name, uint32_t nelems) {
diff --git a/src/bc/num.c b/src/bc/num.c
index e096942..5425716 100644
--- a/src/bc/num.c
+++ b/src/bc/num.c
@@ -715,20 +715,28 @@
 
 static BcStatus bc_num_alg_s(BcNum* a, BcNum* b, BcNum* c, size_t scale) {
 
-  scale = BC_MAX(a->rdx, b->rdx);
+  (void) scale;
 
+  c->rdx = BC_MAX(a->rdx, b->rdx);
+
+  return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_alg_m(BcNum* a, BcNum* b, BcNum* c, size_t scale) {
 
   scale = BC_MAX(scale, a->rdx);
   scale = BC_MAX(scale, b->rdx);
-  scale = BC_MIN(a->rdx + b->rdx, scale);
+  c->rdx = BC_MIN(a->rdx + b->rdx, scale);
 
+  return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_alg_d(BcNum* a, BcNum* b, BcNum* c, size_t scale) {
-
+  (void) a;
+  (void) b;
+  (void) c;
+  (void) scale;
+  return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_alg_mod(BcNum* a, BcNum* b, BcNum* c, size_t scale) {
@@ -739,7 +747,7 @@
 
   // TODO: Compute a / b.
 
-  scale = BC_MAX(scale + b->rdx, a->rdx);
+  c->rdx = BC_MAX(scale + b->rdx, a->rdx);
 
   // TODO: Compute a - (a / b) * b.
 
@@ -747,15 +755,25 @@
 }
 
 static BcStatus bc_num_alg_rem(BcNum* a, BcNum* b, BcNum* c) {
-
+  (void) a;
+  (void) b;
+  (void) c;
+  return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_alg_p(BcNum* a, BcNum* b, BcNum* c, size_t scale) {
-
+  (void) a;
+  (void) b;
+  (void) c;
+  (void) scale;
+  return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_sqrt_newton(BcNum* a, BcNum* b, size_t scale) {
-
+  (void) a;
+  (void) b;
+  (void) scale;
+  return BC_STATUS_SUCCESS;
 }
 
 static bool bc_num_strValid(const char* val, size_t base) {
@@ -912,78 +930,20 @@
 static BcStatus bc_num_parseLowBase(BcNum* n, const char* val,
                                      size_t base, size_t scale)
 {
-  const char* ptr;
-  char* nptr;
-  size_t len;
-  size_t radix;
-  size_t digits;
-  char c;
-  char carry;
-  size_t pow;
-
-  len = strlen(val);
-
-  ptr = strchr(val, '.');
-
-  if (ptr) {
-    --ptr;
-  }
-  else {
-    ptr = val + len - 1;
-  }
-
-  radix = ptr - val;
-
-  nptr = n->num + radix;
-  ++radix;
-
-  c = 0;
-  carry = 0;
-  digits = 0;
-  pow = 1;
-
-  while (ptr >= val) {
-
-    c += BC_NUM_FROM_CHAR(*ptr) * pow;
-    --ptr;
-    pow *= base;
-
-    if (pow > 10) {
-
-      --nptr;
-
-      while (c >= 10) {
-        *nptr += 1;
-        c -= 10;
-      }
-
-      *(nptr + 1) += c;
-      ++digits;
-
-      carry = 1;
-      c = 0;
-      pow = 1;
-    }
-  }
-
-  if (c) {
-    *nptr += c;
-    --nptr;
-    ++digits;
-  }
-
-  if (nptr >= n->num) {
-    memmove(n->num, nptr + 1, digits * sizeof(char));
-  }
-
-  // TODO: After radix.
-
+  (void) n;
+  (void) val;
+  (void) base;
+  (void) scale;
   return BC_STATUS_SUCCESS;
 }
 static BcStatus bc_num_parseHighBase(BcNum* n, const char* val,
                                       size_t base, size_t scale)
 {
-
+  (void) n;
+  (void) val;
+  (void) base;
+  (void) scale;
+  return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_printDecimal(BcNum* n, FILE* f) {
@@ -1050,7 +1010,6 @@
 
   size_t size;
   char* buf;
-  size_t i;
 
   size = BC_MAX(n->rdx, n->len - n->rdx) * ((10 * 2) / base);
 
@@ -1058,8 +1017,6 @@
 
   if (!buf) return BC_STATUS_MALLOC_FAIL;
 
-  i = 0;
-
   fputc('\n', f);
 
   free(buf);
@@ -1068,11 +1025,17 @@
 }
 
 static BcStatus bc_num_printHighBase(BcNum* n, size_t base, FILE* f) {
-
+  (void) n;
+  (void) base;
+  (void) f;
+  return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_printHighestBase(BcNum* n, size_t base, FILE* f) {
-
+  (void) n;
+  (void) base;
+  (void) f;
+  return BC_STATUS_SUCCESS;
 }
 
 static BcStatus bc_num_trunc(BcNum* n, size_t places) {
diff --git a/src/bc/parse.c b/src/bc/parse.c
index 8cd4e86..2373de4 100644
--- a/src/bc/parse.c
+++ b/src/bc/parse.c
@@ -324,8 +324,6 @@
     return BC_STATUS_INVALID_PARAM;
   }
 
-  status = BC_STATUS_SUCCESS;
-
   switch (parse->token.type) {
 
     case BC_LEX_NEWLINE:
@@ -627,8 +625,11 @@
     }
 
     if (parse->token.type == BC_LEX_COMMA) {
+
       comma = true;
       status = bc_lex_next(&parse->lex, &parse->token);
+
+      if (status) return status;
     }
     else {
       comma = false;
@@ -759,8 +760,6 @@
   BcStatus status;
   uint8_t* flag_ptr;
 
-  status = BC_STATUS_SUCCESS;
-
   switch (parse->token.type) {
 
     case BC_LEX_OP_INC:
@@ -780,6 +779,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -816,6 +816,7 @@
 
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -848,6 +849,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -861,6 +863,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -874,6 +877,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       status = bc_parse_auto(parse);
@@ -886,6 +890,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -899,6 +904,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -912,6 +918,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -937,6 +944,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -950,6 +958,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       status = bc_lex_next(&parse->lex, &parse->token);
@@ -973,6 +982,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -986,6 +996,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -1002,6 +1013,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -1021,6 +1033,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -1034,6 +1047,7 @@
     {
       if (BC_PARSE_IF_END(parse)) {
         status = bc_parse_noElse(parse, code);
+        if (status) return status;
       }
 
       parse->auto_part = false;
@@ -1608,7 +1622,6 @@
     return bc_vec_pushByte(code, 0);
   }
 
-  comma = false;
   nparams = 0;
 
   do {
diff --git a/src/bc/program.c b/src/bc/program.c
index acd3c00..8820f6e 100644
--- a/src/bc/program.c
+++ b/src/bc/program.c
@@ -58,8 +58,9 @@
 
 };
 
+static BcStatus bc_program_execCode(BcProgram* p, BcFunc* func, BcInstPtr* ip);
 static BcStatus bc_program_op(BcProgram* p, uint8_t inst);
-static BcNum* bc_program_num(BcProgram *p, BcResult* result);
+static BcStatus bc_program_num(BcProgram* p, BcResult* result, BcNum** num);
 static BcStatus bc_program_printString(const char* str);
 #if 0
 static BcStatus bc_program_assign(BcProgram* p, BcExpr* expr,
@@ -491,14 +492,8 @@
 
 BcStatus bc_program_exec(BcProgram* p) {
 
-  BcStatus status;
-  int pchars;
   BcFunc* func;
-  uint8_t* code;
   BcInstPtr* ip;
-  size_t idx;
-
-  status = BC_STATUS_SUCCESS;
 
   ip = bc_vec_top(&p->stack);
 
@@ -506,154 +501,7 @@
 
   assert(func);
 
-  code = func->code.array;
-
-  for (; ip->idx < func->code.len; ++ip->idx) {
-
-    uint8_t inst;
-
-    inst = code[ip->idx];
-
-    // TODO: Add all instructions.
-    switch (inst) {
-
-      case BC_INST_READ:
-      {
-        status = bc_program_read(p);
-        break;
-      }
-
-      case BC_INST_PRINT:
-      {
-        BcResult* num;
-
-        num = bc_vec_top(&p->expr_stack);
-
-        bc_num_print(&num->num, p->obase);
-
-        bc_vec_pop(&p->expr_stack);
-
-        break;
-      }
-
-      case BC_INST_STR:
-      {
-        const char* string;
-
-        idx = bc_program_index(code, &ip->idx);
-
-        if (idx >= p->strings.len) {
-          return BC_STATUS_EXEC_INVALID_STRING;
-        }
-
-        string = bc_vec_item(&p->strings, idx);
-
-        pchars = fprintf(stdout, "%s", string);
-        status = pchars > 0 ? BC_STATUS_SUCCESS :
-                              BC_STATUS_EXEC_PRINT_ERR;
-
-        break;
-      }
-
-      case BC_INST_PRINT_STR:
-      {
-        const char* string;
-
-        idx = bc_program_index(code, &ip->idx);
-
-        if (idx >= p->strings.len) {
-          return BC_STATUS_EXEC_INVALID_STRING;
-        }
-
-        string = bc_vec_item(&p->strings, idx);
-
-        status = bc_program_printString(string);
-
-        break;
-      }
-
-      case BC_INST_HALT:
-      {
-        status = BC_STATUS_EXEC_HALT;
-        break;
-      }
-
-      case BC_INST_PUSH_NUM:
-      {
-        size_t idx;
-        BcResult result;
-        char* str;
-
-        idx = bc_program_index(code, &ip->idx);
-
-        str = *((char**) bc_vec_item(&p->constants, idx));
-
-        if (!str) return BC_STATUS_EXEC_INVALID_EXPR;
-
-        status = bc_num_init(&result.num, strlen(str));
-
-        if (status) return status;
-
-        status = bc_num_parse(&result.num, str, p->ibase, p->scale);
-
-        if (status) return status;
-
-        result.type = BC_RESULT_CONSTANT;
-
-        status = bc_vec_push(&p->expr_stack, &result);
-
-        break;
-      }
-
-      case BC_INST_OP_MODULUS:
-      case BC_INST_OP_MULTIPLY:
-      case BC_INST_OP_PLUS:
-      case BC_INST_OP_MINUS:
-      case BC_INST_OP_DIVIDE:
-      case BC_INST_OP_POWER:
-      {
-        status = bc_program_op(p, inst);
-        break;
-      }
-
-      case BC_INST_OP_NEGATE:
-      {
-        BcResult* ptr;
-        BcResult result;
-
-        ptr = bc_vec_top(&p->expr_stack);
-
-        if (!ptr) return BC_STATUS_EXEC_INVALID_EXPR;
-
-        result.type = BC_RESULT_INTERMEDIATE;
-
-        status = bc_num_init(&result.num, BC_NUM_DEF_SIZE);
-
-        if (status) return status;
-
-        status = bc_num_copy(&result.num, &ptr->num);
-
-        if (status) return status;
-
-        result.num.neg = !result.num.neg;
-
-        status = bc_vec_pop(&p->expr_stack);
-
-        if (status) return status;
-
-        status = bc_vec_push(&p->expr_stack, &result);
-
-        break;
-      }
-
-      default:
-      {
-        return BC_STATUS_EXEC_INVALID_STMT;
-      }
-    }
-  }
-
-  return status;
+  return bc_program_execCode(p, func, ip);
 }
 
 void bc_program_printCode(BcProgram* p) {
@@ -751,12 +599,211 @@
   memset(p, 0, sizeof(BcProgram));
 }
 
+static BcStatus bc_program_execCode(BcProgram* p, BcFunc* func, BcInstPtr* ip) {
+
+  BcStatus status;
+  uint8_t* code;
+  size_t idx;
+  int pchars;
+
+  status = BC_STATUS_SUCCESS;
+
+  code = func->code.array;
+
+  for (; ip->idx < func->code.len; ++ip->idx) {
+
+    uint8_t inst;
+
+    inst = code[ip->idx];
+
+    // TODO: Add all instructions.
+    switch (inst) {
+
+      case BC_INST_READ:
+      {
+        status = bc_program_read(p);
+        break;
+      }
+
+      case BC_INST_PRINT:
+      {
+        BcResult* num;
+
+        num = bc_vec_top(&p->expr_stack);
+
+        bc_num_print(&num->num, p->obase);
+
+        bc_vec_pop(&p->expr_stack);
+
+        break;
+      }
+
+      case BC_INST_STR:
+      {
+        const char* string;
+
+        idx = bc_program_index(code, &ip->idx);
+
+        if (idx >= p->strings.len) {
+          return BC_STATUS_EXEC_INVALID_STRING;
+        }
+
+        string = bc_vec_item(&p->strings, idx);
+
+        pchars = fprintf(stdout, "%s", string);
+        status = pchars > 0 ? BC_STATUS_SUCCESS :
+                              BC_STATUS_EXEC_PRINT_ERR;
+
+        break;
+      }
+
+      case BC_INST_PRINT_STR:
+      {
+        const char* string;
+
+        idx = bc_program_index(code, &ip->idx);
+
+        if (idx >= p->strings.len) {
+          return BC_STATUS_EXEC_INVALID_STRING;
+        }
+
+        string = bc_vec_item(&p->strings, idx);
+
+        status = bc_program_printString(string);
+
+        break;
+      }
+
+      case BC_INST_HALT:
+      {
+        status = BC_STATUS_EXEC_HALT;
+        break;
+      }
+
+      case BC_INST_PUSH_NUM:
+      {
+        BcResult result;
+
+        result.type = BC_RESULT_CONSTANT;
+        result.idx = bc_program_index(code, &ip->idx);
+
+        status = bc_vec_push(&p->expr_stack, &result);
+
+        break;
+      }
+
+      case BC_INST_OP_MODULUS:
+      case BC_INST_OP_MULTIPLY:
+      case BC_INST_OP_PLUS:
+      case BC_INST_OP_MINUS:
+      case BC_INST_OP_DIVIDE:
+      case BC_INST_OP_POWER:
+      {
+        status = bc_program_op(p, inst);
+        break;
+      }
+
+      case BC_INST_OP_NEGATE:
+      {
+        BcResult* ptr;
+        BcResult result;
+
+        ptr = bc_vec_top(&p->expr_stack);
+
+        if (!ptr) return BC_STATUS_EXEC_INVALID_EXPR;
+
+        result.type = BC_RESULT_INTERMEDIATE;
+
+        status = bc_num_init(&result.num, BC_NUM_DEF_SIZE);
+
+        if (status) return status;
+
+        status = bc_num_copy(&result.num, &ptr->num);
+
+        if (status) return status;
+
+        result.num.neg = !result.num.neg;
+
+        status = bc_vec_pop(&p->expr_stack);
+
+        if (status) return status;
+
+        status = bc_vec_push(&p->expr_stack, &result);
+
+        break;
+      }
+
+      default:
+      {
+        return BC_STATUS_EXEC_INVALID_STMT;
+      }
+    }
+  }
+
+  return status;
+}
+
+static BcStatus bc_program_op(BcProgram* p, uint8_t inst) {
+
+  BcStatus status;
+  BcResult* result1;
+  BcResult* result2;
+  BcResult result;
+  BcNum* num1;
+  BcNum* num2;
+
+  result2 = bc_vec_item_rev(&p->expr_stack, 0);
+
+  if (!result2) return BC_STATUS_EXEC_INVALID_EXPR;
+
+  result1 = bc_vec_item_rev(&p->expr_stack, 1);
+
+  if (!result1) return BC_STATUS_EXEC_INVALID_EXPR;
+
+  result.type = BC_RESULT_INTERMEDIATE;
+
+  status = bc_num_init(&result.num, BC_NUM_DEF_SIZE);
+
+  if (status) return status;
+
+  status  = bc_program_num(p, result1, &num1);
+
+  if (status) return status;
+
+  status = bc_program_num(p, result2, &num2);
+
+  if (status) return status;
+
+  if (inst != BC_INST_OP_POWER) {
+
+    BcMathOpFunc op;
+
+    op = bc_math_ops[inst - BC_INST_OP_MODULUS];
+
+    status = op(&result1->num, &result2->num, &result.num, p->scale);
+  }
+  else {
+    status = bc_num_pow(&result1->num, &result2->num, &result.num, p->scale);
+  }
+
+  if (status) return status;
+
+  status = bc_vec_pop(&p->expr_stack);
+
+  if (status) return status;
+
+  status = bc_vec_pop(&p->expr_stack);
+
+  if (status) return status;
+
+  return bc_vec_push(&p->expr_stack, &result);
+}
+
 static BcStatus bc_program_read(BcProgram* p) {
 
   BcStatus status;
   BcParse parse;
   char* buffer;
-  BcVec exprs;
   BcTemp temp;
   size_t size;
   BcVec code;
@@ -881,67 +928,40 @@
   putchar(byte);
 }
 
-static BcStatus bc_program_op(BcProgram* p, uint8_t inst) {
+static BcStatus bc_program_num(BcProgram* p, BcResult* result, BcNum** num) {
 
   BcStatus status;
-  BcResult* result1;
-  BcResult* result2;
-  BcResult result;
-  BcNum* num1;
-  BcNum* num2;
 
-  result2 = bc_vec_item_rev(&p->expr_stack, 0);
-
-  if (!result2) return BC_STATUS_EXEC_INVALID_EXPR;
-
-  result1 = bc_vec_item_rev(&p->expr_stack, 1);
-
-  if (!result1) return BC_STATUS_EXEC_INVALID_EXPR;
-
-  result.type = BC_RESULT_INTERMEDIATE;
-
-  status = bc_num_init(&result.num, BC_NUM_DEF_SIZE);
-
-  if (status) return status;
-
-  num1 = bc_program_num(p, result1);
-  num2 = bc_program_num(p, result2);
-
-  if (!num1 || !num2) return BC_STATUS_EXEC_INVALID_EXPR;
-
-  if (inst != BC_INST_OP_POWER) {
-
-    BcMathOpFunc op;
-
-    op = bc_math_ops[inst - BC_INST_OP_MODULUS];
-
-    status = op(&result1->num, &result2->num, &result.num, p->scale);
-  }
-  else {
-    status = bc_num_pow(&result1->num, &result2->num, &result.num, p->scale);
-  }
-
-  if (status) return status;
-
-  status = bc_vec_pop(&p->expr_stack);
-
-  if (status) return status;
-
-  status = bc_vec_pop(&p->expr_stack);
-
-  if (status) return status;
-
-  return bc_vec_push(&p->expr_stack, &result);
-}
-
-static BcNum* bc_program_num(BcProgram* p, BcResult* result) {
+  status = BC_STATUS_SUCCESS;
 
   switch (result->type) {
 
     case BC_RESULT_INTERMEDIATE:
+    {
+      *num = &result->num;
+      break;
+    }
+
     case BC_RESULT_CONSTANT:
     {
-      return &result->num;
+      char** s;
+      size_t idx;
+
+      idx = result->idx;
+
+      s = bc_vec_item(&p->constants, idx);
+
+      if (!s) return BC_STATUS_EXEC_INVALID_CONSTANT;
+
+      status = bc_num_init(&result->num, strlen(*s));
+
+      if (status) return status;
+
+      *num = &result->num;
+
+      status = bc_num_parse(&result->num, *s, p->ibase, p->scale);
+
+      break;
     }
 
     case BC_RESULT_VAR:
@@ -976,11 +996,12 @@
 
     default:
     {
-      return NULL;
+      status = BC_STATUS_EXEC_INVALID_EXPR;
+      break;
     }
   }
 
-  return NULL;
+  return status;
 }
 
 static BcStatus bc_program_printString(const char* str) {