Method: RCSimCinterface.rcsim_add_refConcat_refs

Defined in:
ext/hruby_sim/hruby_rcsim_build.c

.rcsim_add_refConcat_refs(refConcatV, refVs) ⇒ Object

Adds references to a C ref concat.



1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
# File 'ext/hruby_sim/hruby_rcsim_build.c', line 1514

VALUE rcsim_add_refConcat_refs(VALUE mod, VALUE refConcatV, VALUE refVs) {
    /* Get the C refConcat from the Ruby value. */
    RefConcat refConcat;
    value_to_rcsim(RefConcatS,refConcatV,refConcat);
    // printf("rcsim_add_refConcat_refs with refConcat=%p\n",refConcat);
    /* Prepare the size for the references. */
    long num = RARRAY_LEN(refVs);
    long old_num = refConcat->num_refs;
    refConcat->num_refs += num;
    // printf("first refConcat->refs=%p\n",refConcat->refs); fflush(stdout);
    refConcat->refs = realloc(refConcat->refs,
            sizeof(Reference[refConcat->num_refs]));
    // refConcat->refs = (Reference*)my_realloc(refConcat->refs,
    //         sizeof(Reference[old_num]), sizeof(Reference[refConcat->num_refs]));
    // printf("now refConcat->refs=%p\n",refConcat->refs); fflush(stdout);
    // printf("access test: %p\n",refConcat->refs[0]); fflush(stdout);
    /* Get and add the references from the Ruby value. */
    for(long i=0; i< num; ++i) {
        Reference ref;
        // show_access(refConcat->refs,old_num+i);
        value_to_rcsim(ReferenceS,rb_ary_entry(refVs,i),ref);
        refConcat->refs[old_num + i] = ref;
        // printf("ref=%p ref &type=%p type=%p width=%llu\n",ref,&(ref->type),ref->type,type_width(ref->type));
    }
    return refConcatV;
}