HDLRuby 2.11.0 → 2.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,20 @@
11
11
 
12
12
  #include "hruby_sim.h"
13
13
 
14
+ // #if defined(_WIN32) || defined(_WIN64)
15
+ // #define show_access(POINTER,IDX) \
16
+ // printf("In %s accessing range [%p,%p](%i) at=%p with size=%i\n",__func__,(POINTER),(unsigned long long)(POINTER)+_msize((POINTER)),_msize((POINTER)),&((POINTER)[(IDX)]),sizeof((POINTER[(IDX)]))); fflush(stdout)
17
+ // #elif defined(__APPLE__)
18
+ // #define show_access(POINTER,IDX) \
19
+ // printf("In %s accessing range [%p,%p](%i) at=%p with size=%i\n",__func__,(POINTER),(unsigned long long)(POINTER)+malloc_size((POINTER)),malloc_size((POINTER)),&((POINTER)[(IDX)]),sizeof((POINTER[(IDX)]))); fflush(stdout)
20
+ // #else
21
+ // #define show_access(POINTER,IDX) \
22
+ // printf("In %s accessing range [%p,%p](%i) at=%p with size=%i\n",__func__,(POINTER),(unsigned long long)(POINTER)+malloc_usable_size((POINTER)),malloc_usable_size((POINTER)),&((POINTER)[(IDX)]),sizeof((POINTER[(IDX)]))); fflush(stdout)
23
+ // #endif
24
+
25
+ // #define show_access(POINTER,IDX)
26
+
27
+
14
28
  /**
15
29
  * The C-Ruby hybrid HDLRuby simulation builder.
16
30
  **/
@@ -62,13 +76,23 @@ static VALUE RCSimPointer;
62
76
 
63
77
  #define rcsim_to_value(TYPE,POINTER,VALUE) \
64
78
  (VALUE) = Data_Wrap_Struct(RCSimPointer, 0, 0, (POINTER))
65
- // (VALUE) = Data_Wrap_Struct(RCSimPointer, 0, free, (POINTER))
66
79
  // (VALUE) = ULL2NUM((unsigned long long)(POINTER))
80
+ // (VALUE) = Data_Wrap_Struct(RCSimPointer, 0, free, (POINTER))
67
81
 
68
82
  #define value_to_rcsim(TYPE,VALUE,POINTER) \
69
83
  Data_Get_Struct((VALUE),TYPE,(POINTER))
70
84
  // (POINTER) = (TYPE*)NUM2ULL((VALUE))
71
85
 
86
+
87
+ /* My own realloc. */
88
+ static void* my_realloc(void* pointer, size_t old_size, size_t new_size) {
89
+ if(old_size >= new_size) { return pointer; }
90
+ void* new_pointer = malloc(new_size);
91
+ memcpy(new_pointer,pointer,old_size);
92
+ free(pointer);
93
+ return new_pointer;
94
+ }
95
+
72
96
  /*#### Generates the list of ID coressponding to the HDLRuby symbols. ####*/
73
97
 
74
98
  static ID id_ANYEDGE;
