~jsvoboda/helenos/sysel

« back to all changes in this revision

Viewing changes to uspace/app/sbi/src/tdata.c

  • Committer: Jiri Svoboda
  • Date: 2010-05-08 08:10:44 UTC
  • Revision ID: jiri@wiwaxia-20100508081044-5hvcjwu15rsfvgnv
Update SBI to rev. 244.

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
    tdata_item_t **res);
48
48
static void tdata_item_subst_tdeleg(tdata_deleg_t *torig,
49
49
    tdata_tvv_t *tvv, tdata_item_t **res);
 
50
static void tdata_item_subst_tebase(tdata_ebase_t *tebase,
 
51
    tdata_tvv_t *tvv, tdata_item_t **res);
 
52
static void tdata_item_subst_tenum(tdata_enum_t *tenum,
 
53
    tdata_tvv_t *tvv, tdata_item_t **res);
50
54
static void tdata_item_subst_tfun(tdata_fun_t *torig,
51
55
    tdata_tvv_t *tvv, tdata_item_t **res);
52
56
static void tdata_item_subst_tvref(tdata_vref_t *tvref, tdata_tvv_t *tvv,
59
63
static void tdata_tobject_print(tdata_object_t *tobject);
60
64
static void tdata_tarray_print(tdata_array_t *tarray);
61
65
static void tdata_tdeleg_print(tdata_deleg_t *tdeleg);
 
66
static void tdata_tebase_print(tdata_ebase_t *tebase);
 
67
static void tdata_tenum_print(tdata_enum_t *tenum);
62
68
static void tdata_tfun_print(tdata_fun_t *tfun);
63
69
static void tdata_tvref_print(tdata_vref_t *tvref);
64
70
 
156
162
 
157
163
                return tdata_item_equal(a->u.tarray->base_ti,
158
164
                    b->u.tarray->base_ti);
 
165
        case tic_tenum:
 
166
                /* Check if both use the same enum definition. */
 
167
                return (a->u.tenum->enum_d == b->u.tenum->enum_d);
159
168
        case tic_tvref:
160
169
                /* Check if both refer to the same type argument. */
161
170
                return (a->u.tvref->targ == b->u.tvref->targ);
195
204
        case tic_tdeleg:
196
205
                tdata_item_subst_tdeleg(ti->u.tdeleg, tvv, res);
197
206
                break;
 
207
        case tic_tebase:
 
208
                tdata_item_subst_tebase(ti->u.tebase, tvv, res);
 
209
                break;
 
210
        case tic_tenum:
 
211
                tdata_item_subst_tenum(ti->u.tenum, tvv, res);
 
212
                break;
198
213
        case tic_tfun:
199
214
                tdata_item_subst_tfun(ti->u.tfun, tvv, res);
200
215
                break;
312
327
        (*res)->u.tdeleg = tnew;
313
328
}
314
329
 
 
330
/** Substitute type variables in a enum-base type item.
 
331
 *
 
332
 * @param torig Type item to substitute into.
 
333
 * @param tvv   Type variable valuation (values of type variables).
 
334
 * @param res   Place to store pointer to new type item.
 
335
 */
 
336
static void tdata_item_subst_tebase(tdata_ebase_t *tebase,
 
337
    tdata_tvv_t *tvv, tdata_item_t **res)
 
338
{
 
339
        tdata_ebase_t *tnew;
 
340
 
 
341
        (void) tvv;
 
342
 
 
343
        /* Plain copy */
 
344
        tnew = tdata_ebase_new();
 
345
        *res = tdata_item_new(tic_tebase);
 
346
        (*res)->u.tebase = tebase;
 
347
}
 
348
 
 
349
/** Substitute type variables in a enum type item.
 
350
 *
 
351
 * @param torig Type item to substitute into.
 
352
 * @param tvv   Type variable valuation (values of type variables).
 
353
 * @param res   Place to store pointer to new type item.
 
354
 */
 
