コード例 #1
0
ファイル: var.c プロジェクト: bihai/SmallBASIC
/*
 * adds a string to current string value
 */
void v_strcat(var_t *var, const char *string) {
  if (var->type == V_INT || var->type == V_NUM) {
    v_tostr(var);
  }
  if (var->type == V_STR) {
    var->v.p.size = strlen(var->v.p.ptr) + strlen(string) + 1;
    var->v.p.ptr = realloc(var->v.p.ptr, var->v.p.size);
    strcat(var->v.p.ptr, string);
  } else {
    err_typemismatch();
  }
}
コード例 #2
0
ファイル: mod_utils.c プロジェクト: MarcusWellby/SmallBASIC
int mod_parstr_ptr(int n, slib_par_t *params, int param_count, char **ptr) {
  var_t *param;

  if (n < 0 || n >= param_count) {
    return 0;
  }
  param = params[n].var_p;

  if (param->type != V_STR) {
    v_tostr(param);
  }
  *ptr = param->v.p.ptr;

  return 1;
}
コード例 #3
0
var_p_t hashmap_putv(var_p_t map, const var_p_t key) {
  // hashmap takes ownership of key
  if (key->type != V_STR) {
    // keys are always strings
    v_tostr(key);
  }

  Node *node = hashmap_search(map, key->v.p.ptr, key->v.p.length);
  if (node->key == NULL) {
    node->key = key;
    node->value = v_new();
    map->v.m.count++;
  } else {
    // discard unused key
    v_free(key);
    v_detach(key);
  }
  return node->value;
}
コード例 #4
0
ファイル: mod_utils.c プロジェクト: MarcusWellby/SmallBASIC
int mod_opt_parstr_ptr(int n, slib_par_t *params, int param_count, char **ptr,
                       const char *def_val) {
  var_t *param;

  if (n < 0) {
    return 0;
  }

  if (n < param_count) {
    param = params[n].var_p;

    if (param->type != V_STR) {
      v_tostr(param);
    }
    *ptr = param->v.p.ptr;
  }
  else {
    *ptr = def_val;
  }

  return 1;
}
コード例 #5
0
ファイル: var.c プロジェクト: bihai/SmallBASIC
/*
 * return the string value of 'var'
 */
char *v_getstr(var_t *var) {
  if (var->type != V_STR) {
    v_tostr(var);
  }
  return var->v.p.ptr;
}