RNA: Fix compile error when assigning to a typed enum in C++ #109136

Merged
Julian Eisel merged 2 commits from JulianEisel/blender:temp-makesrna-setter-cast into main 2023-06-20 11:30:32 +02:00

2 Commits

Author SHA1 Message Date
Julian Eisel 5be805f9f0 Use `decltype()` instead of `typeof()`
buildbot/vexp-code-patch-coordinator Build done. Details
2023-06-19 21:00:41 +02:00
Julian Eisel 14599f0258 RNA: Fix compile error when assigning to a typed enum in C++
buildbot/vexp-code-patch-coordinator Build done. Details
When a RNA file was compiled in C++, building would fail when defining a
RNA enum property that assigns to a enum value with a defined (i.e.
non-integer) type.

----

For example, #104831 contains the following in a non-DNA header:
```
typedef struct AssetShelfType {
  /*...*/
    AssetShelfTypeFlag flag;
  /*...*/
} AssetShelfType;
```

And a RNA definition like this:
```
prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type->flag");
/*...*/
```

There's no custom setter callback defined so it would be generated by
`makesrna`. It would be generated as `data->type->flag = value;` whereby
`value` is of type `int`, which doesn't work in C++. The integer value
needs to be cast to the enum type.
2023-06-19 19:41:01 +02:00