Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-02-12 03:43:33 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-02-16 01:32:29 +0300
commita2f345468c94e4b8a842ba9a9988237cd5c8194f (patch)
treeb896eed5a54fa6063afe6e467876d47080d0349e /source/blender/makesrna/intern/rna_define.c
parentbc657ef16eed438a1eb5156e5b46173044905dcc (diff)
DNA: support DNA type & name aliases
This allows us to rename struct & struct members in the source code without changing the file format. This is useful because the code becomes increasingly confusing when names such as oops, ipo & dupli aren't used anywhere except DNA headers. dna_rename_defs.h is used to define renaming operations. The renaming it's self will be done separately.
Diffstat (limited to 'source/blender/makesrna/intern/rna_define.c')
-rw-r--r--source/blender/makesrna/intern/rna_define.c49
1 files changed, 43 insertions, 6 deletions
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index 5c44e9b24d9..60623a09737 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -58,6 +58,12 @@
BlenderDefRNA DefRNA = {NULL, {NULL, NULL}, {NULL, NULL}, NULL, 0, 0, 0, 1, 1};
+#ifndef RNA_RUNTIME
+static struct {
+ GHash *struct_map_static_from_alias;
+} g_version_data;
+#endif
+
/* Duplicated code since we can't link in blenkernel or blenlib */
/* pedantic check for final '.', note '...' are allowed though. */
@@ -354,7 +360,23 @@ static int rna_find_sdna_member(SDNA *sdna, const char *structname, const char *
const short *sp;
int a, b, structnr, totmember, cmp;
- structnr = DNA_struct_find_nr(sdna, structname);
+ if (!DefRNA.preprocess) {
+ fprintf(stderr, "%s: only during preprocessing.\n", __func__);
+ return 0;
+ }
+
+#ifndef RNA_RUNTIME
+ {
+ const char *structname_maybe_static = BLI_ghash_lookup_default(
+ g_version_data.struct_map_static_from_alias, structname, (void *)structname);
+ structnr = DNA_struct_find_nr(sdna, structname_maybe_static);
+ }
+#else
+ /* Quiet warning only, this is only for the proprocessor. */
+ BLI_assert(0);
+ structnr = -1;
+#endif
+
if (structnr == -1)
return 0;
@@ -363,12 +385,11 @@ static int rna_find_sdna_member(SDNA *sdna, const char *structname, const char *
sp += 2;
for (a = 0; a < totmember; a++, sp += 2) {
- dnaname = sdna->names[sp[1]];
-
+ dnaname = sdna->alias.names[sp[1]];
cmp = rna_member_cmp(dnaname, membername);
if (cmp == 1) {
- smember->type = sdna->types[sp[0]];
+ smember->type = sdna->alias.types[sp[0]];
smember->name = dnaname;
if (strstr(membername, "["))
@@ -389,7 +410,7 @@ static int rna_find_sdna_member(SDNA *sdna, const char *structname, const char *
smember->arraylength = 0;
membername = strstr(membername, ".") + strlen(".");
- rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+ rna_find_sdna_member(sdna, sdna->alias.types[sp[0]], membername, smember);
return 1;
}
@@ -400,7 +421,7 @@ static int rna_find_sdna_member(SDNA *sdna, const char *structname, const char *
smember->arraylength = 0;
membername = strstr(membername, "->") + strlen("->");
- rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+ rna_find_sdna_member(sdna, sdna->alias.types[sp[0]], membername, smember);
return 1;
}
@@ -572,6 +593,16 @@ BlenderRNA *RNA_create(void)
DefRNA.error = 1;
}
+ /* We need both alias and static (on-disk) DNA names. */
+ DNA_sdna_alias_data_ensure(DefRNA.sdna);
+
+#ifndef RNA_RUNTIME
+ DNA_alias_maps(
+ DNA_RENAME_STATIC_FROM_ALIAS,
+ &g_version_data.struct_map_static_from_alias,
+ NULL);
+#endif
+
return brna;
}
@@ -705,6 +736,12 @@ void RNA_free(BlenderRNA *brna)
RNA_struct_free(brna, srna);
}
}
+
+#ifndef RNA_RUNTIME
+ BLI_ghash_free(g_version_data.struct_map_static_from_alias, NULL, NULL);
+ g_version_data.struct_map_static_from_alias = NULL;
+#endif
+
}
static size_t rna_property_type_sizeof(PropertyType type)