Przeglądaj źródła

HPCC-20579 OSX error compiling nestedif.ecl

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 6 lat temu
rodzic
commit
0839e1d4ca
3 zmienionych plików z 14 dodań i 8 usunięć
  1. 11 6
      ecl/hqlcpp/hqlhtcpp.cpp
  2. 2 1
      ecl/hqlcpp/hqlhtcpp.ipp
  3. 1 1
      ecl/hqlcpp/hqlsource.cpp

+ 11 - 6
ecl/hqlcpp/hqlhtcpp.cpp

@@ -2906,8 +2906,8 @@ void initBoundStringTarget(CHqlBoundTarget & target, ITypeInfo * type, const cha
 
 
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 
 
-GlobalClassBuilder::GlobalClassBuilder(HqlCppTranslator & _translator, BuildCtx & _ctx, const char * _className, const char * _baseName, const char * _accessorInterface, bool _hasCodeContext)
-: translator(_translator), classctx(_ctx), nestedctx(_ctx), startctx(_ctx), createctx(_ctx), hasCodeContext(_hasCodeContext)
+GlobalClassBuilder::GlobalClassBuilder(HqlCppTranslator & _translator, BuildCtx & _ctx, const char * _className, const char * _baseName, const char * _accessorInterface, bool _hasCodeContext, bool _createIsVirtual)
+: translator(_translator), classctx(_ctx), nestedctx(_ctx), startctx(_ctx), createctx(_ctx), hasCodeContext(_hasCodeContext), createIsVirtual(_createIsVirtual)
 {
 {
     className.set(_className);
     className.set(_className);
     baseName.set(_baseName);
     baseName.set(_baseName);
@@ -2954,9 +2954,14 @@ void GlobalClassBuilder::buildClass(unsigned priority)
     BuildCtx oncreatectx(createctx);
     BuildCtx oncreatectx(createctx);
     if (hasCodeContext)
     if (hasCodeContext)
     {
     {
-        onCreateStmt = oncreatectx.addQuotedCompoundLiteral("void onCreate(ICodeContext * _ctx)");
+        if (createIsVirtual)
+            onCreateStmt = oncreatectx.addQuotedCompoundLiteral("virtual void onCreate(ICodeContext * _ctx) override");
+        else
+            onCreateStmt = oncreatectx.addQuotedCompoundLiteral("void onCreate(ICodeContext * _ctx)");
         oncreatectx.addQuotedLiteral("ctx = _ctx;");
         oncreatectx.addQuotedLiteral("ctx = _ctx;");
     }
     }
+    else if (createIsVirtual)
+        onCreateStmt = oncreatectx.addQuotedCompoundLiteral("virtual void onCreate() override");
     else
     else
         onCreateStmt = oncreatectx.addQuotedCompoundLiteral("void onCreate()");
         onCreateStmt = oncreatectx.addQuotedCompoundLiteral("void onCreate()");
 
 
@@ -3527,7 +3532,7 @@ IHqlExpression * HqlCppTranslator::createRowAllocator(BuildCtx & ctx, IHqlExpres
 void HqlCppTranslator::buildMetaSerializerClass(BuildCtx & ctx, IHqlExpression * record, const char * serializerName, IAtom * serializeForm)
 void HqlCppTranslator::buildMetaSerializerClass(BuildCtx & ctx, IHqlExpression * record, const char * serializerName, IAtom * serializeForm)
 {
 {
     StringBuffer s;
     StringBuffer s;
-    GlobalClassBuilder serializer(*this, ctx, serializerName, "COutputRowSerializer", "IOutputRowSerializer", true);    // not sure this needs ctx or an activity id
+    GlobalClassBuilder serializer(*this, ctx, serializerName, "COutputRowSerializer", "IOutputRowSerializer", true, false);    // not sure this needs ctx or an activity id
 
 
     serializer.buildClass(RowMetaPrio);
     serializer.buildClass(RowMetaPrio);
     serializer.setIncomplete(true);
     serializer.setIncomplete(true);
@@ -3570,7 +3575,7 @@ void HqlCppTranslator::buildMetaSerializerClass(BuildCtx & ctx, IHqlExpression *
 void HqlCppTranslator::buildMetaDeserializerClass(BuildCtx & ctx, IHqlExpression * record, const char * deserializerName, IAtom * serializeForm)
 void HqlCppTranslator::buildMetaDeserializerClass(BuildCtx & ctx, IHqlExpression * record, const char * deserializerName, IAtom * serializeForm)
 {
 {
     StringBuffer s;
     StringBuffer s;
-    GlobalClassBuilder deserializer(*this, ctx, deserializerName, "COutputRowDeserializer", "IOutputRowDeserializer", true);
+    GlobalClassBuilder deserializer(*this, ctx, deserializerName, "COutputRowDeserializer", "IOutputRowDeserializer", true, false);
 
 
     deserializer.buildClass(RowMetaPrio);
     deserializer.buildClass(RowMetaPrio);
     deserializer.setIncomplete(true);
     deserializer.setIncomplete(true);
@@ -3601,7 +3606,7 @@ void HqlCppTranslator::buildMetaDeserializerClass(BuildCtx & ctx, IHqlExpression
 bool HqlCppTranslator::buildMetaPrefetcherClass(BuildCtx & ctx, IHqlExpression * record, const char * prefetcherName)
 bool HqlCppTranslator::buildMetaPrefetcherClass(BuildCtx & ctx, IHqlExpression * record, const char * prefetcherName)
 {
 {
     StringBuffer s;
     StringBuffer s;
-    GlobalClassBuilder prefetcher(*this, ctx, prefetcherName, "CSourceRowPrefetcher", NULL, false);
+    GlobalClassBuilder prefetcher(*this, ctx, prefetcherName, "CSourceRowPrefetcher", NULL, false, true);
 
 
     prefetcher.buildClass(RowMetaPrio);
     prefetcher.buildClass(RowMetaPrio);
     prefetcher.setIncomplete(true);
     prefetcher.setIncomplete(true);

+ 2 - 1
ecl/hqlcpp/hqlhtcpp.ipp

@@ -90,7 +90,7 @@ class GlobalClassEvalContext;
 class GlobalClassBuilder
 class GlobalClassBuilder
 {
 {
 public:
 public:
-    GlobalClassBuilder(HqlCppTranslator & _translator, BuildCtx & ctx, const char * className, const char * baseName, const char * _accessorInterface, bool _hasCodeContext);
+    GlobalClassBuilder(HqlCppTranslator & _translator, BuildCtx & ctx, const char * className, const char * baseName, const char * _accessorInterface, bool _hasCodeContext, bool _createIsVirtual);
 
 
     void buildClass(unsigned priority=0);
     void buildClass(unsigned priority=0);
     void completeClass(unsigned priority=0);
     void completeClass(unsigned priority=0);
@@ -115,6 +115,7 @@ public:
     StringAttr accessorInterface;
     StringAttr accessorInterface;
     StringAttr accessorName;
     StringAttr accessorName;
     bool hasCodeContext;
     bool hasCodeContext;
+    bool createIsVirtual = false;
 };
 };
 
 
 
 

+ 1 - 1
ecl/hqlcpp/hqlsource.cpp

@@ -4535,7 +4535,7 @@ void HqlCppTranslator::buildXmlReadTransform(IHqlExpression * dataset, StringBuf
     prolog.append("struct ").append(className).append(" : public RtlCInterface, implements ").append(interfaceName);
     prolog.append("struct ").append(className).append(" : public RtlCInterface, implements ").append(interfaceName);
     epilog.append(";");
     epilog.append(";");
 
 
-    GlobalClassBuilder builder(*this, declarectx, className, "CXmlToRowTransformer", interfaceName, true);
+    GlobalClassBuilder builder(*this, declarectx, className, "CXmlToRowTransformer", interfaceName, true, false);
     builder.buildClass(XmlTransformerPrio);
     builder.buildClass(XmlTransformerPrio);
     builder.setIncomplete(true);
     builder.setIncomplete(true);