Skip to content

Commit 307d1e9

Browse files
committed
constant: Handle cfg in associated constants.
Fixes https://bugzilla.mozilla.org/show_bug.cgi?id=1992968
1 parent 156d3f3 commit 307d1e9

12 files changed

+143
-1
lines changed

src/bindgen/ir/constant.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,13 +636,16 @@ impl Constant {
636636
debug_assert!(config.structure.associated_constants_in_body);
637637
debug_assert!(config.constant.allow_static_const);
638638

639+
let condition = self.cfg.to_condition(config);
640+
condition.write_before(config, out);
639641
if let Type::Ptr { is_const: true, .. } = self.ty {
640642
out.write("static ");
641643
} else {
642644
out.write("static const ");
643645
}
644646
language_backend.write_type(out, &self.ty);
645-
write!(out, " {};", self.export_name())
647+
write!(out, " {};", self.export_name());
648+
condition.write_after(config, out);
646649
}
647650

648651
pub fn write<F: Write, LB: LanguageBackend>(

tests/expectations/associated_in_body.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
#include <stdarg.h>
29
#include <stdbool.h>
310
#include <stdint.h>
@@ -34,6 +41,12 @@ typedef struct {
3441
#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
3542
#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
3643
#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
44+
#if defined(PLATFORM_WIN)
45+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 6) }
46+
#endif
47+
#if defined(PLATFORM_UNIX)
48+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 7) }
49+
#endif
3750

3851
/**
3952
* An arbitrary identifier for a native (OS compositor) surface

tests/expectations/associated_in_body.compat.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
#include <stdarg.h>
29
#include <stdbool.h>
310
#include <stdint.h>
@@ -34,6 +41,12 @@ typedef struct {
3441
#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
3542
#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
3643
#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
44+
#if defined(PLATFORM_WIN)
45+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 6) }
46+
#endif
47+
#if defined(PLATFORM_UNIX)
48+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 7) }
49+
#endif
3750

3851
/**
3952
* An arbitrary identifier for a native (OS compositor) surface

tests/expectations/associated_in_body.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
#include <cstdarg>
29
#include <cstdint>
310
#include <cstdlib>
@@ -45,6 +52,12 @@ struct StyleAlignFlags {
4552
static const StyleAlignFlags FLEX_START;
4653
static const StyleAlignFlags MIXED;
4754
static const StyleAlignFlags MIXED_SELF;
55+
#if defined(PLATFORM_WIN)
56+
static const StyleAlignFlags PLATFORM_BIT;
57+
#endif
58+
#if defined(PLATFORM_UNIX)
59+
static const StyleAlignFlags PLATFORM_BIT;
60+
#endif
4861
};
4962
/// 'auto'
5063
constexpr inline const StyleAlignFlags StyleAlignFlags::AUTO = StyleAlignFlags{
@@ -75,6 +88,16 @@ constexpr inline const StyleAlignFlags StyleAlignFlags::MIXED = StyleAlignFlags{
7588
constexpr inline const StyleAlignFlags StyleAlignFlags::MIXED_SELF = StyleAlignFlags{
7689
/* .bits = */ (uint8_t)(((1 << 5) | (StyleAlignFlags::FLEX_START).bits) | (StyleAlignFlags::END).bits)
7790
};
91+
#if defined(PLATFORM_WIN)
92+
constexpr inline const StyleAlignFlags StyleAlignFlags::PLATFORM_BIT = StyleAlignFlags{
93+
/* .bits = */ (uint8_t)(1 << 6)
94+
};
95+
#endif
96+
#if defined(PLATFORM_UNIX)
97+
constexpr inline const StyleAlignFlags StyleAlignFlags::PLATFORM_BIT = StyleAlignFlags{
98+
/* .bits = */ (uint8_t)(1 << 7)
99+
};
100+
#endif
78101

