summaryrefslogtreecommitdiffstats
path: root/tests/run-make-fulldeps/pass-non-c-like-enum-to-c/test.c
blob: 99511b2530f0693979ed0ddaeb0d69e500759452 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdint.h>

/* This is the code generated by cbindgen 0.12.1 for the `enum TT`
 * type in nonclike.rs . */
enum TT_Tag {
  AA,
  BB,
};
typedef uint8_t TT_Tag;

typedef struct {
  uint64_t _0;
  uint64_t _1;
} AA_Body;

typedef struct {
  TT_Tag tag;
  union {
    AA_Body aa;
  };
} TT;

/* This is the code generated by cbindgen 0.12.1 for the `enum T` type
 * in nonclike.rs . */
enum T_Tag {
  A,
  B,
};
typedef uint8_t T_Tag;

typedef struct {
  uint64_t _0;
} A_Body;

typedef struct {
  T_Tag tag;
  union {
    A_Body a;
  };
} T;

uint64_t tt_add(TT a, TT b) {
  if (a.tag == AA && b.tag == AA) {
    return a.aa._0 + a.aa._1 + b.aa._0 + b.aa._1;
  } else if (a.tag == AA) {
    return a.aa._0 + a.aa._1;
  } else if (b.tag == BB) {
    return b.aa._0 + b.aa._1;
  } else {
    return 0;
  }
}

uint64_t t_add(T a, T b) {
  if (a.tag == A && b.tag == A) {
    return a.a._0 + b.a._0;
  } else if (a.tag == AA) {
    return a.a._0;
  } else if (b.tag == BB) {
    return b.a._0;
  } else {
    return 0;
  }
}

TT tt_new(uint64_t a, uint64_t b) {
  TT tt = {
    .tag = AA,
    .aa = {
      ._0 = a,
      ._1 = b,
    },
  };
  return tt;
}

T t_new(uint64_t a) {
  T t = {
    .tag = A,
    .a = {
      ._0 = a,
    },
  };
  return t;
}