355
static void tdata_item_subst_tenum(tdata_enum_t *tenum,
 
356
    tdata_tvv_t *tvv, tdata_item_t **res)
 
357
{
 
358
        tdata_enum_t *tnew;
 
359
 
 
360
        (void) tvv;
 
361
 
 
362
        /* Plain copy */
 
363
        tnew = tdata_enum_new();
 
364
        *res = tdata_item_new(tic_tenum);
 
365
        (*res)->u.tenum = tenum;
 
366
}
 
367
 
315
368
/** Substitute type variables in a functional type item.
316
369
 *
317
370
 * @param torig Type item to substitute into.
417
470
        case tic_tdeleg:
418
471
                tdata_tdeleg_print(titem->u.tdeleg);
419
472
                break;
 
473
        case tic_tebase:
 
474
                tdata_tebase_print(titem->u.tebase);
 
475
                break;
 
476
        case tic_tenum:
 
477
                tdata_tenum_print(titem->u.tenum);
 
478
                break;
420
479
        case tic_tfun:
421
480
                tdata_tfun_print(titem->u.tfun);
422
481
                break;
496
555
        symbol_print_fqn(deleg_sym);
497
556
}
498
557
 
 
558
/** Print enum-base type item.
 
559
 *
 
560
 * @param tebase                Enum-base type item
 
561
 */
 
562
static void tdata_tebase_print(tdata_ebase_t *tebase)
 
563
{
 
564
        stree_symbol_t *enum_sym;
 
565
 
 
566
        enum_sym = enum_to_symbol(tebase->enum_d);
 
567
 
 
568
        printf("typeref(");
 
569
        symbol_print_fqn(enum_sym);
 
570
        printf(")");
 
571
}
 
572
 
 
573
/** Print enum type item.
 
574
 *
 
575
 * @param tenum         Enum type item
 
576
 */
 
577
static void tdata_tenum_print(tdata_enum_t *tenum)
 
578
{
 
579
        stree_symbol_t *enum_sym;
 
580
 
 
581
        enum_sym = enum_to_symbol(tenum->enum_d);
 
582
        symbol_print_fqn(enum_sym);
 
583
}
 
584
 
499
585
/** Print function type item.
500
586
 *
501
587
 * @param tfun          Function type item
623
709
        return tdeleg;
624
710
}
625
711
 
 
712
/** Allocate new enum-base type item.
 
713
 *
 
714
 * @return      New enum type item
 
715
 */
 
716
tdata_ebase_t *tdata_ebase_new(void)
 
717
{
 
718
        tdata_ebase_t *tebase;
 
719
 
 
720
        tebase = calloc(1, sizeof(tdata_ebase_t));
 
721
        if (tebase == NULL) {
 
722
                printf("Memory allocation failed.\n");
 
723
                exit(1);
 
724
        }
 
725
 
 
726
        return tebase;
 
727
}
 
728
 
 
729
/** Allocate new enum type item.
 
730
 *
 
731
 * @return      New enum type item
 
732
 */
 
733
tdata_enum_t *tdata_enum_new(void)
 
734
{
 
735
        tdata_enum_t *tenum;
 
736
 
 
737
        tenum = calloc(1, sizeof(tdata_enum_t));
 
738
        if (tenum == NULL) {
 
739
                printf("Memory allocation failed.\n");
 
740
                exit(1);
 
741
        }
 
742
 
 
743
        return tenum;
 
744
}
 
745
 
626
746
/** Allocate new functional type item.
627
747
 *
628
748
 * @return      New function type item
706
826
        return (tdata_item_t *)intmap_get(&tvv->tvv, name);
707
827
}
708
828
 
709
 
/** Set tyoe variable value.
 
829
/** Set type variable value.
710
830
 *
711
831
 * Sets the value of variable with name SID @a name in type variable
712
832
 * valuation @a tvv to the value @a tvalue.