diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-01-06 17:07:03 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-01-06 17:07:03 -0800 |
commit | 5557409855d6c4a744f69e43891e7bd8902808d6 (patch) | |
tree | 673e74a34675f80d8bf66317f590d9abc653bbdb | |
parent | 23ee96ab9b7dcb9a0e2bbfdf36594a846c64b48f (diff) | |
parent | 355082514bc071c0b94fc83a351f3907b2a428ab (diff) |
Merge pull request #164 from FishingCactus/static_variable
Fix handling of static variable inside function
-rw-r--r-- | src/library.js | 8 | ||||
-rw-r--r-- | tests/runner.py | 29 |
2 files changed, 33 insertions, 4 deletions
diff --git a/src/library.js b/src/library.js index 7c7d9576..53a572c9 100644 --- a/src/library.js +++ b/src/library.js @@ -4196,11 +4196,11 @@ LibraryManager.library = { throw 'Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [Pointer_stringify(filename), line, Pointer_stringify(func)]; }, - __cxa_guard_acquire: function() { - return 1; + __cxa_guard_acquire: function(variable) { + return !{{{ makeGetValue(0, 'variable', 'i8') }}} }, - __cxa_guard_release: function() { - return 1; + __cxa_guard_release: function(variable) { + {{{ makeSetValue(0, 'variable', '1', 'i8') }}} }, _ZTVN10__cxxabiv117__class_type_infoE: [1], // no inherited classes diff --git a/tests/runner.py b/tests/runner.py index 07d55650..58e82c6b 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -3804,6 +3804,35 @@ def process(filename): return 1; } ''', 'hello world', includes=[path_from_root('tests', 'libcxx', 'include')]); + + def test_static_variable(self): + src = ''' + #include <stdio.h> + + struct DATA + { + int value; + + DATA() + { + value = 0; + } + }; + + DATA & GetData() + { + static DATA data; + + return data; + } + + int main() + { + GetData().value = 10; + printf( "value:%i", GetData().value ); + } + ''' + self.do_run(src, 'value:10') def test_cubescript(self): if self.emcc_args is not None and '-O2' in self.emcc_args: |