private static void SerializeTupleElementNames( ref CustomDebugInfoEncoder encoder, IMethodBody methodBody ) { var locals = GetLocalInfoToSerialize( methodBody, local => !local.TupleElementNames.IsEmpty, (scope, local) => ( local.Name, local.SlotIndex, scope.StartOffset, scope.EndOffset, local.TupleElementNames ) ); if (locals == null) { return; } encoder.AddTupleElementNames(locals); locals.Free(); }
private static void SerializeDynamicLocalInfo( ref CustomDebugInfoEncoder encoder, IMethodBody methodBody ) { if (!methodBody.HasDynamicLocalVariables) { return; } byte[] GetDynamicFlags(ILocalDefinition local) { var dynamicTransformFlags = local.DynamicTransformFlags; var flags = new byte[CustomDebugInfoEncoder.DynamicAttributeSize]; for (int k = 0; k < dynamicTransformFlags.Length; k++) { if (dynamicTransformFlags[k]) { flags[k] = 1; } } return(flags); } var dynamicLocals = GetLocalInfoToSerialize( methodBody, local => { var dynamicTransformFlags = local.DynamicTransformFlags; return(!dynamicTransformFlags.IsEmpty && dynamicTransformFlags.Length <= CustomDebugInfoEncoder.DynamicAttributeSize && local.Name.Length < CustomDebugInfoEncoder.IdentifierSize); }, (scope, local) => ( local.Name, GetDynamicFlags(local), local.DynamicTransformFlags.Length, (local.SlotIndex < 0) ? 0 : local.SlotIndex ) ); if (dynamicLocals == null) { return; } encoder.AddDynamicLocals(dynamicLocals); dynamicLocals.Free(); }