From befc9bc1f07be3b9ba83001b331cfac8315ebc20 Mon Sep 17 00:00:00 2001 From: Seth R Johnson Date: Tue, 23 Apr 2019 19:26:53 -0400 Subject: [PATCH] Mark 'externc' storage for variables --- Examples/test-suite/extern_c.i | 10 ++++++++++ Examples/test-suite/python/extern_c_runme.py | 3 +++ Source/CParse/parser.y | 3 +-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Examples/test-suite/extern_c.i b/Examples/test-suite/extern_c.i index e56d9f128..78c9d1061 100644 --- a/Examples/test-suite/extern_c.i +++ b/Examples/test-suite/extern_c.i @@ -5,6 +5,7 @@ extern "C" { void RealFunction(int value); typedef void Function1(int value); // Fails typedef int Integer1; +int Integer3; } typedef void Function2(int value); // Works typedef int Integer2; @@ -27,5 +28,14 @@ Hook2_t hook2; extern "C" typedef int Integer; Integer int1; +extern "C" int int2; +extern "C" { extern int int3; } +extern "C" { int int4 = 789; } %} +%{ +extern "C" { + int int2 = 123; + int int3 = 456; +} +%} diff --git a/Examples/test-suite/python/extern_c_runme.py b/Examples/test-suite/python/extern_c_runme.py index 91a218a87..5bc4bae89 100644 --- a/Examples/test-suite/python/extern_c_runme.py +++ b/Examples/test-suite/python/extern_c_runme.py @@ -1,3 +1,6 @@ import extern_c extern_c.RealFunction(2) +assert extern_c.cvar.int2 == 123 +assert extern_c.cvar.int3 == 456 +assert extern_c.cvar.int4 == 789 diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y index 87f2a7c44..beb326646 100644 --- a/Source/CParse/parser.y +++ b/Source/CParse/parser.y @@ -3133,8 +3133,7 @@ c_declaration : c_decl { Setattr($$,"name",$2); appendChild($$,n); while (n) { - SwigType *decl = Getattr(n,"decl"); - if (SwigType_isfunction(decl) && !Equal(Getattr(n, "storage"), "typedef")) { + if (!Equal(Getattr(n, "storage"), "typedef")) { Setattr(n,"storage","externc"); } n = nextSibling(n);