public void UpdateMethod(IMethodHolder <Node> owner, Common.Types.Method source) { var method = myProgram.GetOrCreateMethod(owner, source.Id.Value); myProgram.ClearMethod(method); // Variables. var localVariables = source.Variables.Cast <LocalVariableReference>() .Select(reference => { var defaultType = reference.DefaultType == null ? -1 : myProgram.GetOrCreateClass(reference.DefaultType).Id.GlobalId; return(new ResolvedLocalVariable(reference.Index, defaultType)); }); if (owner is ResolvedMethod <Node> owningMethod) { var possibleVariables = owningMethod.Variables.ToDictionary(pair => pair.Key, pair => pair.Value); foreach (var local in localVariables) { if (!possibleVariables.ContainsKey(local.LocalId)) { possibleVariables.Add(local.LocalId, local); } } localVariables = possibleVariables.Values; } foreach (var localVariable in localVariables) { method.AddLocalVariable(localVariable); } foreach (var attribute in source.Attributes) { var attributeId = myProgram.GetOrCreateAttribute(attribute); method.AddAttribute(attributeId); } // LocalFunctions. if (source.LocalMethods != null) { foreach (var localMethod in source.LocalMethods) { UpdateMethod(method, localMethod); } } // Body. var bodyAdapter = new CommonMethodAsNodeBasedProgram(source); UpdateMethodBody(owner, source.Id, bodyAdapter); }
public CommonMethodAsNodeBasedProgram(Common.Types.Method source) { mySource = source; }