79102
/// An arbitrary identifier for a native (OS compositor) surface
80103
struct StyleNativeSurfaceId {

tests/expectations/associated_in_body.pyx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
29
from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
310
cdef extern from *:
@@ -24,6 +31,10 @@ cdef extern from *:
2431
const StyleAlignFlags StyleAlignFlags_FLEX_START # = <StyleAlignFlags>{ <uint8_t>(1 << 3) }
2532
const StyleAlignFlags StyleAlignFlags_MIXED # = <StyleAlignFlags>{ <uint8_t>(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
2633
const StyleAlignFlags StyleAlignFlags_MIXED_SELF # = <StyleAlignFlags>{ <uint8_t>(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
34+
IF PLATFORM_WIN:
35+
const StyleAlignFlags StyleAlignFlags_PLATFORM_BIT # = <StyleAlignFlags>{ <uint8_t>(1 << 6) }
36+
IF PLATFORM_UNIX:
37+
const StyleAlignFlags StyleAlignFlags_PLATFORM_BIT # = <StyleAlignFlags>{ <uint8_t>(1 << 7) }
2738

2839
# An arbitrary identifier for a native (OS compositor) surface
2940
ctypedef struct StyleNativeSurfaceId:

tests/expectations/associated_in_body_both.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
#include <stdarg.h>
29
#include <stdbool.h>
310
#include <stdint.h>
@@ -34,6 +41,12 @@ typedef struct StyleAlignFlags {
3441
#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
3542
#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
3643
#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
44+
#if defined(PLATFORM_WIN)
45+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 6) }
46+
#endif
47+
#if defined(PLATFORM_UNIX)
48+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 7) }
49+
#endif
3750

3851
/**
3952
* An arbitrary identifier for a native (OS compositor) surface

tests/expectations/associated_in_body_both.compat.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
#include <stdarg.h>
29
#include <stdbool.h>
310
#include <stdint.h>
@@ -34,6 +41,12 @@ typedef struct StyleAlignFlags {
3441
#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
3542
#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
3643
#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
44+
#if defined(PLATFORM_WIN)
45+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 6) }
46+
#endif
47+
#if defined(PLATFORM_UNIX)
48+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 7) }
49+
#endif
3750

3851
/**
3952
* An arbitrary identifier for a native (OS compositor) surface

tests/expectations/associated_in_body_tag.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
#include <stdarg.h>
29
#include <stdbool.h>
310
#include <stdint.h>
@@ -34,6 +41,12 @@ struct StyleAlignFlags {
3441
#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
3542
#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
3643
#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
44+
#if defined(PLATFORM_WIN)
45+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 6) }
46+
#endif
47+
#if defined(PLATFORM_UNIX)
48+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 7) }
49+
#endif
3750

3851
/**
3952
* An arbitrary identifier for a native (OS compositor) surface

tests/expectations/associated_in_body_tag.compat.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
#include <stdarg.h>
29
#include <stdbool.h>
310
#include <stdint.h>
@@ -34,6 +41,12 @@ struct StyleAlignFlags {
3441
#define StyleAlignFlags_FLEX_START (StyleAlignFlags){ .bits = (uint8_t)(1 << 3) }
3542
#define StyleAlignFlags_MIXED (StyleAlignFlags){ .bits = (uint8_t)(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
3643
#define StyleAlignFlags_MIXED_SELF (StyleAlignFlags){ .bits = (uint8_t)(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
44+
#if defined(PLATFORM_WIN)
45+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 6) }
46+
#endif
47+
#if defined(PLATFORM_UNIX)
48+
#define StyleAlignFlags_PLATFORM_BIT (StyleAlignFlags){ .bits = (uint8_t)(1 << 7) }
49+
#endif
3750

3851
/**
3952
* An arbitrary identifier for a native (OS compositor) surface

tests/expectations/associated_in_body_tag.pyx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
#if 0
2+
DEF PLATFORM_UNIX = 0
3+
DEF PLATFORM_WIN = 0
4+
#endif
5+
#define PLATFORM_UNIX 1
6+
7+
18
from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
29
from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
310
cdef extern from *:
@@ -24,6 +31,10 @@ cdef extern from *:
2431
const StyleAlignFlags StyleAlignFlags_FLEX_START # = <StyleAlignFlags>{ <uint8_t>(1 << 3) }
2532
const StyleAlignFlags StyleAlignFlags_MIXED # = <StyleAlignFlags>{ <uint8_t>(((1 << 4) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
2633
const StyleAlignFlags StyleAlignFlags_MIXED_SELF # = <StyleAlignFlags>{ <uint8_t>(((1 << 5) | (StyleAlignFlags_FLEX_START).bits) | (StyleAlignFlags_END).bits) }
34+
IF PLATFORM_WIN:
35+
const StyleAlignFlags StyleAlignFlags_PLATFORM_BIT # = <StyleAlignFlags>{ <uint8_t>(1 << 6) }
36+
IF PLATFORM_UNIX:
37+
const StyleAlignFlags StyleAlignFlags_PLATFORM_BIT # = <StyleAlignFlags>{ <uint8_t>(1 << 7) }
2738

2839
# An arbitrary identifier for a native (OS compositor) surface
2940
cdef struct StyleNativeSurfaceId:

0 commit comments

Comments
 (0)