public SerializableFLProgram Process(FLParserInput input) { return((SerializableFLProgram)Process((object)input)); }
public override object Process(object o) { SerializableFLProgram input = (SerializableFLProgram)o; Dictionary <string, SerializableFLFunction> staticFunctions = new Dictionary <string, SerializableFLFunction>(); for (int i = input.Functions.Count - 1; i >= 0; i--) { SerializableFLFunction staticFunction = input.Functions[i]; if (!staticFunction.Modifiers.IsStatic || staticFunction.Name == FLKeywords.EntryFunctionKey) { continue; } string funcName = "_ext_" + staticFunction.Name; staticFunctions.Add(funcName, staticFunction); input.Functions.RemoveAt(i); List <string> source = staticFunction.Instructions.Select(x => x.ToString()).ToList(); source.Insert(0, FLKeywords.EntryFunctionKey + ":"); FLParserInput pi = new FLParserInput( "Exported Function: " + staticFunction .Name, source.ToArray(), false ); pi.KernelData = new List <EmbeddedKernelData>(input.KernelData); SerializableFLProgram ext = (SerializableFLProgram)Target.Process(pi); List <string> mods = new List <string> { FLKeywords.NoJumpKeyword }; if (staticFunction.Modifiers.ComputeOnce) { mods.Add(FLKeywords.ComputeOnceKeyword); } FLExecutableElementModifiers e = new FLExecutableElementModifiers(funcName, mods.ToArray()); input.ExternalFunctions.Add(new SerializableExternalFLFunction(funcName, ext, e)); } foreach (KeyValuePair <string, SerializableFLFunction> staticFunction in staticFunctions) { foreach (SerializableFLFunction serializableFlFunction in input.Functions) { foreach (SerializableFLInstruction serializableFlInstruction in serializableFlFunction.Instructions) { for (int i = 0; i < serializableFlInstruction.Arguments.Count; i++) { SerializableFLInstructionArgument arg = serializableFlInstruction.Arguments[i]; if (arg.Identifier == staticFunction.Value.Name) { serializableFlInstruction.Arguments[i] = new SerializeExternalFunctionArgument(staticFunction.Key); } } } } } return(input); }