From 7e0b5ccf44537ad9c0d9af8d3e65d740fc24a04b Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Sat, 5 Mar 2016 19:34:38 +0300 Subject: [PATCH] C# "override" fix for "extend" case --- Source/Modules/csharp.cxx | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx index ab64a4dd0..343608343 100644 --- a/Source/Modules/csharp.cxx +++ b/Source/Modules/csharp.cxx @@ -2415,15 +2415,19 @@ public: if (!is_smart_pointer()) { // Smart pointer classes do not mirror the inheritance hierarchy of the underlying pointer type, so no virtual/override/new required. if (Node *base_ovr = Getattr(n, "override")) { - Node* base = parentNode(base_ovr); - bool ovr = false; - for (Node* direct_base = Getattr(parentNode(n), "direct_base"); direct_base; direct_base = Getattr(direct_base, "direct_base")) { - if (direct_base == base) { // "override" only applies if the base was not discarded (e.g. in case of multiple inheritance or via "ignore") - ovr = true; - break; + if (GetFlag(n, "isextendmember")) + Printf(function_code, "override "); + else { + Node* base = parentNode(base_ovr); + bool ovr = false; + for (Node* direct_base = Getattr(parentNode(n), "direct_base"); direct_base; direct_base = Getattr(direct_base, "direct_base")) { + if (direct_base == base) { // "override" only applies if the base was not discarded (e.g. in case of multiple inheritance or via "ignore") + ovr = true; + break; + } } + Printf(function_code, ovr ? "override " : "virtual "); } - Printf(function_code, ovr ? "override " : "virtual "); } else if (checkAttribute(n, "storage", "virtual")) Printf(function_code, "virtual ");