C import: unions (SDL_Event) and their fields; #defines that are expressions, casts or text; typedef'd structs no function mentions; FLAG_A | FLAG_B fits a u64

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Nexoniarz 2026-10-29 09:23:29 +01:00
commit d0666cf788
7 changed files with 314 additions and 13 deletions

30
tests/new/cunion.h Normal file
View file

@ -0,0 +1,30 @@
// C unions and #define constants that are expressions (tests/new/c_unions_macros.fch)
#include <stdint.h>
typedef struct { uint32_t type; float x, y; } Motion;
typedef struct { uint32_t type; int32_t key; } Key;
typedef union {
uint32_t type;
Motion motion;
Key key;
uint8_t padding[64];
} Event;
typedef struct { int kind; union { int i; float f; } as; } Tagged;
#define EV_MOTION 0x400u
#define EV_KEY (EV_MOTION + 1)
#define FLAG_BIG ((uint64_t)1 << 40)
#define FLAG_GL 0x2ULL
#define FLAGS_BOTH (FLAG_BIG | FLAG_GL)
#define HALF (1.0 / 2)
#define GREETING "hi\tthere"
#define LONG_NAME "a" "b"
#define NOT_A_CONSTANT do { } while (0)
static inline int fill_key(Event *e, int key) {
e->key.type = EV_KEY;
e->key.key = key;
return 1;
}
int poll_event(Event *e);