public virtual void EmitPostPublicEventHandlerReturnValueStatements(CodeBuilder b) { if (!PublicReturnType.IsVoid) { b.AppendLine("__retval = {0};", PublicReturnType.PublicUnwrapExpression("e.m_returnValue")); } }
public virtual void EmitPublicCall(CodeBuilder b, string apiClassName, string apiFunctionName) { var apiCall = string.Format("CfxApi.{2}.{0}({1})", apiFunctionName, PublicArgumentList, apiClassName); for (var i = 0; i <= ManagedArguments.Length - 1; i++) { ManagedArguments[i].EmitPrePublicCallStatements(b); } var b1 = new CodeBuilder(b.CurrentIndent); for (var i = 0; i <= ManagedArguments.Length - 1; i++) { ManagedArguments[i].EmitPostPublicStatements(b1); } if (PublicReturnType.IsVoid) { b.AppendLine(apiCall + ";"); b.AppendBuilder(b1); } else { if (b1.IsNotEmpty) { b.AppendLine("var __retval = {0};", apiCall); b.AppendBuilder(b1); b.AppendLine("return {0};", PublicReturnType.PublicReturnExpression("__retval")); } else { b.AppendLine("return {0};", PublicReturnType.PublicReturnExpression(apiCall)); } } }
public virtual void EmitPostPublicEventHandlerReturnValueStatements(CodeBuilder b) { if (!PublicReturnType.IsVoid) { PublicReturnType.EmitSetCallbackReturnValueStatements(b); } }
protected virtual void EmitExecuteInTargetProcess(CodeBuilder b) { switch (Owner.CallMode) { case CfxCallMode.FunctionCall: foreach (var arg in ManagedArguments) { if (!arg.IsThisArgument) { arg.EmitPreProxyCallStatements(b); args.Add(arg.ProxyUnwrapExpression); } } string fCall = null; if (ManagedArguments.Length > 0 && ManagedArguments[0].IsThisArgument) { b.AppendLine("var self_local = ({0})RemoteProxy.Unwrap(self);", ManagedArguments[0].ArgumentType.PublicSymbol); fCall = string.Format("self_local.{0}({1})", Owner.PublicFunctionName, args.Join()); } else { fCall = string.Format("{0}.{1}({2})", Owner.PublicClassName, Owner.PublicFunctionName, args.Join()); } if (!PublicReturnType.IsVoid) { b.AppendLine("__retval = {0};", PublicReturnType.ProxyWrapExpression(fCall)); } else { b.AppendLine(fCall + ";"); } foreach (var arg in ManagedArguments) { if (!arg.IsThisArgument) { arg.EmitPostProxyCallStatements(b); } } break; case CfxCallMode.PropertyGetter: b.AppendLine("var self_local = ({0})RemoteProxy.Unwrap(self);", ManagedArguments[0].ArgumentType.PublicSymbol); b.AppendLine("__retval = {0};", PublicReturnType.ProxyWrapExpression("self_local." + Owner.PropertyName)); break; case CfxCallMode.PropertySetter: b.AppendLine("var self_local = ({0})RemoteProxy.Unwrap(self);", ManagedArguments[0].ArgumentType.PublicSymbol); b.AppendLine("self_local.{0} = {1};", Owner.PropertyName, ManagedArguments[1].ProxyUnwrapExpression); break; } }
protected virtual void EmitExecuteInTargetProcess(CodeBuilder b) { for (var i = 0; i <= ManagedArguments.Length - 1; i++) { ManagedArguments[i].EmitPreProxyCallStatements(b); } var apiCall = string.Format("CfxApi.{2}.{0}({1})", Owner.CfxApiFunctionName, ProxyArgumentList, Owner.PublicClassName.Substring(3)); if (PublicReturnType.IsVoid) { b.AppendLine(apiCall + ";"); } else { b.AppendLine("__retval = {0};", PublicReturnType.ProxyReturnExpression(apiCall)); } for (var i = 0; i <= ManagedArguments.Length - 1; i++) { ManagedArguments[i].EmitPostProxyCallStatements(b); } }
protected virtual void EmitRemoteProcedure(CodeBuilder b, string apiClassName, string apiFunctionName) { for (var i = 0; i <= ManagedParameters.Length - 1; i++) { ManagedParameters[i].EmitRemoteProcedurePreCallStatements(b); } var apiCall = string.Format("CfxApi.{2}.{0}({1})", apiFunctionName, RemoteProcedureCallArgumentList, apiClassName); if (PublicReturnType.IsVoid) { b.AppendLine(apiCall + ";"); } else { b.AppendLine("__retval = {0};", PublicReturnType.RemoteProcedureReturnExpression(apiCall)); } for (var i = 0; i <= ManagedParameters.Length - 1; i++) { ManagedParameters[i].EmitRemoteProcedurePostCallStatements(b); } }
public void EmitRemoteCallClassBody(CodeBuilder b) { b.AppendLine(); foreach (var arg in ManagedArguments) { arg.EmitRemoteCallFields(b); } if (!PublicReturnType.IsVoid) { PublicReturnType.EmitRemoteCallFields(b, "__retval"); } b.AppendLine(); if (ManagedArguments.Length > 0) { b.BeginBlock("protected override void WriteArgs(StreamHandler h)"); foreach (var arg in ManagedArguments) { if (arg.ArgumentType.IsIn) { arg.EmitRemoteWrite(b); } } b.EndBlock(); b.AppendLine(); b.BeginBlock("protected override void ReadArgs(StreamHandler h)"); foreach (var arg in ManagedArguments) { if (arg.ArgumentType.IsIn) { arg.EmitRemoteRead(b); } } b.EndBlock(); b.AppendLine(); } var outArgs = new List <Argument>(); foreach (var arg in ManagedArguments) { if (arg.ArgumentType.IsOut) { outArgs.Add(arg); } else if (arg.ArgumentType.IsStringCollectionType && Owner.CefName.Contains("::get_")) { outArgs.Add(arg); } } if (outArgs.Count > 0 || !PublicReturnType.IsVoid) { b.BeginBlock("protected override void WriteReturn(StreamHandler h)"); foreach (var arg in outArgs) { arg.EmitRemoteWrite(b); } if (!PublicReturnType.IsVoid) { b.AppendLine("h.Write(__retval);", PublicReturnType.PublicSymbol); } b.EndBlock(); b.AppendLine(); b.BeginBlock("protected override void ReadReturn(StreamHandler h)"); foreach (var arg in outArgs) { arg.EmitRemoteRead(b); } if (!PublicReturnType.IsVoid) { b.AppendLine("h.Read(out __retval);", PublicReturnType.PublicSymbol); } b.EndBlock(); b.AppendLine(); } b.BeginBlock("protected override void ExecuteInTargetProcess(RemoteConnection connection)"); EmitExecuteInTargetProcess(b); b.EndBlock(); }
public void EmitRemoteCallClassBody(CodeBuilder b, string apiClassName, string apiFunctionName) { b.AppendLine(); foreach (var arg in ManagedParameters) { arg.EmitRemoteCallFields(b); } if (!PublicReturnType.IsVoid) { PublicReturnType.EmitRemoteCallFields(b, "__retval"); } b.AppendLine(); if (ManagedParameters.Length > 0) { b.BeginBlock("protected override void WriteArgs(StreamHandler h)"); foreach (var arg in ManagedParameters) { if (arg.ParameterType.IsIn) { arg.EmitRemoteWrite(b); } } b.EndBlock(); b.AppendLine(); b.BeginBlock("protected override void ReadArgs(StreamHandler h)"); foreach (var arg in ManagedParameters) { if (arg.ParameterType.IsIn) { arg.EmitRemoteRead(b); } } b.EndBlock(); b.AppendLine(); } var outArgs = new List <Parameter>(); foreach (var arg in ManagedParameters) { if (arg.ParameterType.IsOut) { outArgs.Add(arg); } else if (arg.ParameterType.IsStringCollectionType && arg.ParameterType.AsStringCollectionType.ClassName == "CfxStringList") { outArgs.Add(arg); } } if (outArgs.Count > 0 || !PublicReturnType.IsVoid) { b.BeginBlock("protected override void WriteReturn(StreamHandler h)"); foreach (var arg in outArgs) { arg.EmitRemoteWrite(b); } if (!PublicReturnType.IsVoid) { b.AppendLine("h.Write(__retval);", PublicReturnType.PublicSymbol); } b.EndBlock(); b.AppendLine(); b.BeginBlock("protected override void ReadReturn(StreamHandler h)"); foreach (var arg in outArgs) { arg.EmitRemoteRead(b); } if (!PublicReturnType.IsVoid) { b.AppendLine("h.Read(out __retval);", PublicReturnType.PublicSymbol); } b.EndBlock(); b.AppendLine(); } b.BeginBlock("protected override void RemoteProcedure()"); EmitRemoteProcedure(b, apiClassName, apiFunctionName); b.EndBlock(); }