private void GenerateDelegateSender(Delegate dlg, CodeWriter cw) { var param = string.Join(", ", dlg.Parametrs.Select(x => x.GetTypeCppOgiginal())); var signature = string.Join(", ", dlg.Parametrs.Select(GetTypeForManageInvoke)); if (signature.Any()) { signature = $"<{signature}>"; } var call = string.Join(", ", Enumerable.Range(0, dlg.Parametrs.Count).Select(i => "_p" + i)); if (call.Any()) { call = ", " + call; } cw.WriteLine($"UFUNCTION()"); cw.WriteLine($"void Wrapper_{dlg.Name}({param})"); cw.OpenBlock(); for (var i = 0; i < dlg.Parametrs.Count; i++) { var m = dlg.Parametrs[i]; cw.WriteLine($"auto _p{i} = {GenerateGetForManageInvoke(m)};"); } cw.WriteLine($"UCoreShell::InvokeEventInObject{signature}(SourceObject, ManageDelegateName{call});"); cw.CloseBlock(); cw.WriteLine(); }
public override object VisitUDefine(UDefineContext context) { if (_ignoreOfPragma) { return(null); } var name = context.uDefineName().GetText(); if (name.StartsWith("DECLARE_DYNAMIC_MULTICAST_DELEGATE")) { var ls = context.uMeta().uMetaParametrList(); _currentDelegate = Get <Delegate>(ls.uMetaParametr().uMetaParamKey().type()); _currentDelegate.SourceFile = _currentFile; _currentDelegate.SourceLine = context.Start.Line; _currentDelegate.IsImplemented = true; _currentDelegate.IsTemplate = context.FoundChild <TemplateDefineContext>(); _currentDelegate.Description = _currentComment; _currentDelegateVariable = null; _currentUMeta = new Dictionary <string, string>(); if (ls.uMetaParametrList() != null) { VisitChildren(ls.uMetaParametrList()); } _currentDelegate = null; _currentUMeta = null; _currentComment = ""; } return(base.VisitUDefine(context)); }
private void GenerateDelegate(CodeWriter cw, Delegate dlg) { GenerateSummaty(cw, dlg); GenerateSourceInfo(cw, dlg); var param = string.Join(", ", dlg.Parametrs.Select(m => ExportVariable(m, false))); cw.Write($"public delegate void {dlg.Name}({param});"); cw.WriteLine(); }
public void Append(TranslationUnitContext translationunit, string file) { _preprocessorIfCount = 0; _ignoreOfAccessModifier = false; _ignoreOfPragma = false; _currentComment = ""; _currentFile = file; _currentDelegateVariable = null; _currentDelegate = null; _currentClass = null; _currentEnum = null; Visit(translationunit); }