@@ -168,12 +192,15 @@ VALUE rcsim_get_type_vector(VALUE mod, VALUE baseV, VALUE numV) {
168
192
 
169
193
  /* Creating a systemT C object. */
170
194
  VALUE rcsim_make_systemT(VALUE mod, VALUE name) {
195
+ // printf("rcsim_make_systemT\n");
171
196
  /* Allocates the systemT. */
172
197
  SystemT systemT = (SystemT)malloc(sizeof(SystemTS));
198
+ // printf("systemT=%p\n",systemT);
173
199
  /* Set it up. */
174
200
  systemT->kind = SYSTEMT;
175
201
  systemT->owner = NULL;
176
202
  systemT->name = strdup(StringValueCStr(name));
203
+ // printf("systemT->name=%p\n",systemT->name);
177
204
  systemT->num_inputs = 0;
178
205
  systemT->inputs = NULL;
179
206
  systemT->num_outputs = 0;
@@ -191,12 +218,15 @@ VALUE rcsim_make_systemT(VALUE mod, VALUE name) {
191
218
 
192
219
  /* Creating a scope C object. */
193
220
  VALUE rcsim_make_scope(VALUE mod, VALUE name) {
221
+ // printf("rcsim_make_scope\n");
194
222
  /* Allocates the scope. */
195
223
  Scope scope = (Scope)malloc(sizeof(ScopeS));
224
+ // printf("scope=%p\n",scope);
196
225
  /* Set it up. */
197
226
  scope->kind = SCOPE;
198
227
  scope->owner = NULL;
199
228
  scope->name = strdup(StringValueCStr(name));
229
+ // printf("scope->name=%p\n",scope->name);
200
230
  scope->num_systemIs = 0;
201
231
  scope->systemIs = NULL;
202
232
  scope->num_inners = 0;
@@ -216,14 +246,16 @@ VALUE rcsim_make_scope(VALUE mod, VALUE name) {
216
246
 
217
247
  /* Creating a behavior C object. */
218
248
  VALUE rcsim_make_behavior(VALUE mod, VALUE timed) {
249
+ // printf("rcsim_make_behavior\n");
219
250
  /* Allocates the behavior. */
220
251
  Behavior behavior = (Behavior)malloc(sizeof(BehaviorS));
221
- // printf("new behavior=%p\n",behavior);
252
+ // printf("behavior=%p\n",behavior);
222
253
  /* Set it up. */
223
254
  behavior->kind = BEHAVIOR;
224
255
  behavior->owner = NULL;
225
256
  behavior->num_events = 0;
226
257
  behavior->events = NULL;
258
+ behavior->block = NULL;
227
259
  behavior->enabled = 0;
228
260
  behavior->activated = 0;
229
261
  if (TYPE(timed) == T_TRUE) {
@@ -235,6 +267,7 @@ VALUE rcsim_make_behavior(VALUE mod, VALUE timed) {
235
267
  behavior->timed = 0;
236
268
  }
237
269
  behavior->active_time = 0;
270
+ behavior->thread = NULL;
238
271
  /* Returns the C behavior embedded into a ruby VALUE. */
239
272
  VALUE res;
240
273
  rcsim_to_value(BehaviorS,behavior,res);
@@ -244,8 +277,10 @@ VALUE rcsim_make_behavior(VALUE mod, VALUE timed) {
244
277
 
245
278
  /* Creating an event C object. */
246
279
  VALUE rcsim_make_event(VALUE mod, VALUE typeV, VALUE sigV) {
280
+ // printf("rcsim_make_event\n");
247
281
  /* Allocates the event. */
248
282
  Event event = (Event)malloc(sizeof(EventS));
283
+ // printf("event=%p\n",event);
249
284
  /* Set it up. */
250
285
  event->kind = EVENT;
251
286
  event->owner = NULL;
@@ -266,28 +301,36 @@ VALUE rcsim_make_event(VALUE mod, VALUE typeV, VALUE sigV) {
266
301
 
267
302
  /* Creating a signal C object. */
268
303
  VALUE rcsim_make_signal(VALUE mod, VALUE name, VALUE type) {
304
+ // printf("rcsim_make_signal\n");
269
305
  /* Allocates the signal. */
270
306
  SignalI signal = (SignalI)malloc(sizeof(SignalIS));
307
+ // printf("signal=%p\n",signal);
271
308
  /* Set it up. */
272
309
  signal->kind = SIGNALI;
273
310
  signal->owner = NULL;
274
311
  signal->name = strdup(StringValueCStr(name));
312
+ // printf("signal->name=%p\n",signal->name);
275
313
  // printf("Creating signal named=%s\n",signal->name);
276
314
  value_to_rcsim(TypeS,type,signal->type);
277
315
  // printf("type width=%llu\n",type_width(signal->type));
278
316
  signal->c_value = make_value(signal->type,0);
317
+ // printf("signal->c_value=%p\n",signal->c_value);
279
318
  signal->c_value->signal = signal;
280
319
  // printf("c_value=%p type=%p\n",signal->c_value,signal->c_value->type);
281
320
  // printf("c_value type width=%llu\n",type_width(signal->c_value->type));
282
321
  signal->f_value = make_value(signal->type,0);
322
+ // printf("signal->f_value=%p\n",signal->f_value);
283
323
  signal->f_value->signal = signal;
284
324
  signal->fading = 1; /* Initially the signal can be overwritten by anything.*/
285
325
  signal->num_any = 0;
286
326
  signal->any = NULL;
327
+ // signal->any = (SignalI*)calloc(32,sizeof(SignalI));
287
328
  signal->num_pos = 0;
288
329
  signal->pos = NULL;
330
+ // signal->pos = (SignalI*)calloc(32,sizeof(SignalI));
289
331
  signal->num_neg = 0;
290
332
  signal->neg = NULL;
333
+ // signal->neg = (SignalI*)calloc(32,sizeof(SignalI));
291
334
  /* Register the signal. */
292
335
  register_signal(signal);
293
336
  /* Returns the C signal embedded into a ruby VALUE. */
@@ -299,17 +342,21 @@ VALUE rcsim_make_signal(VALUE mod, VALUE name, VALUE type) {
299
342
 
300
343
  /* Creating a system instance C object. */
301
344
  VALUE rcsim_make_systemI(VALUE mod, VALUE name, VALUE systemT) {
345
+ // printf("rcsim_make_systemI\n");
302
346
  /* Allocates the system instance. */
303
347
  SystemI systemI = (SystemI)malloc(sizeof(SystemIS));
348
+ // printf("systemI=%p\n",systemI);
304
349
  /* Set it up. */
305
350
  systemI->kind = SYSTEMI;
306
351
  systemI->owner = NULL;
307
352
  systemI->name = strdup(StringValueCStr(name));
353
+ // printf("systemI->name=%p\n",systemI->name);
308
354
  // /* Name is made empty since redundant with Eigen system. */
309
355
  // systemI->name = "";
310
356
  value_to_rcsim(SystemTS,systemT,systemI->system);
311
357
  systemI->num_systems = 1;
312
- systemI->systems = (SystemT*)malloc(sizeof(SystemT));
358
+ systemI->systems = (SystemT*)malloc(sizeof(SystemT[1]));
359
+ // printf("systemI->systems=%p\n",systemI->systems); fflush(stdout);
313
360
  systemI->systems[0] = systemI->system;
314
361
  /* Configure the systemI to execute the default systemT. */
315
362
  configure(systemI,0);
@@ -322,8 +369,10 @@ VALUE rcsim_make_systemI(VALUE mod, VALUE name, VALUE systemT) {
322
369
 
323
370
  /* Creating a transmit C object. */
324
371
  VALUE rcsim_make_transmit(VALUE mod, VALUE left, VALUE right) {
372
+ // printf("rcsim_make_transmit\n");
325
373
  /* Allocates the transmit. */
326
374
  Transmit transmit = (Transmit)malloc(sizeof(TransmitS));
375
+ // printf("transmit=%p\n",transmit);
327
376
  /* Set it up. */
328
377
  transmit->kind = TRANSMIT;
329
378
  value_to_rcsim(ReferenceS,left,transmit->left);
@@ -337,8 +386,10 @@ VALUE rcsim_make_transmit(VALUE mod, VALUE left, VALUE right) {
337
386
 
338
387
  /* Creating a print C object. */
339
388
  VALUE rcsim_make_print(VALUE mod) {
389
+ // printf("rcsim_make_print\n");
340
390
  /* Allocates the print. */
341
391
  Print print = (Print)malloc(sizeof(PrintS));
392
+ // printf("print=%p\n",print);
342
393
  /* Set it up. */
343
394
  print->kind = PRINT;
344
395
  print->num_args = 0;
@@ -352,8 +403,10 @@ VALUE rcsim_make_print(VALUE mod) {
352
403
 
353
404
  /* Creating a time wait C object. */
354
405
  VALUE rcsim_make_timeWait(VALUE mod, VALUE unitV, VALUE delayV) {
406
+ // printf("rcsim_make_timeWait\n");
355
407
  /* Allocates the time wait. */
356
408
  TimeWait timeWait = (TimeWait)malloc(sizeof(TimeWaitS));
409
+ // printf("timeWait=%p\n",timeWait);
357
410
  /* Set it up. */
358
411
  timeWait->kind = TIME_WAIT;
359
412
  /* Compute the delay. */
@@ -380,8 +433,10 @@ VALUE rcsim_make_timeWait(VALUE mod, VALUE unitV, VALUE delayV) {
380
433
 
381
434
  /* Creating a time terminate C object. */
382
435
  VALUE rcsim_make_timeTerminate(VALUE mod) {
436
+ // printf("rcsim_make_timeTerminate\n");
383
437
  /* Allocates the time terminate. */
384
438
  TimeTerminate timeTerminate = (TimeTerminate)malloc(sizeof(TimeTerminateS));
439
+ // printf("timeTerminate=%p\n",timeTerminate);
385
440
  /* Set it up. */
386
441
  timeTerminate->kind = TIME_TERMINATE;
387
442
  /* Returns the C time terminate embedded into a ruby VALUE. */
@@ -393,8 +448,10 @@ VALUE rcsim_make_timeTerminate(VALUE mod) {
393
448
 
394
449
  /* Creating a hardware if C object. */
395
450
  VALUE rcsim_make_hif(VALUE mod, VALUE condition, VALUE yes, VALUE no) {
451
+ // printf("rcsim_make_hif\n");
396
452
  /* Allocates the hardware if. */
397
453
  HIf hif = (HIf)malloc(sizeof(HIfS));
454
+ // printf("hif=%p\n",hif);
398
455
  /* Set it up. */
399
456
  hif->kind = HIF;
400
457
  value_to_rcsim(ExpressionS,condition,hif->condition);
@@ -415,8 +472,10 @@ VALUE rcsim_make_hif(VALUE mod, VALUE condition, VALUE yes, VALUE no) {
415
472
 
416
473
  /* Creating a hardware case C object. */
417
474
  VALUE rcsim_make_hcase(VALUE mod, VALUE value, VALUE defolt) {
475
+ // printf("rcsim_make_hcase\n");
418
476
  /* Allocates the hardware case. */
419
477
  HCase hcase = (HCase)malloc(sizeof(HCaseS));
478
+ // printf("hcase=%p\n",hcase);
420
479
  /* Set it up. */
421
480
  hcase->kind = HCASE;
422
481
  value_to_rcsim(ExpressionS,value,hcase->value);
@@ -436,8 +495,10 @@ VALUE rcsim_make_hcase(VALUE mod, VALUE value, VALUE defolt) {
436
495
 
437
496
  /* Creating a block C object. */
438
497
  VALUE rcsim_make_block(VALUE mod, VALUE mode) {
498
+ // printf("rcsim_make_block\n");
439
499
  /* Allocates the block. */
440
500
  Block block = (Block)malloc(sizeof(BlockS));
501
+ // printf("block=%p\n",block);
441
502
  /* Set it up. */
442
503
  block->kind = BLOCK;
443
504
  block->owner = NULL;
@@ -456,15 +517,13 @@ VALUE rcsim_make_block(VALUE mod, VALUE mode) {
456
517
 
457
518
  /* Creating a numeric value C object. */
458
519
  VALUE rcsim_make_value_numeric(VALUE mod, VALUE typeV, VALUE contentV) {
459
- // /* Allocates the value. */
460
- // Value value = get_value();
461
- // /* Sets its type. */
462
- // value_to_rcsim(TypeS,typeV,value->type);
520
+ // printf("rcsim_make_value_numeric\n");
463
521
  /* Get the type. */
464
522
  Type type;
465
523
  value_to_rcsim(TypeS,typeV,type);
466
524
  /* Create the value. */
467
525
  Value value = make_value(type,0);
526
+ // printf("value=%p\n",value);
468
527
  /* Set it to numeric. */
469
528
  value->numeric = 1;
470
529
  value->capacity = 0;
@@ -479,15 +538,13 @@ VALUE rcsim_make_value_numeric(VALUE mod, VALUE typeV, VALUE contentV) {
479
538
 
480
539
  /* Creating a bitstring value C object. */
481
540
  VALUE rcsim_make_value_bitstring(VALUE mod, VALUE typeV, VALUE contentV) {
482
- // /* Allocates the value. */
483
- // Value value = get_value();
484
- // /* Sets its type. */
485
- // value_to_rcsim(TypeS,type,value->type);
541
+ // printf("rcsim_make_value_bitstring\n");
486
542
  /* Get the type. */
487
543
  Type type;
488
544
  value_to_rcsim(TypeS,typeV,type);
489
545
  /* Create the value. */
490
546
  Value value = make_value(type,0);
547
+ // printf("value=%p\n",value);
491
548
  // printf("Created from bitstring value=%p with type=%p\n",value,value->type);
492
549
  // printf("and width=%llu\n",type_width(value->type));
493
550
  /* Set it to bitstring. */
@@ -495,7 +552,8 @@ VALUE rcsim_make_value_bitstring(VALUE mod, VALUE typeV, VALUE contentV) {
495
552
  /* Generate the string of the content. */
496
553
  char* str = StringValueCStr(contentV);
497
554
  value->capacity = strlen(str)+1;
498
- value->data_str = calloc(sizeof(char),value->capacity);
555
+ value->data_str = calloc(value->capacity,sizeof(char));
556
+ // printf("value->data_str=%p\n",value->data_str);
499
557
  strcpy(value->data_str,str);
500
558
  /* Returns the C value embedded into a ruby VALUE. */
501
559
  VALUE res;
@@ -506,8 +564,10 @@ VALUE rcsim_make_value_bitstring(VALUE mod, VALUE typeV, VALUE contentV) {
506
564
 
507
565
  /* Creating a cast C object. */
508
566
  VALUE rcsim_make_cast(VALUE mod, VALUE type, VALUE child) {
567
+ // printf("rcsim_make_cast\n");
509
568
  /* Allocates the cast. */
510
569
  Cast cast = (Cast)malloc(sizeof(CastS));
570
+ // printf("cast=%p\n",cast);
511
571
  /* Set it up. */
512
572
  cast->kind = CAST;
513
573
  value_to_rcsim(TypeS,type,cast->type);
@@ -520,8 +580,10 @@ VALUE rcsim_make_cast(VALUE mod, VALUE type, VALUE child) {
520
580
 
521
581
  /* Creating a unary value C object. */
522
582
  VALUE rcsim_make_unary(VALUE mod, VALUE type, VALUE operator, VALUE child) {
583
+ // printf("rcsim_make_unary\n");
523
584
  /* Allocates the unary. */
524
585
  Unary unary= (Unary)malloc(sizeof(UnaryS));
586
+ // printf("unary=%p\n",unary);
525
587
  /* Set it up. */
526
588
  unary->kind = UNARY;
527
589
  value_to_rcsim(TypeS,type,unary->type);
@@ -539,8 +601,10 @@ VALUE rcsim_make_unary(VALUE mod, VALUE type, VALUE operator, VALUE child) {
539
601
 
540
602
  /* Creating a binary value C object. */
541
603
  VALUE rcsim_make_binary(VALUE mod, VALUE type, VALUE operator, VALUE left, VALUE right) {
604
+ // printf("rcsim_make_binary\n");
542
605
  /* Allocates the binary. */
543
606
  Binary binary = (Binary)malloc(sizeof(BinaryS));
607
+ // printf("binary=%p\n",binary);
544
608
  /* Set it up. */
545
609
  binary->kind = BINARY;
546
610
  value_to_rcsim(TypeS,type,binary->type);
@@ -573,8 +637,10 @@ VALUE rcsim_make_binary(VALUE mod, VALUE type, VALUE operator, VALUE left, VALUE
573
637
 
574
638
  /* Creating a select C object. */
575
639
  VALUE rcsim_make_select(VALUE mod, VALUE type, VALUE sel) {
640
+ // printf("rcsim_make_select\n");
576
641
  /* Allocates the select. */
577
642
  Select select = (Select)malloc(sizeof(SelectS));
643
+ // printf("select=%p\n",select);
578
644
  /* Set it up. */
579
645
  select->kind = SELECT;
580
646
  value_to_rcsim(TypeS,type,select->type);
@@ -589,8 +655,10 @@ VALUE rcsim_make_select(VALUE mod, VALUE type, VALUE sel) {
589
655
 
590
656
  /* Creating a concat C object. */
591
657
  VALUE rcsim_make_concat(VALUE mod, VALUE type, VALUE dirV) {
658
+ // printf("rcsim_make_concat\n");
592
659
  /* Allocates the concat. */
593
660
  Concat concat = (Concat)malloc(sizeof(ConcatS));
661
+ // printf("concat=%p\n",concat);
594
662
  /* Set it up. */
595
663
  concat->kind = CONCAT;
596
664
  value_to_rcsim(TypeS,type,concat->type);
@@ -605,8 +673,10 @@ VALUE rcsim_make_concat(VALUE mod, VALUE type, VALUE dirV) {
605
673
 
606
674
  /* Creating a ref concat C object. */
607
675
  VALUE rcsim_make_refConcat(VALUE mod, VALUE type, VALUE dirV) {
676
+ // printf("rcsim_make_refConcat\n");
608
677
  /* Allocates the ref concat. */
609
678
  RefConcat refConcat = (RefConcat)malloc(sizeof(RefConcatS));
679
+ // printf("refConcat=%p\n",refConcat);
610
680
  /* Set it up. */
611
681
  refConcat->kind = REF_CONCAT;
612
682
  value_to_rcsim(TypeS,type,refConcat->type);
@@ -621,8 +691,10 @@ VALUE rcsim_make_refConcat(VALUE mod, VALUE type, VALUE dirV) {
621
691
 
622
692
  /* Creating a ref index C object. */
623
693
  VALUE rcsim_make_refIndex(VALUE mod, VALUE type, VALUE index, VALUE ref) {
694
+ // printf("rcsim_make_refIndex\n");
624
695
  /* Allocates the ref index. */
625
696
  RefIndex refIndex = (RefIndex)malloc(sizeof(RefIndexS));
697
+ // printf("refIndex=%p\n",refIndex);
626
698
  /* Set it up. */
627
699
  refIndex->kind = REF_INDEX;
628
700
  value_to_rcsim(TypeS,type,refIndex->type);
@@ -636,8 +708,10 @@ VALUE rcsim_make_refIndex(VALUE mod, VALUE type, VALUE index, VALUE ref) {
636
708
 
637
709
  /* Creating a ref range C object. */
638
710
  VALUE rcsim_make_refRange(VALUE mod, VALUE type, VALUE first, VALUE last, VALUE ref) {
711
+ // printf("rcsim_make_refRange\n");
639
712
  /* Allocates the ref range. */
640
713
  RefRangeE refRange = (RefRangeE)malloc(sizeof(RefRangeES));
714
+ // printf("refRange=%p\n",refRange);
641
715
  /* Set it up. */
642
716
  refRange->kind = REF_RANGE;
643
717
  value_to_rcsim(TypeS,type,refRange->type);
@@ -653,8 +727,10 @@ VALUE rcsim_make_refRange(VALUE mod, VALUE type, VALUE first, VALUE last, VALUE
653
727
 
654
728
  /* Creating a character string C object. */
655
729
  VALUE rcsim_make_stringE(VALUE mod, VALUE strV) {
730
+ // printf("rcsim_make_stringE\n");
656
731
  /* Allocates the string. */
657
732
  StringE stringE = (StringE)malloc(sizeof(StringES));
733
+ // printf("stringE=%p\n",stringE);
658
734
  /* Set it up. */
659
735
  stringE->kind = STRINGE;
660
736
  stringE->str = strdup(StringValueCStr(strV));
@@ -671,19 +747,24 @@ VALUE rcsim_add_systemT_inputs(VALUE mod, VALUE systemTV, VALUE sigVs) {
671
747
  /* Get the C systemT from the Ruby value. */
672
748
  SystemT systemT;
673
749
  value_to_rcsim(SystemTS,systemTV,systemT);
750
+ // printf("rcsim_add_systemT_inputs with systemT=%p\n",systemT);
674
751
  // printf("Adding to systemT with kind=%d and name=%s\n",systemT->kind, systemT->name);
675
752
  /* Prepare the size for the inputs. */
676
753
  long num = RARRAY_LEN(sigVs);
677
754
  long old_num = systemT->num_inputs;
678
755
  systemT->num_inputs += num;
679
- systemT->inputs=realloc(systemT->inputs,sizeof(SignalI)*systemT->num_inputs);
680
- // printf("size=%d num=%i\n",malloc_size(systemT->inputs),systemT->num_inputs);
681
- // printf("required size=%lu\n",sizeof(SignalI)*systemT->num_inputs);
756
+ // printf("first systemT->inputs=%p\n",systemT->inputs); fflush(stdout);
757
+ // systemT->inputs=realloc(systemT->inputs,
758
+ // sizeof(SignalI[systemT->num_inputs]));
759
+ systemT->inputs=my_realloc(systemT->inputs,sizeof(SignalI[old_num]),
760
+ sizeof(SignalI[systemT->num_inputs]));
761
+ // printf("now systemT->inputs=%p\n",systemT->inputs); fflush(stdout);
762
+ // printf("access test: %p\n",systemT->inputs[0]); fflush(stdout);
682
763
  /* Get and add the signals from the Ruby value. */
683
- for(int i=0; i< num; ++i) {
764
+ for(long i=0; i< num; ++i) {
684
765
  SignalI sig;
766
+ // show_access(systemT->inputs,old_num+i);
685
767
  value_to_rcsim(SignalIS,rb_ary_entry(sigVs,i),sig);
686
- // printf("old_num+i=%ld\n",old_num+i);
687
768
  systemT->inputs[old_num + i] = sig;
688
769
  }
689
770
  return systemTV;
@@ -694,14 +775,22 @@ VALUE rcsim_add_systemT_outputs(VALUE mod, VALUE systemTV, VALUE sigVs) {
694
775
  /* Get the C systemT from the Ruby value. */
695
776
  SystemT systemT;
696
777
  value_to_rcsim(SystemTS,systemTV,systemT);
778
+ // printf("rcsim_add_systemT_inputs with systemT=%p\n",systemT);
697
779
  /* Prepare the size for the outputs. */
698
780
  long num = RARRAY_LEN(sigVs);
699
781
  long old_num = systemT->num_outputs;
700
782
  systemT->num_outputs += num;
701
- systemT->outputs =realloc(systemT->outputs,sizeof(SignalI)*systemT->num_outputs);
783
+ // printf("first systemT->outputs=%p\n",systemT->outputs); fflush(stdout);
784
+ // systemT->outputs =realloc(systemT->outputs,
785
+ // sizeof(SignalI[systemT->num_outputs]));
786
+ systemT->outputs =my_realloc(systemT->outputs,sizeof(SignalI[old_num]),
787
+ sizeof(SignalI[systemT->num_outputs]));
788
+ // printf("now systemT->outputs=%p\n",systemT->outputs); fflush(stdout);
789
+ // printf("access test: %p\n",systemT->outputs[0]); fflush(stdout);
702
790
  /* Get and add the signals from the Ruby value. */
703
- for(int i=0; i< num; ++i) {
791
+ for(long i=0; i< num; ++i) {
704
792
  SignalI sig;
793
+ // show_access(systemT->outputs,old_num+i);
705
794
  value_to_rcsim(SignalIS,rb_ary_entry(sigVs,i),sig);
706
795
  systemT->outputs[old_num + i] = sig;
707
796
  }
@@ -713,14 +802,22 @@ VALUE rcsim_add_systemT_inouts(VALUE mod, VALUE systemTV, VALUE sigVs) {
713
802
  /* Get the C systemT from the Ruby value. */
714
803
  SystemT systemT;
715
804
  value_to_rcsim(SystemTS,systemTV,systemT);
805
+ // printf("rcsim_add_systemT_inputs with systemT=%p\n",systemT);
716
806
  /* Prepare the size for the inouts. */
717
807
  long num = RARRAY_LEN(sigVs);
718
808
  long old_num = systemT->num_inouts;
719
809
  systemT->num_inouts += num;
720
- systemT->inouts =realloc(systemT->inouts,sizeof(SignalI)*systemT->num_inouts);
810
+ // printf("first systemT->inouts=%p\n",systemT->inouts); fflush(stdout);
811
+ // systemT->inouts =realloc(systemT->inouts,
812
+ // sizeof(SignalI[systemT->num_inouts]));
813
+ systemT->inouts =my_realloc(systemT->inouts,sizeof(SignalI[old_num]),
814
+ sizeof(SignalI[systemT->num_inouts]));
815
+ // printf("now systemT->inouts=%p\n",systemT->inouts); fflush(stdout);
816
+ // printf("access test: %p\n",systemT->inouts[0]); fflush(stdout);
721
817
  /* Get and add the signals from the Ruby value. */
722
- for(int i=0; i< num; ++i) {
818
+ for(long i=0; i< num; ++i) {
723
819
  SignalI sig;
820
+ // show_access(systemT->inouts,old_num+i);
724
821
  value_to_rcsim(SignalIS,rb_ary_entry(sigVs,i),sig);
725
822
  systemT->inouts[old_num + i] = sig;
726
823
  }
@@ -732,14 +829,22 @@ VALUE rcsim_add_scope_inners(VALUE mod, VALUE scopeV, VALUE sigVs) {
732
829
  /* Get the C scope from the Ruby value. */
733
830
  Scope scope;
734
831
  value_to_rcsim(ScopeS,scopeV,scope);
832
+ // printf("rcsim_add_scope_inners with scope=%p\n",scope);
735
833
  /* Prepare the size for the inners. */
736
834
  long num = RARRAY_LEN(sigVs);
737
835
  long old_num = scope->num_inners;
738
836
  scope->num_inners += num;
739
- scope->inners = realloc(scope->inners,sizeof(SignalI)*scope->num_inners);
837
+ // printf("first scope->inners=%p\n",scope->inners); fflush(stdout);
838
+ // scope->inners = realloc(scope->inners,
839
+ // sizeof(SignalI[scope->num_inners]));
840
+ scope->inners = my_realloc(scope->inners,sizeof(SignalI[old_num]),
841
+ sizeof(SignalI[scope->num_inners]));
842
+ // printf("now scope->inners=%p\n",scope->inners); fflush(stdout);
843
+ // printf("access test: %p\n",scope->inners[0]); fflush(stdout);
740
844
  /* Get and add the signals from the Ruby value. */
741
- for(int i=0; i< num; ++i) {
845
+ for(long i=0; i< num; ++i) {
742
846
  SignalI sig;
847
+ // show_access(scope->inners,old_num+i);
743
848
  value_to_rcsim(SignalIS,rb_ary_entry(sigVs,i),sig);
744
849
  scope->inners[old_num + i] = sig;
745
850
  }
@@ -748,18 +853,28 @@ VALUE rcsim_add_scope_inners(VALUE mod, VALUE scopeV, VALUE sigVs) {
748
853
 
749
854
  /* Adds behaviors to a C scope. */
750
855
  VALUE rcsim_add_scope_behaviors(VALUE mod, VALUE scopeV, VALUE behVs) {
856
+ // printf("rcsim_add_scope_behaviors\n");
751
857
  /* Get the C scope from the Ruby value. */
752
858
  Scope scope;
753
859
  value_to_rcsim(ScopeS,scopeV,scope);
860
+ // printf("rcsim_add_scope_behaviors with scope=%p\n",scope);
754
861
  /* Prepare the size for the behaviors. */
755
862
  long num = RARRAY_LEN(behVs);
756
863
  long old_num = scope->num_behaviors;
864
+ // printf("num=%lu old_num=%lu\n",num,old_num);
865
+ // printf("scope->behaviors=%p\n",scope->behaviors);
757
866
  scope->num_behaviors += num;
758
- scope->behaviors = realloc(scope->behaviors,
759
- sizeof(Behavior)*scope->num_behaviors);
867
+ // printf("first scope->behaviors=%p\n",scope->behaviors); fflush(stdout);
868
+ // scope->behaviors = realloc(scope->behaviors,
869
+ // sizeof(Behavior[scope->num_behaviors]));
870
+ scope->behaviors = my_realloc(scope->behaviors,sizeof(Behavior[old_num]),
871
+ sizeof(Behavior[scope->num_behaviors]));
872
+ // printf("now scope->behaviors=%p\n",scope->behaviors); fflush(stdout);
873
+ // printf("access test: %p\n",scope->behaviors[0]); fflush(stdout);
760
874
  /* Get and add the behaviors from the Ruby value. */
761
- for(int i=0; i< num; ++i) {
875
+ for(long i=0; i< num; ++i) {
762
876
  Behavior beh;
877
+ // show_access(scope->behaviors,old_num+i);
763
878
  value_to_rcsim(BehaviorS,rb_ary_entry(behVs,i),beh);
764
879
  scope->behaviors[old_num + i] = beh;
765
880
  }
@@ -771,15 +886,22 @@ VALUE rcsim_add_scope_systemIs(VALUE mod, VALUE scopeV, VALUE sysVs) {
771
886
  /* Get the C scope from the Ruby value. */
772
887
  Scope scope;
773
888
  value_to_rcsim(ScopeS,scopeV,scope);
889
+ // printf("rcsim_add_scope_systemIs with scope=%p\n",scope);
774
890
  /* Prepare the size for the system instances. */
775
891
  long num = RARRAY_LEN(sysVs);
776
892
  long old_num = scope->num_systemIs;
777
893
  scope->num_systemIs += num;
778
- scope->systemIs = realloc(scope->systemIs,
779
- sizeof(SystemI)*scope->num_systemIs);
894
+ // printf("first scope->systemIs=%p\n",scope->systemIs); fflush(stdout);
895
+ // scope->systemIs = realloc(scope->systemIs,
896
+ // sizeof(SystemI[scope->num_systemIs]));
897
+ scope->systemIs = my_realloc(scope->systemIs,sizeof(SystemI[old_num]),
898
+ sizeof(SystemI[scope->num_systemIs]));
899
+ // printf("now scope->systemIs=%p\n",scope->systemIs); fflush(stdout);
900
+ // printf("access test: %p\n",scope->systemIs[0]); fflush(stdout);
780
901
  /* Get and add the system instances from the Ruby value. */
781
- for(int i=0; i< num; ++i) {
902
+ for(long i=0; i< num; ++i) {
782
903
  SystemI sys;
904
+ // show_access(scope->systemIs,old_num+i);
783
905
  value_to_rcsim(SystemIS,rb_ary_entry(sysVs,i),sys);
784
906
  scope->systemIs[old_num + i] = sys;
785
907
  }
@@ -791,15 +913,22 @@ VALUE rcsim_add_scope_scopes(VALUE mod, VALUE scopeV, VALUE scpVs) {
791
913
  /* Get the C scope from the Ruby value. */
792
914
  Scope scope;
793
915
  value_to_rcsim(ScopeS,scopeV,scope);
916
+ // printf("rcsim_add_scope_scopes with scope=%p\n",scope);
794
917
  /* Prepare the size for the sub scopes. */
795
918
  long num = RARRAY_LEN(scpVs);
796
919
  long old_num = scope->num_scopes;
797
920
  scope->num_scopes += num;
798
- scope->scopes = realloc(scope->scopes,
799
- sizeof(Scope)*scope->num_scopes);
921
+ // printf("first scope->scopes=%p\n",scope->scopes); fflush(stdout);
922
+ // scope->scopes = realloc(scope->scopes,
923
+ // sizeof(Scope[scope->num_scopes]));
924
+ scope->scopes = my_realloc(scope->scopes,sizeof(Scope[old_num]),
925
+ sizeof(Scope[scope->num_scopes]));
926
+ // printf("now scope->scopes=%p\n",scope->scopes); fflush(stdout);
927
+ // printf("access test: %p\n",scope->scopes[0]); fflush(stdout);
800
928
  /* Get and add the sub scopes from the Ruby value. */
801
- for(int i=0; i< num; ++i) {
929
+ for(long i=0; i< num; ++i) {
802
930
  Scope scp;
931
+ // show_access(scope->scopes,old_num+i);
803
932
  value_to_rcsim(ScopeS,rb_ary_entry(scpVs,i),scp);
804
933
  scope->scopes[old_num + i] = scp;
805
934
  }
@@ -811,15 +940,22 @@ VALUE rcsim_add_behavior_events(VALUE mod, VALUE behaviorV, VALUE eventVs) {
811
940
  /* Get the C behavior from the Ruby value. */
812
941
  Behavior behavior;
813
942
  value_to_rcsim(BehaviorS,behaviorV,behavior);
943
+ // printf("rcsim_add_behavior_events with behavior=%p\n",behavior);
814
944
  /* Prepare the size for the events. */
815
945
  long num = RARRAY_LEN(eventVs);
816
946
  long old_num = behavior->num_events;
817
947
  behavior->num_events += num;
818
- behavior->events = realloc(behavior->events,
819
- sizeof(Event)*behavior->num_events);
948
+ // printf("first behavior->events=%p\n",behavior->events); fflush(stdout);
949
+ // behavior->events = realloc(behavior->events,
950
+ // sizeof(Event[behavior->num_events]));
951
+ behavior->events = my_realloc(behavior->events,sizeof(Event[old_num]),
952
+ sizeof(Event[behavior->num_events]));
953
+ // printf("now behavior->events=%p\n",behavior->events); fflush(stdout);
954
+ // printf("access test: %p\n",behavior->events[0]); fflush(stdout);
820
955
  /* Get and add the events from the Ruby value. */
821
- for(int i=0; i< num; ++i) {
956
+ for(long i=0; i< num; ++i) {
822
957
  Event event;
958
+ // show_access(behavior->events,old_num+i);
823
959
  value_to_rcsim(EventS,rb_ary_entry(eventVs,i),event);
824
960
  behavior->events[old_num + i] = event;
825
961
  /* Update the signal of the event to say it activates the behavior. */
@@ -827,17 +963,35 @@ VALUE rcsim_add_behavior_events(VALUE mod, VALUE behaviorV, VALUE eventVs) {
827
963
  switch(event->edge) {
828
964
  case ANYEDGE:
829
965
  sig->num_any++;
830
- sig->any = realloc(sig->any,sizeof(Object)*sig->num_any);
966
+ // printf("first sig->any=%p\n",sig->any); fflush(stdout);
967
+ // sig->any = realloc(sig->any,sizeof(Object[sig->num_any]));
968
+ sig->any = my_realloc(sig->any,sizeof(Object[sig->num_any-1]),sizeof(Object[sig->num_any]));
969
+ // printf("now sig->any=%p\n",sig->any); fflush(stdout);
970
+ // printf("access test: %p\n",sig->any[0]); fflush(stdout);
971
+ // show_access(sig->any,sig->num_any-1);
972
+ // printf("sig->any=%p\n",sig->any);
831
973
  sig->any[sig->num_any-1] = (Object)behavior;
832
974
  break;
833
975
  case POSEDGE:
834
976
  sig->num_pos++;
835
- sig->pos = realloc(sig->pos,sizeof(Object)*sig->num_pos);
977
+ // printf("first sig->pos=%p\n",sig->pos); fflush(stdout);
978
+ // sig->pos = realloc(sig->pos,sizeof(Object[sig->num_pos]));
979
+ sig->pos = my_realloc(sig->pos,sizeof(Object[sig->num_pos-1]),sizeof(Object[sig->num_pos]));
980
+ // printf("now sig->pos=%p\n",sig->pos); fflush(stdout);
981
+ // printf("access test: %p\n",sig->pos[0]); fflush(stdout);
982
+ // show_access(sig->pos,sig->num_pos-1);
983
+ // printf("sig->pos=%p\n",sig->pos);
836
984
  sig->pos[sig->num_pos-1] = (Object)behavior;
837
985
  break;
838
986
  case NEGEDGE:
839
987
  sig->num_neg++;
840
- sig->neg = realloc(sig->neg,sizeof(Object)*sig->num_neg);
988
+ // printf("first sig->neg=%p\n",sig->neg); fflush(stdout);
989
+ // sig->neg = realloc(sig->neg,sizeof(Object[sig->num_neg]));
990
+ sig->neg = my_realloc(sig->neg,sizeof(Object[sig->num_neg-1]),sizeof(Object[sig->num_neg]));
991
+ // printf("now sig->neg=%p\n",sig->neg); fflush(stdout);
992
+ // printf("access test: %p\n",sig->neg[0]); fflush(stdout);
993
+ // show_access(sig->neg,sig->num_neg-1);
994
+ // printf("sig->neg=%p\n",sig->neg);
841
995
  sig->neg[sig->num_neg-1] = (Object)behavior;
842
996
  break;
843
997
  default:
@@ -852,14 +1006,22 @@ VALUE rcsim_add_systemI_systemTs(VALUE mod, VALUE systemIV, VALUE sysVs) {
852
1006
  /* Get the C systemI from the Ruby value. */
853
1007
  SystemI systemI;
854
1008
  value_to_rcsim(SystemIS,systemIV,systemI);
1009
+ // printf("rcsim_add_systemI_systemTs with systemI=%p\n",systemI);
855
1010
  /* Prepare the size for the alternate system types. */
856
1011
  long num = RARRAY_LEN(sysVs);
857
1012
  long old_num = systemI->num_systems;
858
1013
  systemI->num_systems += num;
859
- systemI->systems=realloc(systemI->systems,sizeof(SystemT)*systemI->num_systems);
1014
+ // printf("first systemI->systems=%p\n",systemI->systems); fflush(stdout);
1015
+ // systemI->systems=realloc(systemI->systems,
1016
+ // sizeof(SystemT[systemI->num_systems]));
1017
+ systemI->systems=my_realloc(systemI->systems,sizeof(SystemT[old_num]),
1018
+ sizeof(SystemT[systemI->num_systems]));
1019
+ // printf("now systemI->systems=%p\n",systemI->systems); fflush(stdout);
1020
+ // printf("access test: %p\n",systemI->systems[0]); fflush(stdout);
860
1021
  /* Get and add the alternate system types from the Ruby value. */
861
- for(int i=0; i< num; ++i) {
1022
+ for(long i=0; i< num; ++i) {
862
1023
  SystemT sys;
1024
+ // show_access(systemI->systems,old_num+i);
863
1025
  value_to_rcsim(SystemTS,rb_ary_entry(sysVs,i),sys);
864
1026
  systemI->systems[old_num + i] = sys;
865
1027
  }
@@ -871,15 +1033,22 @@ VALUE rcsim_add_print_args(VALUE mod, VALUE printV, VALUE argVs) {
871
1033
  /* Get the C print from the Ruby value. */
872
1034
  Print print;
873
1035
  value_to_rcsim(PrintS,printV,print);
1036
+ // printf("rcsim_add_print_args with print=%p\n",print);
874
1037
  /* Prepare the size for the arguments. */
875
1038
  long num = RARRAY_LEN(argVs);
876
1039
  long old_num = print->num_args;
877
1040
  print->num_args += num;
878
- print->args = realloc(print->args,
879
- sizeof(Expression)*print->num_args);
1041
+ // printf("first print->args=%p\n",print->args); fflush(stdout);
1042
+ // print->args = realloc(print->args,
1043
+ // sizeof(Expression[print->num_args]));
1044
+ print->args = my_realloc(print->args,sizeof(Expression[old_num]),
1045
+ sizeof(Expression[print->num_args]));
1046
+ // printf("now print->args=%p\n",print->args); fflush(stdout);
1047
+ // printf("access test: %p\n",print->args[0]); fflush(stdout);
880
1048
  /* Get and add the arguments from the Ruby value. */
881
- for(int i=0; i< num; ++i) {
1049
+ for(long i=0; i< num; ++i) {
882
1050
  Expression arg;
1051
+ // show_access(print->args,old_num+i);
883
1052
  value_to_rcsim(ExpressionS,rb_ary_entry(argVs,i),arg);
884
1053
  print->args[old_num + i] = arg;
885
1054
  }
@@ -891,16 +1060,27 @@ VALUE rcsim_add_hif_noifs(VALUE mod, VALUE hifV, VALUE condVs, VALUE stmntVs) {
891
1060
  /* Get the C hardware if from the Ruby value. */
892
1061
  HIf hif;
893
1062
  value_to_rcsim(HIfS,hifV,hif);
1063
+ // printf("rcsim_add_hif_noifs with hif=%p\n",hif);
894
1064
  /* Prepare the size for the noifs. */
895
1065
  long num = RARRAY_LEN(condVs);
896
1066
  long old_num = hif->num_noifs;
897
1067
  hif->num_noifs += num;
898
- hif->noconds = realloc(hif->noconds, sizeof(Expression)*hif->num_noifs);
899
- hif->nostmnts = realloc(hif->nostmnts, sizeof(Statement)*hif->num_noifs);
1068
+ // printf("first hif->noconds=%p\n",hif->noconds); fflush(stdout);
1069
+ // printf("first hif->nostmnts=%p\n",hif->nostmnts); fflush(stdout);
1070
+ // hif->noconds = realloc(hif->noconds,sizeof(Expression[hif->num_noifs]));
1071
+ hif->noconds = my_realloc(hif->noconds,sizeof(Expression[old_num]),sizeof(Expression[hif->num_noifs]));
1072
+ // printf("now hif->noconds=%p\n",hif->noconds); fflush(stdout);
1073
+ // printf("access test: %p\n",hif->noconds[0]); fflush(stdout);
1074
+ // hif->nostmnts = realloc(hif->nostmnts,sizeof(Statement[hif->num_noifs]));
1075
+ hif->nostmnts = my_realloc(hif->nostmnts,sizeof(Statement[old_num]),sizeof(Statement[hif->num_noifs]));
1076
+ // printf("now hif->nostmnts=%p\n",hif->nostmnts); fflush(stdout);
1077
+ // printf("access test: %p\n",hif->nostmnts[0]); fflush(stdout);
900
1078
  /* Get and add the noifs from the Ruby value. */
901
- for(int i=0; i< num; ++i) {
1079
+ for(long i=0; i< num; ++i) {
902
1080
  Expression cond;
903
1081
  Statement stmnt;
1082
+ // show_access(hif->noconds,old_num+i);
1083
+ // show_access(hif->nostmnts,old_num+i);
904
1084
  value_to_rcsim(ExpressionS,rb_ary_entry(condVs,i),cond);
905
1085
  hif->noconds[old_num + i] = cond;
906
1086
  value_to_rcsim(StatementS,rb_ary_entry(stmntVs,i),stmnt);
@@ -914,18 +1094,31 @@ VALUE rcsim_add_hcase_whens(VALUE mod, VALUE hcaseV, VALUE matchVs, VALUE stmntV
914
1094
  /* Get the C hardware case from the Ruby value. */
915
1095
  HCase hcase;
916
1096
  value_to_rcsim(HCaseS,hcaseV,hcase);
1097
+ // printf("rcsim_add_hcase_whens with hcase=%p\n",hcase);
917
1098
  /* Prepare the size for the noifs. */
918
1099
  long num = RARRAY_LEN(matchVs);
919
1100
  long old_num = hcase->num_whens;
920
1101
  hcase->num_whens += num;
921
- hcase->matches = realloc(hcase->matches,
922
- sizeof(Expression)*hcase->num_whens);
923
- hcase->stmnts = realloc(hcase->stmnts,
924
- sizeof(Statement)*hcase->num_whens);
1102
+ // printf("first hcase->matches=%p\n",hcase->matches); fflush(stdout);
1103
+ // printf("first hcase->stmnts=%p\n",hcase->stmnts); fflush(stdout);
1104
+ // hcase->matches = realloc(hcase->matches,
1105
+ // sizeof(Expression[hcase->num_whens]));
1106
+ hcase->matches = my_realloc(hcase->matches,sizeof(Expression[old_num]),
1107
+ sizeof(Expression[hcase->num_whens]));
1108
+ // printf("now hcase->matches=%p\n",hcase->matches); fflush(stdout);
1109
+ // printf("access test: %p\n",hcase->matches[0]); fflush(stdout);
1110
+ // hcase->stmnts = realloc(hcase->stmnts,
1111
+ // sizeof(Statement[hcase->num_whens]));
1112
+ hcase->stmnts = my_realloc(hcase->stmnts,sizeof(Statement[old_num]),
1113
+ sizeof(Statement[hcase->num_whens]));
1114
+ // printf("now hcase->stmnts=%p\n",hcase->stmnts); fflush(stdout);
1115
+ // printf("access test: %p\n",hcase->stmnts[0]); fflush(stdout);
925
1116
  /* Get and add the whens from the Ruby value. */
926
- for(int i=0; i< num; ++i) {
1117
+ for(long i=0; i< num; ++i) {
927
1118
  Expression match;
928
1119
  Statement stmnt;
1120
+ // show_access(hcase->matches,old_num+i);
1121
+ // show_access(hcase->stmnts,old_num+i);
929
1122
  value_to_rcsim(ExpressionS,rb_ary_entry(matchVs,i),match);
930
1123
  hcase->matches[old_num + i] = match;
931
1124
  value_to_rcsim(StatementS,rb_ary_entry(stmntVs,i),stmnt);
@@ -939,14 +1132,22 @@ VALUE rcsim_add_block_inners(VALUE mod, VALUE blockV, VALUE sigVs) {
939
1132
  /* Get the C block from the Ruby value. */
940
1133
  Block block;
941
1134
  value_to_rcsim(BlockS,blockV,block);
1135
+ // printf("rcsim_add_block_inners with block=%p\n",block);
942
1136
  /* Prepare the size for the inners. */
943
1137
  long num = RARRAY_LEN(sigVs);
944
1138
  long old_num = block->num_inners;
945
1139
  block->num_inners += num;
946
- block->inners = realloc(block->inners,sizeof(SignalI)*block->num_inners);
1140
+ // printf("first block->inners=%p\n",block->inners); fflush(stdout);
1141
+ // block->inners = realloc(block->inners,
1142
+ // sizeof(SignalI[block->num_inners]));
1143
+ block->inners = my_realloc(block->inners,sizeof(SignalI[old_num]),
1144
+ sizeof(SignalI[block->num_inners]));
1145
+ // printf("now block->inners=%p\n",block->inners); fflush(stdout);
1146
+ // printf("access test: %p\n",block->inners[0]); fflush(stdout);
947
1147
  /* Get and add the signals from the Ruby value. */
948
- for(int i=0; i< num; ++i) {
1148
+ for(long i=0; i< num; ++i) {
949
1149
  SignalI sig;
1150
+ // show_access(block->inners,old_num+i);
950
1151
  value_to_rcsim(SignalIS,rb_ary_entry(sigVs,i),sig);
951
1152
  block->inners[old_num + i] = sig;
952
1153
  }
@@ -958,14 +1159,22 @@ VALUE rcsim_add_block_statements(VALUE mod, VALUE blockV, VALUE stmntVs) {
958
1159
  /* Get the C block from the Ruby value. */
959
1160
  Block block;
960
1161
  value_to_rcsim(BlockS,blockV,block);
1162
+ // printf("rcsim_add_block_statements with block=%p\n",block);
961
1163
  /* Prepare the size for the statements. */
962
1164
  long num = RARRAY_LEN(stmntVs);
963
1165
  long old_num = block->num_stmnts;
964
1166
  block->num_stmnts += num;
965
- block->stmnts = realloc(block->stmnts,sizeof(Statement)*block->num_stmnts);
1167
+ // printf("first block->stmnts=%p\n",block->stmnts); fflush(stdout);
1168
+ // block->stmnts = realloc(block->stmnts,
1169
+ // sizeof(Statement[block->num_stmnts]));
1170
+ block->stmnts = my_realloc(block->stmnts,sizeof(Statement[old_num]),
1171
+ sizeof(Statement[block->num_stmnts]));
1172
+ // printf("now block->stmnts=%p\n",block->stmnts); fflush(stdout);
1173
+ // printf("access test: %p\n",block->stmnts[0]); fflush(stdout);
966
1174
  /* Get and add the statements from the Ruby value. */
967
- for(int i=0; i< num; ++i) {
1175
+ for(long i=0; i< num; ++i) {
968
1176
  Statement stmnt;
1177
+ // show_access(block->stmnts,old_num+i);
969
1178
  value_to_rcsim(StatementS,rb_ary_entry(stmntVs,i),stmnt);
970
1179
  block->stmnts[old_num + i] = stmnt;
971
1180
  }
@@ -977,14 +1186,22 @@ VALUE rcsim_add_select_choices(VALUE mod, VALUE selectV, VALUE choiceVs) {
977
1186
  /* Get the C select from the Ruby value. */
978
1187
  Select select;
979
1188
  value_to_rcsim(SelectS,selectV,select);
1189
+ // printf("rcsim_add_select_choices with select=%p\n",select);
980
1190
  /* Prepare the size for the choices. */
981
1191
  long num = RARRAY_LEN(choiceVs);
982
1192
  long old_num = select->num_choices;
983
1193
  select->num_choices += num;
984
- select->choices = realloc(select->choices,sizeof(Expression)*select->num_choices);
1194
+ // printf("first select->choices=%p\n",select->choices); fflush(stdout);
1195
+ // select->choices = realloc(select->choices,
1196
+ // sizeof(Expression[select->num_choices]));
1197
+ select->choices = my_realloc(select->choices,sizeof(Expression[old_num]),
1198
+ sizeof(Expression[select->num_choices]));
1199
+ // printf("now select->choices=%p\n",select->choices); fflush(stdout);
1200
+ // printf("access test: %p\n",select->choices[0]); fflush(stdout);
985
1201
  /* Get and add the choices from the Ruby value. */
986
- for(int i=0; i< num; ++i) {
1202
+ for(long i=0; i< num; ++i) {
987
1203
  Expression choice;
1204
+ // show_access(select->choices,old_num+i);
988
1205
  value_to_rcsim(ExpressionS,rb_ary_entry(choiceVs,i),choice);
989
1206
  select->choices[old_num + i] = choice;
990
1207
  }
@@ -996,17 +1213,24 @@ VALUE rcsim_add_concat_expressions(VALUE mod, VALUE concatV, VALUE exprVs) {
996
1213
  /* Get the C concat from the Ruby value. */
997
1214
  Concat concat;
998
1215
  value_to_rcsim(ConcatS,concatV,concat);
1216
+ // printf("rcsim_add_concat_expressions with concat=%p\n",concat);
999
1217
  /* Prepare the size for the expressions. */
1000
1218
  long num = RARRAY_LEN(exprVs);
1001
1219
  long old_num = concat->num_exprs;
1002
1220
  // printf("add_concat_expressions with num=%li old_num=%li\n",num,old_num);
1003
1221
  concat->num_exprs += num;
1004
- concat->exprs = realloc(concat->exprs,sizeof(Expression)*concat->num_exprs);
1222
+ // printf("first concat->exprs=%p\n",concat->exprs); fflush(stdout);
1223
+ // concat->exprs = realloc(concat->exprs,
1224
+ // sizeof(Expression[concat->num_exprs]));
1225
+ concat->exprs = my_realloc(concat->exprs,sizeof(Expression[old_num]),
1226
+ sizeof(Expression[concat->num_exprs]));
1227
+ // printf("now concat->exprs=%p\n",concat->exprs); fflush(stdout);
1228
+ // printf("access test: %p\n",concat->exprs[0]); fflush(stdout);
1005
1229
  /* Get and add the expressions from the Ruby value. */
1006
- for(int i=0; i< num; ++i) {
1230
+ for(long i=0; i< num; ++i) {
1007
1231
  Expression expr;
1232
+ // show_access(concat->exprs,old_num+i);
1008
1233
  value_to_rcsim(ExpressionS,rb_ary_entry(exprVs,i),expr);
1009
- // printf("Adding expression with type width=%llu\n",type_width(expr->type));
1010
1234
  concat->exprs[old_num + i] = expr;
1011
1235
  }
1012
1236
  return concatV;
@@ -1017,14 +1241,22 @@ VALUE rcsim_add_refConcat_refs(VALUE mod, VALUE refConcatV, VALUE refVs) {
1017
1241
  /* Get the C refConcat from the Ruby value. */
1018
1242
  RefConcat refConcat;
1019
1243
  value_to_rcsim(RefConcatS,refConcatV,refConcat);
1244
+ // printf("rcsim_add_refConcat_refs with refConcat=%p\n",refConcat);
1020
1245
  /* Prepare the size for the references. */
1021
1246
  long num = RARRAY_LEN(refVs);
1022
1247
  long old_num = refConcat->num_refs;
1023
1248
  refConcat->num_refs += num;
1024
- refConcat->refs = realloc(refConcat->refs,sizeof(Reference)*refConcat->num_refs);
1249
+ // printf("first refConcat->refs=%p\n",refConcat->refs); fflush(stdout);
1250
+ // refConcat->refs = realloc(refConcat->refs,
1251
+ // sizeof(Reference[refConcat->num_refs]));
1252
+ refConcat->refs = my_realloc(refConcat->refs,sizeof(Reference[old_num]),
1253
+ sizeof(Reference[refConcat->num_refs]));
1254
+ // printf("now refConcat->refs=%p\n",refConcat->refs); fflush(stdout);
1255
+ // printf("access test: %p\n",refConcat->refs[0]); fflush(stdout);
1025
1256
  /* Get and add the references from the Ruby value. */
1026
- for(int i=0; i< num; ++i) {
1257
+ for(long i=0; i< num; ++i) {
1027
1258
  Reference ref;
1259
+ // show_access(refConcat->refs,old_num+i);
1028
1260
  value_to_rcsim(ReferenceS,rb_ary_entry(refVs,i),ref);
1029
1261
  refConcat->refs[old_num + i] = ref;
1030
1262
  }