Example #1
0
/****************************************************************
  obj の ivname というインスタンス変数に *cval を代入する
  ivname が NULL の場合は、obj を配列とみなし、push する
  cval から ruby VALUE への変換ヒントは fmt で与える。
****************************************************************/
int cp_set1(VALUE obj, char *fmt, char *ivname, void *cval)
{
  char at_name[100];
  int len, c;
  VALUE val;

  switch (*fmt){
  case 'b':
    dprintf(("converting %d into BOOL\n", *(int*)cval));
    val = (*(int*)cval ? TRUE : FALSE);
    len = sizeof(int);
    break;
  case 'c':
    dprintf(("converting %d into uchar\n", *(unsigned char*)cval));
    val = INT2FIX(*(unsigned char *)cval);
    len = sizeof(unsigned char);
    break;
  case 'i':
    dprintf(("converting %d into FIXNUM\n", *(int*)cval));
    val = INT2FIX(*(int*)cval);
    len = sizeof(int);
    break;
  case 't':
    dprintf(("converting %d into Time\n", ((struct tm*)cval)->tm_year));
    val = TM2TIME((struct tm*)cval);
    len = sizeof(struct tm);
    break;
  case 's':
    dprintf(("converting into String\n"));
    if ((c = atoi(fmt + 1)) > 0){
      val = str_new2((char*)cval != NULL ? (char*)cval : "");
      len = sizeof(char) * c;
    } else {
      val = str_new2(*(char**)cval != NULL ? *(char**)cval : "");
      len = sizeof(char*);
    }
    break;
  case 'v':
    dprintf(("converting %d into VALUE\n", (VALUE*)cval));
    val = *(VALUE*)cval;
    len = sizeof(VALUE);
    break;
  default:
    TypeError(ivname != NULL ? ivname : "???");
  }

  if (ivname == NULL) {
    Check_Type(obj, T_ARRAY);
    ary_push(obj, val);
  } else {
    iv_conv_name(ivname, at_name);
    rb_iv_set(obj, at_name, val);
  }

  return len;
}
Example #2
0
File: init.c Project: mtmiron/toi
void
toi_set_argv(int argc, char **argv)
{
	int i;
	VALUE ary = ary_new();

	for (i = 0; i < argc; i++)
		ary_push(ary, string_new(argv[i]));
	
	define_global_variable(intern("ARGV"), ary);
}
Example #3
0
VALUE ary_copy(VALUE dst, VALUE src)
{
  int i;

  Check_Type(src, T_ARRAY);
  Check_Type(dst, T_ARRAY);

  for (i = 0; i < RARRAY(src)->len; i++){
    ary_push(dst, RARRAY(src)->ptr[i]);
  }
  return dst;
}