コード例 #1
0
ファイル: vector.c プロジェクト: racket/racket
static Scheme_Object *unsafe_struct_ref (int argc, Scheme_Object *argv[])
{
    if (SCHEME_CHAPERONEP(argv[0]))
        return scheme_struct_ref(argv[0], SCHEME_INT_VAL(argv[1]));
    else
        return ((Scheme_Structure *)argv[0])->slots[SCHEME_INT_VAL(argv[1])];
}
コード例 #2
0
ファイル: bool.c プロジェクト: magicgoose/racket
int struct_equal (Scheme_Object *s1, Scheme_Object *orig_s1, 
                  Scheme_Object *s2, Scheme_Object *orig_s2, 
                  Equal_Info *eql)
{
  Scheme_Object *v1, *v2;
  int i;

  for (i = SCHEME_STRUCT_NUM_SLOTS(((Scheme_Structure *)s1)); i--; ) {
    if (SAME_OBJ(s1, orig_s1))
      v1 = ((Scheme_Structure *)s1)->slots[i];
    else
      v1 = scheme_struct_ref(orig_s1, i);
    if (SAME_OBJ(s2, orig_s2))
      v2 = ((Scheme_Structure *)s2)->slots[i];
    else
      v2 = scheme_struct_ref(orig_s2, i);

    if (!is_equal(v1, v2, eql))
      return 0;
  }

  return 1;
}