vitorsousa pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=c3ed0791a6c07773e90ff38149838bdc818ba292
commit c3ed0791a6c07773e90ff38149838bdc818ba292 Author: Lauro Moura <lauromo...@expertisesolutions.com.br> Date: Thu Feb 28 17:15:48 2019 -0300 efl-csharp: Fix variable generation for Roslyn Summary: Mono's old compiler (mcs) accepts LL as suffix for longs while Roslyn (csc) is strict, allowing only a single L. Test Plan: Run tests Reviewers: vitor.sousa, felipealmeida Reviewed By: vitor.sousa Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D8061 --- src/bin/eolian_mono/eolian/mono/utils.hh | 8 ++++++++ src/bin/eolian_mono/eolian/mono/variable_definition.hh | 6 ++++++ src/tests/efl_mono/Eo.cs | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/bin/eolian_mono/eolian/mono/utils.hh b/src/bin/eolian_mono/eolian/mono/utils.hh index 0912db8a71..cbea48afa3 100644 --- a/src/bin/eolian_mono/eolian/mono/utils.hh +++ b/src/bin/eolian_mono/eolian/mono/utils.hh @@ -70,6 +70,14 @@ namespace eolian_mono { namespace utils { name.erase(std::remove(name.begin(), name.end(), target), name.end()); return name; } + + inline bool ends_with(std::string const& source, std::string suffix) + { + if (source.size() > suffix.size()) + return (0 == source.compare(source.size() - suffix.size(), suffix.size(), suffix)); + else + return false; + } } } #endif diff --git a/src/bin/eolian_mono/eolian/mono/variable_definition.hh b/src/bin/eolian_mono/eolian/mono/variable_definition.hh index 2a0eac30d6..d143d7e138 100644 --- a/src/bin/eolian_mono/eolian/mono/variable_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/variable_definition.hh @@ -47,8 +47,14 @@ struct constant_definition_generator auto lit = ::eolian_expression_value_to_literal(&constant.expression_value); if (!lit) return false; + literal = lit; ::eina_stringshare_del(lit); + + // Cleanup suffix. Roslyn does not accept ULL/LL as it has only longs. + if (utils::ends_with(literal, "LL") || utils::ends_with(literal, "ll")) + literal = literal.substr(0, literal.size() -1); + } // declare variable diff --git a/src/tests/efl_mono/Eo.cs b/src/tests/efl_mono/Eo.cs index 3e7f662151..9da7752e4b 100644 --- a/src/tests/efl_mono/Eo.cs +++ b/src/tests/efl_mono/Eo.cs @@ -199,8 +199,8 @@ class TestVariables Test.AssertEquals(Dummy.Constants.ConstvarUInt, 65533U); Test.AssertEquals(Dummy.Constants.ConstvarLong, -2147483644L); Test.AssertEquals(Dummy.Constants.ConstvarULong, 4294967288UL); - //Test.AssertEquals(Dummy.Constants.ConstvarLLong, -9223372036854775800); // TODO - //Test.AssertEquals(Dummy.Constants.ConstvarULLong, 18446744073709551615); + Test.AssertEquals(Dummy.Constants.ConstvarLLong, -9223372036854775800); + Test.AssertEquals(Dummy.Constants.ConstvarULLong, 18446744073709551615); Test.AssertEquals(Dummy.Constants.ConstvarFloat, 16777211.0f); Test.AssertEquals(Dummy.Constants.ConstvarDouble, 9007199254740988.0); Test.AssertEquals(Dummy.Constants.ConstvarChar, '!'); --