protected static Hash <string, Signature> getSignatures(Block block, Parameters parameters) { var signatures = new Hash <string, Signature>(); foreach (var verb in block.AsAdded) { switch (verb) { case CreateFunction createFunction: signatures[createFunction.FunctionName] = createFunction.Signature; break; case SpecialAssignment sa when sa.Signature.If(out var signature): signatures[signature.Name] = signature; break; case AssignToNewField assign: var fieldName = assign.FieldName; signatures[fieldName] = new Signature(fieldName, 0, false); if (assign.ReadOnly) { signatures[SetterName(fieldName)] = new Signature(fieldName, 1, false); } break; } } foreach (var parameter in parameters.GetParameters()) { var name = parameter.Name; var visibility = parameter.Visibility; if (visibility == Temporary) { continue; } signatures[name] = new Signature(name, 0, false); if (!parameter.ReadOnly) { signatures[SetterName(name)] = new Signature(name, 1, false); } } return(signatures); }