23 writes to ilg
System.Private.Xml (23)
System\Xml\Serialization\XmlSerializationILGen.cs (10)
152
ilg
= new CodeGenerator(serializerContractTypeBuilder);
232
ilg
= new CodeGenerator(serializerContractTypeBuilder);
283
ilg
= new CodeGenerator(baseSerializerTypeBuilder);
325
ilg
= new CodeGenerator(typedSerializerTypeBuilder);
360
ilg
= new CodeGenerator(typedSerializerTypeBuilder);
384
ilg
= new CodeGenerator(typedSerializerTypeBuilder);
436
ilg
= new CodeGenerator(serializerContractTypeBuilder);
489
ilg
= new CodeGenerator(serializerContractTypeBuilder);
509
ilg
= new CodeGenerator(serializerContractTypeBuilder);
540
ilg
= new CodeGenerator(serializerContractTypeBuilder);
System\Xml\Serialization\XmlSerializationReaderILGen.cs (8)
236
ilg
= new CodeGenerator(this.typeBuilder);
419
ilg
= new CodeGenerator(this.typeBuilder);
465
ilg
= new CodeGenerator(this.typeBuilder);
708
ilg
= new CodeGenerator(this.typeBuilder);
1037
ilg
= new CodeGenerator(this.typeBuilder);
1109
ilg
= new CodeGenerator(this.typeBuilder);
1354
ilg
= new CodeGenerator(this.typeBuilder);
1405
ilg
= new CodeGenerator(this.typeBuilder);
System\Xml\Serialization\XmlSerializationWriterILGen.cs (5)
88
ilg
= new CodeGenerator(this.typeBuilder);
356
ilg
= new CodeGenerator(this.typeBuilder);
547
ilg
= new CodeGenerator(this.typeBuilder);
604
ilg
= new CodeGenerator(this.typeBuilder);
914
ilg
= new CodeGenerator(this.typeBuilder);
1687 references to ilg
System.Private.Xml (1687)
System\Xml\Serialization\XmlSerializationILGen.cs (123)
160
ilg
.BeginMethod(
166
propertyBuilder.SetGetMethod(
ilg
.MethodBuilder!);
168
ilg
.Ldarg(0);
169
ilg
.LoadMember(fieldBuilder);
170
ilg
.Load(null);
172
ilg
.If(Cmp.EqualTo);
178
LocalBuilder _tmpLoc =
ilg
.DeclareLocal(typeof(Hashtable), "_tmp");
179
ilg
.New(Hashtable_ctor);
180
ilg
.Stloc(_tmpLoc);
187
ilg
!.Ldarg(0);
188
ilg
.LoadMember(fieldBuilder);
189
ilg
.Load(null);
190
ilg
.If(Cmp.EqualTo);
192
ilg
.Ldarg(0);
193
ilg
.Ldloc(typeof(Hashtable), "_tmp");
194
ilg
.StoreMember(fieldBuilder);
196
ilg
.EndIf();
198
ilg
.EndIf();
200
ilg
.Ldarg(0);
201
ilg
.LoadMember(fieldBuilder);
202
ilg
.GotoMethodEnd();
204
ilg
.EndMethod();
220
ilg
!.Ldloc(typeof(Hashtable), "_tmp");
221
ilg
.Ldstr(GetCSharpString(xmlMappings[i].Key));
222
ilg
.Ldstr(GetCSharpString(methods[i]));
223
ilg
.Call(Hashtable_set_Item);
233
ilg
.BeginMethod(
253
ilg
.Ldarg("type");
254
ilg
.Ldc(type);
255
ilg
.If(Cmp.EqualTo);
257
ilg
.Ldc(true);
258
ilg
.GotoMethodEnd();
260
ilg
.EndIf();
262
ilg
.Ldc(false);
263
ilg
.GotoMethodEnd();
264
ilg
.EndMethod();
284
ilg
.BeginMethod(typeof(XmlSerializationReader),
289
ilg
.New(readerCtor);
290
ilg
.EndMethod();
296
ilg
.BeginMethod(typeof(XmlSerializationWriter),
301
ilg
.New(writerCtor);
302
ilg
.EndMethod();
326
ilg
.BeginMethod(
336
ilg
.Ldc(true);
337
ilg
.Stloc(
ilg
.ReturnLocal);
338
ilg
.Br(
ilg
.ReturnLabel);
347
ilg
.Ldarg(
ilg
.GetArg("xmlReader"));
348
ilg
.Ldstr(GetCSharpString(mapping.Accessor.Name));
349
ilg
.Ldstr(GetCSharpString(mapping.Accessor.Namespace));
350
ilg
.Call(XmlReader_IsStartElement);
351
ilg
.Stloc(
ilg
.ReturnLocal);
352
ilg
.Br(
ilg
.ReturnLabel);
354
ilg
.MarkLabel(
ilg
.ReturnLabel);
355
ilg
.Ldloc(
ilg
.ReturnLocal);
356
ilg
.EndMethod();
361
ilg
.BeginMethod(
372
ilg
.Ldarg("writer");
373
ilg
.Castclass(CreatedTypes[writerClass]);
374
ilg
.Ldarg("objectToSerialize");
377
ilg
.ConvertValue(typeof(object), typeof(object[]));
379
ilg
.Call(writerType_writeMethod);
380
ilg
.EndMethod();
385
ilg
.BeginMethod(
396
ilg
.Ldarg("reader");
397
ilg
.Castclass(CreatedTypes[readerClass]);
398
ilg
.Call(readerType_readMethod);
399
ilg
.EndMethod();
424
ilg
!.Ldloc(typeof(Hashtable), "_tmp");
425
ilg
.Ldstr(GetCSharpString(key));
426
ilg
.New(ctor);
427
ilg
.Call(Hashtable_Add);
437
ilg
.BeginMethod(
456
ilg
.Ldarg("type");
457
ilg
.Ldc(type);
458
ilg
.If(Cmp.EqualTo);
464
ilg
.New(ctor);
465
ilg
.Stloc(
ilg
.ReturnLocal);
466
ilg
.Br(
ilg
.ReturnLabel);
468
ilg
.EndIf();
471
ilg
.Load(null);
472
ilg
.Stloc(
ilg
.ReturnLocal);
473
ilg
.Br(
ilg
.ReturnLabel);
474
ilg
.MarkLabel(
ilg
.ReturnLabel);
475
ilg
.Ldloc(
ilg
.ReturnLocal);
476
ilg
.EndMethod();
495
ilg
.BeginMethod(
501
propertyBuilder.SetGetMethod(
ilg
.MethodBuilder!);
506
ilg
.New(ctor);
507
ilg
.EndMethod();
515
ilg
.BeginMethod(
521
propertyBuilder.SetGetMethod(
ilg
.MethodBuilder!);
526
ilg
.New(ctor);
527
ilg
.EndMethod();
541
ilg
.BeginMethod(
548
ilg
.Ldarg(0);
549
ilg
.Load(null);
550
ilg
.StoreMember(readMethodsField);
551
ilg
.Ldarg(0);
552
ilg
.Load(null);
553
ilg
.StoreMember(writeMethodsField);
554
ilg
.Ldarg(0);
555
ilg
.Load(null);
556
ilg
.StoreMember(typedSerializersField);
557
ilg
.Ldarg(0);
558
ilg
.Call(baseCtor);
559
ilg
.EndMethod();
583
ilg
!.LoadMember(
ilg
.GetVariable("o"), memInfo);
587
ilg
.ConvertValue(memType, type);
592
SourceInfo info = new SourceInfo(source, null, null, null,
ilg
!);
System\Xml\Serialization\XmlSerializationReaderILGen.cs (961)
237
ilg
.BeginMethod(typeof(void), "InitIDs", Type.EmptyTypes, Array.Empty<string>(),
256
ilg
.Ldarg(0);
257
ilg
.Ldarg(0);
258
ilg
.Call(XmlSerializationReader_get_Reader);
259
ilg
.Call(XmlReader_get_NameTable);
260
ilg
.Ldstr(GetCSharpString(id));
261
ilg
.Call(XmlNameTable_Add);
263
ilg
.StoreMember(_idNameFields[id]);
265
ilg
.EndMethod();
369
ilg
.Ldarg(0);
370
ilg
.Call(XmlSerializationReader_get_Reader);
371
ilg
.Ldarg(0);
372
ilg
.LoadMember(_idNameFields[name ?? string.Empty]);
373
ilg
.Ldarg(0);
374
ilg
.LoadMember(_idNameFields[ns ?? string.Empty]);
375
ilg
.Call(XmlReader_IsStartElement);
376
ilg
.If();
383
ilg
.Else();
386
ilg
.Ldarg(0);
389
ilg
.Load(null);
392
object pVar =
ilg
.GetVariable("p");
393
ilg
.Load(pVar);
394
ilg
.ConvertValue(CodeGenerator.GetVariableType(pVar), typeof(object));
402
ilg
.Ldstr(ReflectionAwareILGen.GetCSharpString(expectedElement));
410
ilg
.Call(method);
413
ilg
.EndIf();
420
ilg
.BeginMethod(typeof(void), "InitCallbacks", Type.EmptyTypes, Array.Empty<string>(),
422
ilg
.EndMethod();
466
ilg
.BeginMethod(
473
ilg
.Load(null);
474
ilg
.Stloc(
ilg
.ReturnLocal);
485
ilg
.Ldarg(0);
486
ilg
.Call(XmlSerializationReader_get_Reader);
487
ilg
.Call(XmlReader_MoveToContent);
488
ilg
.Pop();
490
LocalBuilder localP =
ilg
.DeclareLocal(typeof(object[]), "p");
491
ilg
.NewArray(typeof(object), mappings.Length);
492
ilg
.Stloc(localP);
582
ilg
.Ldarg(0);
583
ilg
.Ldc(true);
584
ilg
.Call(XmlSerializationReader_set_IsReturnValue);
600
ilg
.Ldarg(0);
601
ilg
.Call(XmlSerializationReader_get_Reader);
602
ilg
.Call(XmlReader_MoveToElement);
603
ilg
.Pop();
615
ilg
.Ldarg(0);
616
ilg
.Call(XmlSerializationReader_get_Reader);
617
ilg
.Call(XmlReader_get_IsEmptyElement);
618
ilg
.If();
625
ilg
.Ldarg(0);
626
ilg
.Call(XmlSerializationReader_get_Reader);
627
ilg
.Call(XmlReader_Skip);
628
ilg
.Ldarg(0);
629
ilg
.Call(XmlSerializationReader_get_Reader);
630
ilg
.Call(XmlReader_MoveToContent);
631
ilg
.Pop();
632
ilg
.WhileContinue();
634
ilg
.EndIf();
640
ilg
.Ldarg(0);
641
ilg
.Call(XmlSerializationReader_get_Reader);
642
ilg
.Call(XmlReader_ReadStartElement);
646
ilg
.Ldc(0);
647
ilg
.Stloc(typeof(int), "state");
654
ilg
.Ldarg(0);
655
ilg
.Call(XmlSerializationReader_get_Reader);
656
ilg
.Call(XmlReader_MoveToContent);
657
ilg
.Pop();
669
ilg
.Ldarg(0);
670
ilg
.Call(XmlSerializationReader_ReadEndElement);
675
ilg
.Ldarg(0);
676
ilg
.Call(XmlSerializationReader_get_Reader);
677
ilg
.Call(XmlReader_MoveToContent);
678
ilg
.Pop();
682
ilg
.Ldloc(
ilg
.GetLocal("p"));
683
ilg
.EndMethod();
694
LocalBuilder arrayLoc =
ilg
.GetLocal(arrayName);
695
ilg
.Ldloc(arrayLoc);
696
ilg
.Ldc(i);
697
ReflectionAwareILGen.ILGenForCreateInstance(
ilg
, mappings[i].TypeDesc!.Type!, false, false);
698
ilg
.ConvertValue(mappings[i].TypeDesc!.Type!, typeof(object));
699
ilg
.Stelem(arrayLoc.LocalType.GetElementType()!);
709
ilg
.BeginMethod(
716
LocalBuilder oLoc =
ilg
.DeclareLocal(typeof(object), "o");
717
ilg
.Load(null);
718
ilg
.Stloc(oLoc);
734
ilg
.Ldarg(0);
735
ilg
.Call(XmlSerializationReader_get_Reader);
736
ilg
.Call(XmlReader_MoveToContent);
737
ilg
.Pop();
740
ilg
.Ldloc(oLoc);
742
ilg
.Stloc(
ilg
.ReturnLocal);
743
ilg
.Ldloc(
ilg
.ReturnLocal);
744
ilg
.EndMethod();
770
ilg
.Ldarg(0);
783
ilg
.Ldarg(0);
784
ilg
.Call(XmlSerializationReader_get_Reader);
785
ilg
.Call(XmlReader_ReadXXXString);
799
ilg
.Ldarg(0);
800
ilg
.Call(XmlSerializationReader_get_Reader);
801
ilg
.Call(XmlReader_get_Value);
805
LocalBuilder locVals =
ilg
.GetLocal("vals");
806
LocalBuilder locI =
ilg
.GetLocal("i");
807
ilg
.LoadArrayElement(locVals, locI);
811
ilg
.Ldc(false);
817
ilg
.Call(methodBuilder);
833
ilg
.Ldarg(0);
834
ilg
.Call(XmlSerializationReader_get_Reader);
835
ilg
.Call(XmlReader_ReadXXXString);
849
ilg
.Ldarg(0);
850
ilg
.Call(XmlSerializationReader_get_Reader);
851
ilg
.Call(XmlReader_get_Value);
855
LocalBuilder locVals =
ilg
.GetLocal("vals");
856
LocalBuilder locI =
ilg
.GetLocal("i");
857
ilg
.LoadArrayElement(locVals, locI);
870
ilg
.Ldarg(0);
871
LocalBuilder locVals =
ilg
.GetLocal("vals");
872
LocalBuilder locI =
ilg
.GetLocal("i");
873
ilg
.LoadArrayElement(locVals, locI);
883
ilg
.Call(XmlSerializationReader_CollapseWhitespace);
899
ilg
.Ldarg(0);
900
ilg
.Ldarg(0);
901
ilg
.Call(XmlSerializationReader_get_Reader);
902
ilg
.Call(XmlReader_method);
910
ilg
.Call(XmlSerializationReader_CollapseWhitespace);
927
ilg
.Ldarg(0);
956
ilg
.Ldarg(0);
957
ilg
.Call(XmlSerializationReader_get_Reader);
958
ilg
.Call(XmlReader_ReadXXXString);
972
ilg
.Ldarg(0);
973
ilg
.Call(XmlSerializationReader_get_Reader);
974
ilg
.Call(XmlReader_get_Value);
978
LocalBuilder locVals =
ilg
.GetLocal("vals");
979
LocalBuilder locI =
ilg
.GetLocal("i");
980
ilg
.LoadArrayElement(locVals, locI);
985
ilg
.Ldc(false);
987
ilg
.Call(ToXXX);
1038
ilg
.BeginMethod(
1045
ilg
.Ldarg(0);
1046
ilg
.LoadMember(fieldBuilder);
1047
ilg
.Load(null);
1048
ilg
.If(Cmp.EqualTo);
1054
LocalBuilder hLoc =
ilg
.DeclareLocal(typeof(Hashtable), "h");
1055
ilg
.New(Hashtable_ctor);
1056
ilg
.Stloc(hLoc);
1067
ilg
.Ldloc(hLoc);
1068
ilg
.Ldstr(GetCSharpString(constants[i].XmlName));
1069
ilg
.Ldc(Enum.ToObject(mapping.TypeDesc!.Type!, constants[i].Value));
1070
ilg
.ConvertValue(mapping.TypeDesc.Type!, typeof(long));
1071
ilg
.ConvertValue(typeof(long), typeof(object));
1073
ilg
.Call(Hashtable_Add);
1076
ilg
.Ldarg(0);
1077
ilg
.Ldloc(hLoc);
1078
ilg
.StoreMember(fieldBuilder);
1080
ilg
.EndIf();
1082
ilg
.Ldarg(0);
1083
ilg
.LoadMember(fieldBuilder);
1085
get_TableName =
ilg
.EndMethod();
1110
ilg
.BeginMethod(
1126
ilg
.Ldarg("s");
1127
ilg
.Ldarg(0);
1129
ilg
.Call(get_TableName);
1130
ilg
.Ldstr(GetCSharpString(fullTypeName));
1131
ilg
.Call(XmlSerializationReader_ToEnum);
1135
ilg
.ConvertValue(typeof(long), underlyingType);
1137
ilg
.Stloc(
ilg
.ReturnLocal);
1138
ilg
.Br(
ilg
.ReturnLabel);
1145
Label defaultLabel =
ilg
.DefineLabel();
1146
Label endSwitchLabel =
ilg
.DefineLabel();
1148
LocalBuilder localTmp =
ilg
.GetTempLocal(typeof(string));
1149
ilg
.Ldarg("s");
1150
ilg
.Stloc(localTmp);
1151
ilg
.Ldloc(localTmp);
1152
ilg
.Brfalse(defaultLabel);
1161
Label caseLabel =
ilg
.DefineLabel();
1162
ilg
.Ldloc(localTmp);
1163
ilg
.Ldstr(GetCSharpString(c.XmlName));
1169
ilg
.Call(String_op_Equality);
1170
ilg
.Brtrue(caseLabel);
1176
ilg
.Br(defaultLabel);
1180
ilg
.MarkLabel(caseLabels[i]);
1181
ilg
.Ldc(retValues[i]);
1182
ilg
.Stloc(
ilg
.ReturnLocal);
1183
ilg
.Br(
ilg
.ReturnLabel);
1191
ilg
.MarkLabel(defaultLabel);
1192
ilg
.Ldarg(0);
1193
ilg
.Ldarg("s");
1195
ilg
.Ldc(mapping.TypeDesc.Type!);
1196
ilg
.Call(XmlSerializationReader_CreateUnknownConstantException);
1197
ilg
.Throw();
1199
ilg
.MarkLabel(endSwitchLabel);
1202
ilg
.MarkLabel(
ilg
.ReturnLabel);
1203
ilg
.Ldloc(
ilg
.ReturnLocal);
1204
ilg
.EndMethod();
1211
ilg
.InitElseIf();
1213
ilg
.AndIf();
1222
ilg
.Ldarg(0);
1225
ilg
.Ldarg("isNullable");
1228
ilg
.Ldc(false);
1237
ilg
.Call(methodBuilder);
1238
ilg
.ConvertValue(methodBuilder.ReturnType,
ilg
.ReturnLocal.LocalType);
1239
ilg
.Stloc(
ilg
.ReturnLocal);
1240
ilg
.Br(
ilg
.ReturnLabel);
1254
ilg
.InitElseIf();
1256
ilg
.AndIf();
1267
ilg
.Ldarg(0);
1268
ilg
.Call(XmlSerializationReader_get_Reader);
1269
ilg
.Call(XmlReader_ReadStartElement);
1275
LocalBuilder eLoc =
ilg
.DeclareOrGetLocal(typeof(object), "e");
1292
ilg
.Ldarg(0);
1293
ilg
.Ldarg(0);
1294
ilg
.Ldarg(0);
1295
ilg
.Call(XmlSerializationReader_get_Reader);
1296
ilg
.Call(XmlReader_ReadString);
1297
ilg
.Call(XmlSerializationReader_CollapseWhitespace);
1298
ilg
.Call(methodBuilder);
1299
ilg
.ConvertValue(methodBuilder.ReturnType, eLoc.LocalType);
1300
ilg
.Stloc(eLoc);
1306
ilg
.Ldarg(0);
1307
ilg
.Call(XmlSerializationReader_ReadEndElement);
1308
ilg
.Ldloc(eLoc);
1309
ilg
.Stloc(
ilg
.ReturnLocal);
1310
ilg
.Br(
ilg
.ReturnLabel);
1317
ilg
.InitElseIf();
1319
ilg
.AndIf();
1320
ilg
.EnterScope();
1329
LocalBuilder aLoc =
ilg
.DeclareLocal(arrayMapping.TypeDesc.Type!, aVar);
1332
ReflectionAwareILGen.ILGenForCreateInstance(
ilg
, td.Type!, false, false);
1335
ilg
.Load(null);
1336
ilg
.Stloc(aLoc);
1339
ilg
.Ldloc(aLoc);
1340
ilg
.Stloc(
ilg
.ReturnLocal);
1341
ilg
.Br(
ilg
.ReturnLabel);
1342
ilg
.ExitScope();
1355
ilg
.BeginMethod(
1362
LocalBuilder oLoc =
ilg
.DeclareLocal(nullableMapping.TypeDesc.Type!, "o");
1364
ilg
.LoadAddress(oLoc);
1365
ilg
.InitObj(nullableMapping.TypeDesc.Type!);
1370
ilg
.Ldarg(0);
1371
ilg
.Call(XmlSerializationReader_ReadNull);
1372
ilg
.If();
1374
ilg
.Ldloc(oLoc);
1375
ilg
.Stloc(
ilg
.ReturnLocal);
1376
ilg
.Br(
ilg
.ReturnLabel);
1378
ilg
.EndIf();
1386
ilg
.Ldloc(oLoc);
1387
ilg
.Stloc(
ilg
.ReturnLocal);
1388
ilg
.Br(
ilg
.ReturnLabel);
1390
ilg
.MarkLabel(
ilg
.ReturnLabel);
1391
ilg
.Ldloc(
ilg
.ReturnLocal);
1392
ilg
.EndMethod();
1415
ilg
.BeginMethod(
1422
LocalBuilder locXsiType =
ilg
.DeclareLocal(typeof(XmlQualifiedName), "xsiType");
1423
LocalBuilder locIsNull =
ilg
.DeclareLocal(typeof(bool), "isNull");
1434
Label labelTrue =
ilg
.DefineLabel();
1435
Label labelEnd =
ilg
.DefineLabel();
1436
ilg
.Ldarg("checkType");
1437
ilg
.Brtrue(labelTrue);
1438
ilg
.Load(null);
1439
ilg
.Br_S(labelEnd);
1440
ilg
.MarkLabel(labelTrue);
1441
ilg
.Ldarg(0);
1442
ilg
.Call(XmlSerializationReader_GetXsiType);
1443
ilg
.MarkLabel(labelEnd);
1444
ilg
.Stloc(locXsiType);
1445
ilg
.Ldc(false);
1446
ilg
.Stloc(locIsNull);
1449
ilg
.Ldarg("isNullable");
1450
ilg
.If();
1452
ilg
.Ldarg(0);
1453
ilg
.Call(XmlSerializationReader_ReadNull);
1454
ilg
.Stloc(locIsNull);
1456
ilg
.EndIf();
1459
ilg
.Ldarg("checkType");
1460
ilg
.If(); // if (checkType)
1463
ilg
.Ldloc(locIsNull);
1464
ilg
.If();
1465
ilg
.Ldloc(locXsiType);
1466
ilg
.Load(null);
1467
ilg
.If(Cmp.NotEqualTo);
1473
ilg
.Ldarg(0);
1474
ilg
.Ldloc(locXsiType);
1475
ilg
.Call(XmlSerializationReader_ReadTypedNull);
1476
ilg
.Stloc(
ilg
.ReturnLocal);
1477
ilg
.Br(
ilg
.ReturnLabel);
1478
ilg
.Else();
1485
ilg
.Load(null);
1486
ilg
.Stloc(
ilg
.ReturnLocal);
1487
ilg
.Br(
ilg
.ReturnLabel);
1489
ilg
.EndIf(); // if (xsiType != null)
1491
ilg
.EndIf(); // if (isNull)
1493
ilg
.Ldloc(typeof(XmlQualifiedName), "xsiType");
1494
ilg
.Load(null);
1495
ilg
.Ceq();
1498
labelTrue =
ilg
.DefineLabel();
1499
labelEnd =
ilg
.DefineLabel();
1501
ilg
.Brtrue(labelTrue);
1504
ilg
.Br_S(labelEnd);
1505
ilg
.MarkLabel(labelTrue);
1506
ilg
.Ldc(true);
1507
ilg
.MarkLabel(labelEnd);
1509
ilg
.If(); // if (xsiType == null
1521
ilg
.Ldarg(0);
1522
ilg
.Ldstr(Soap.UrType);
1523
ilg
.Ldstr(XmlSchema.Namespace);
1524
ilg
.New(XmlQualifiedName_ctor);
1525
ilg
.Call(XmlSerializationReader_ReadTypedPrimitive);
1526
ilg
.Stloc(
ilg
.ReturnLocal);
1527
ilg
.Br(
ilg
.ReturnLabel);
1531
ilg
.Else(); // if (xsiType == null
1539
ilg
.Ldarg(0);
1540
ilg
.Ldloc(locXsiType);
1541
ilg
.Call(XmlSerializationReader_ReadTypedPrimitive);
1542
ilg
.Stloc(
ilg
.ReturnLocal);
1543
ilg
.Br(
ilg
.ReturnLabel);
1552
ilg
.Ldarg(0);
1553
ilg
.Ldloc(locXsiType);
1554
ilg
.Call(XmlSerializationReader_CreateUnknownTypeException);
1555
ilg
.Throw();
1557
ilg
.EndIf(); // if (xsiType == null
1558
ilg
.EndIf(); // checkType
1562
ilg
.Ldloc(typeof(bool), "isNull");
1563
ilg
.If();
1565
ilg
.Load(null);
1566
ilg
.Stloc(
ilg
.ReturnLocal);
1567
ilg
.Br(
ilg
.ReturnLabel);
1569
ilg
.EndIf();
1579
ilg
.Ldarg(0);
1580
ilg
.Ldstr(GetCSharpString(structMapping.TypeName));
1581
ilg
.Ldstr(GetCSharpString(structMapping.Namespace));
1582
ilg
.Call(XmlSerializationReader_CreateAbstractTypeException);
1583
ilg
.Throw();
1594
ilg
.Ldarg(0);
1595
ilg
.Ldc(false);
1596
ilg
.Call(XmlSerializationReader_set_DecodeName);
1599
LocalBuilder oLoc =
ilg
.GetLocal("o");
1698
ilg
.Ldarg(0);
1699
ilg
.Call(XmlSerializationReader_get_Reader);
1700
ilg
.Call(XmlReader_MoveToElement);
1701
ilg
.Pop();
1708
ilg
.Ldarg(0);
1709
ilg
.Call(XmlSerializationReader_get_Reader);
1710
ilg
.Call(XmlReader_get_IsEmptyElement);
1711
ilg
.If();
1717
ilg
.Ldarg(0);
1718
ilg
.Call(XmlSerializationReader_get_Reader);
1719
ilg
.Call(XmlReader_Skip);
1721
ilg
.Ldloc(oLoc);
1722
ilg
.Stloc(
ilg
.ReturnLocal);
1723
ilg
.Br(
ilg
.ReturnLabel);
1724
ilg
.EndIf();
1731
ilg
.Ldarg(0);
1732
ilg
.Call(XmlSerializationReader_get_Reader);
1733
ilg
.Call(XmlReader_ReadStartElement);
1736
ilg
.Ldc(0);
1737
ilg
.Stloc(typeof(int), "state");
1747
ilg
.Ldarg(0);
1748
ilg
.Call(XmlSerializationReader_get_Reader);
1749
ilg
.Call(XmlReader_MoveToContent);
1750
ilg
.Pop();
1760
ilg
.Ldarg(0);
1761
ilg
.Call(XmlSerializationReader_ReadEndElement);
1762
ilg
.Ldloc(structMapping.TypeDesc.Type!, "o");
1763
ilg
.Stloc(
ilg
.ReturnLocal);
1765
ilg
.MarkLabel(
ilg
.ReturnLabel);
1766
ilg
.Ldloc(
ilg
.ReturnLocal);
1767
ilg
.EndMethod();
1786
Label labelEnd =
ilg
.DefineLabel();
1787
Label labelFalse =
ilg
.DefineLabel();
1788
LocalBuilder sLoc =
ilg
.GetLocal(source);
1789
ilg
.Ldloc(sLoc);
1790
ilg
.Call(XmlQualifiedName_get_Name);
1791
ilg
.Ldarg(0);
1792
ilg
.LoadMember(_idNameFields[name ?? string.Empty]);
1793
ilg
.Bne(labelFalse);
1794
ilg
.Ldloc(sLoc);
1795
ilg
.Call(XmlQualifiedName_get_Namespace);
1796
ilg
.Ldarg(0);
1797
ilg
.LoadMember(_idNameFields[ns ?? string.Empty]);
1798
ilg
.Ceq();
1799
ilg
.Br_S(labelEnd);
1800
ilg
.MarkLabel(labelFalse);
1801
ilg
.Ldc(false);
1802
ilg
.MarkLabel(labelEnd);
1835
Label labelFalse =
ilg
.DefineLabel();
1836
Label labelEnd =
ilg
.DefineLabel();
1840
ilg
.Ldarg(0);
1841
ilg
.Call(XmlSerializationReader_get_Reader);
1842
ilg
.Call(XmlReader_get_LocalName);
1843
ilg
.Ldarg(0);
1844
ilg
.LoadMember(_idNameFields[name ?? string.Empty]);
1845
ilg
.Bne(labelFalse);
1848
ilg
.Ldarg(0);
1849
ilg
.Call(XmlSerializationReader_get_Reader);
1850
ilg
.Call(XmlReader_get_NamespaceURI);
1851
ilg
.Ldarg(0);
1852
ilg
.LoadMember(_idNameFields[ns ?? string.Empty]);
1853
ilg
.Ceq();
1857
ilg
.Br_S(labelEnd);
1858
ilg
.MarkLabel(labelFalse);
1859
ilg
.Ldc(false);
1860
ilg
.MarkLabel(labelEnd);
1863
ilg
.AndIf();
1894
ilg
.WhileBegin();
1915
ilg
.InitElseIf();
1917
ilg
.InitIf();
1922
ilg
.Ldc(false);
1923
ilg
.AndIf(Cmp.EqualTo);
1937
ilg
.InitElseIf();
1939
ilg
.InitIf();
1963
ilg
.Ldarg(0);
1964
ilg
.Ldarg(0);
1965
ilg
.Call(XmlSerializationReader_get_Reader);
1966
ilg
.Call(XmlReader_get_Name);
1967
ilg
.Call(XmlSerializationReader_IsXmlnsAttribute);
1968
ilg
.Ldc(true);
1969
ilg
.AndIf(Cmp.EqualTo);
1972
ilg
.Load(null);
1973
ilg
.If(Cmp.EqualTo);
1979
ilg
.New(ctor);
1981
ilg
.EndIf(); // if (xmlnsMember.Source == null
1983
Label labelEqual5 =
ilg
.DefineLabel();
1984
Label labelEndLength =
ilg
.DefineLabel();
1996
ilg
.Ldarg(0);
1997
ilg
.Call(XmlSerializationReader_get_Reader);
1998
ilg
.Call(XmlReader_get_Name);
1999
ilg
.Call(String_get_Length);
2000
ilg
.Ldc(5);
2001
ilg
.Beq(labelEqual5);
2002
ilg
.Ldarg(0);
2003
ilg
.Call(XmlSerializationReader_get_Reader);
2004
ilg
.Call(XmlReader_get_LocalName);
2005
ilg
.Br(labelEndLength);
2006
ilg
.MarkLabel(labelEqual5);
2007
ilg
.Ldstr(string.Empty);
2008
ilg
.MarkLabel(labelEndLength);
2009
ilg
.Ldarg(0);
2010
ilg
.Call(XmlSerializationReader_get_Reader);
2011
ilg
.Call(XmlReader_get_Value);
2012
ilg
.Call(Add);
2014
ilg
.Else();
2028
ilg
.Ldarg(0);
2029
ilg
.Ldarg(0);
2030
ilg
.Call(XmlSerializationReader_get_Reader);
2031
ilg
.Call(XmlReader_get_Name);
2032
ilg
.Call(XmlSerializationReader_IsXmlnsAttribute);
2033
ilg
.Ldc(false);
2034
ilg
.AndIf(Cmp.EqualTo);
2038
LocalBuilder localAttr =
ilg
.DeclareOrGetLocal(typeof(XmlAttribute), "attr");
2049
ilg
.Ldarg(0);
2050
ilg
.Call(XmlSerializationReader_get_Document);
2051
ilg
.Ldarg(0);
2052
ilg
.Call(XmlSerializationReader_get_Reader);
2053
ilg
.Call(XmlDocument_ReadNode);
2054
ilg
.ConvertValue(XmlDocument_ReadNode.ReturnType, localAttr.LocalType);
2055
ilg
.Stloc(localAttr);
2061
ilg
.Ldarg(0);
2062
ilg
.Ldloc(localAttr);
2063
ilg
.Call(XmlSerializationReader_ParseWsdlArrayType);
2069
ilg
.Ldarg(0);
2071
ilg
.Ldloc(firstParam);
2072
ilg
.ConvertValue(firstParam.LocalType, typeof(object));
2085
ilg
.Ldstr(qnames);
2093
ilg
.Call(elseCallMethod);
2095
ilg
.EndIf();
2097
ilg
.WhileBeginCondition();
2099
ilg
.Ldarg(0);
2100
ilg
.Call(XmlSerializationReader_get_Reader);
2101
ilg
.Call(XmlReader_MoveToNextAttribute);
2103
ilg
.WhileEndCondition();
2104
ilg
.WhileEnd();
2116
ilg
.Ldloc("attr");
2121
LocalBuilder attrLoc =
ilg
.GetLocal("attr");
2122
ilg
.Ldloc(attrLoc);
2126
ilg
.Load(null);
2127
ilg
.Cne();
2130
ilg
.IsInst(typeof(XmlAttribute));
2131
ilg
.If();
2133
ilg
.Ldloc(attrLoc);
2134
ilg
.ConvertValue(attrLoc.LocalType, typeof(XmlAttribute));
2136
ilg
.EndIf();
2149
LocalBuilder locVals =
ilg
.DeclareOrGetLocal(typeof(string[]), "vals");
2165
ilg
.Ldarg(0);
2166
ilg
.Call(XmlSerializationReader_get_Reader);
2167
ilg
.Call(XmlReader_get_Value);
2168
ilg
.LoadMember(EnsureXmlListSeparatorsField());
2169
ilg
.Call(String_Split);
2170
ilg
.Stloc(locVals);
2171
LocalBuilder localI =
ilg
.DeclareOrGetLocal(typeof(int), "i");
2172
ilg
.For(localI, 0, locVals);
2179
ilg
.EndFor();
2215
ilg
.Ldc(0);
2216
ilg
.Stloc(typeof(int), c);
2223
ilg
.Ldc(0);
2224
ilg
.Stloc(typeof(int), $"c{member.ChoiceArrayName}");
2233
ilg
.Ldloc(
ilg
.GetLocal(a));
2242
ilg
.Load(null);
2243
ilg
.If(Cmp.EqualTo);
2251
ilg
.Ldarg(0);
2252
ilg
.Ldstr(GetCSharpString(member.Mapping.TypeDesc.CSharpName));
2253
ilg
.Call(XmlSerializationReader_CreateReadOnlyCollectionException);
2254
ilg
.Throw();
2259
ReflectionAwareILGen.ILGenForCreateInstance(
ilg
, member.Mapping.TypeDesc.Type!, typeDesc.CannotNew, true);
2262
ilg
.EndIf(); // if ((object)(member.Source) == null
2264
WriteLocalDecl(a, new SourceInfo(member.Source, member.Source, member.Mapping.MemberInfo, member.Mapping.TypeDesc.Type,
ilg
));
2308
ilg
.Load(null);
2309
ilg
.Stloc(typeof(string), "tmp");
2323
ilg
.Ldarg(0);
2324
ilg
.Call(XmlSerializationReader_get_Reader);
2325
ilg
.Call(XmlReader_get_NodeType);
2326
ilg
.Ldc(XmlNodeType_Element);
2327
ilg
.If(Cmp.EqualTo);
2334
ilg
.Else();
2336
ilg
.EndIf();
2341
ilg
.InitElseIf();
2342
Label labelTrue =
ilg
.DefineLabel();
2343
Label labelEnd =
ilg
.DefineLabel();
2354
ilg
.Ldarg(0);
2355
ilg
.Call(XmlSerializationReader_get_Reader);
2356
ilg
.Call(XmlReader_get_NodeType);
2357
ilg
.Ldc(XmlNodeType.Text);
2358
ilg
.Ceq();
2359
ilg
.Brtrue(labelTrue);
2360
ilg
.Ldarg(0);
2361
ilg
.Call(XmlSerializationReader_get_Reader);
2362
ilg
.Call(XmlReader_get_NodeType);
2363
ilg
.Ldc(XmlNodeType.CDATA);
2364
ilg
.Ceq();
2365
ilg
.Brtrue(labelTrue);
2366
ilg
.Ldarg(0);
2367
ilg
.Call(XmlSerializationReader_get_Reader);
2368
ilg
.Call(XmlReader_get_NodeType);
2369
ilg
.Ldc(XmlNodeType.Whitespace);
2370
ilg
.Ceq();
2371
ilg
.Brtrue(labelTrue);
2372
ilg
.Ldarg(0);
2373
ilg
.Call(XmlSerializationReader_get_Reader);
2374
ilg
.Call(XmlReader_get_NodeType);
2375
ilg
.Ldc(XmlNodeType.SignificantWhitespace);
2376
ilg
.Ceq();
2377
ilg
.Br(labelEnd);
2378
ilg
.MarkLabel(labelTrue);
2379
ilg
.Ldc(true);
2380
ilg
.MarkLabel(labelEnd);
2381
ilg
.AndIf();
2420
ilg
.Ldarg(0);
2421
ilg
.Call(XmlSerializationReader_get_Document);
2422
ilg
.Ldarg(0);
2423
ilg
.Call(XmlSerializationReader_get_Reader);
2424
ilg
.Call(XmlReader_ReadString);
2425
ilg
.Call(XmlDocument_CreateTextNode);
2441
LocalBuilder locVals =
ilg
.DeclareOrGetLocal(typeof(string[]), "vals");
2457
ilg
.Ldarg(0);
2458
ilg
.Call(XmlSerializationReader_get_Reader);
2459
ilg
.Call(XmlReader_ReadContentAsString);
2460
ilg
.LoadMember(EnsureXmlListSeparatorsField());
2461
ilg
.Ldc((int)StringSplitOptions.RemoveEmptyEntries);
2462
ilg
.Call(String_Split);
2463
ilg
.Stloc(locVals);
2464
LocalBuilder localI =
ilg
.DeclareOrGetLocal(typeof(int), "i");
2465
ilg
.For(localI, 0, locVals);
2469
ilg
.EndFor();
2478
ilg
.Ldarg(0); // for calling CollapseWhitespace
2493
ilg
.Ldarg(0);
2494
ilg
.Call(XmlSerializationReader_get_Reader);
2495
ilg
.Call(XmlReader_ReadString);
2503
ilg
.Call(XmlSerializationReader_CollapseWhitespace);
2510
LocalBuilder tmpLoc =
ilg
.GetLocal("tmp");
2516
ilg
.Ldarg(0);
2517
ilg
.Ldloc(tmpLoc);
2518
ilg
.Ldc(text.Mapping.TypeDesc!.CollapseWhitespace);
2519
ilg
.Call(XmlSerializationReader_ReadString);
2520
ilg
.Stloc(tmpLoc);
2523
ilg
.Ldloc(tmpLoc);
2594
ilg
.InitElseIf();
2599
ilg
.InitElseIf();
2601
ilg
.InitIf();
2602
ilg
.Ldloc("state");
2603
ilg
.Ldc(cases);
2604
ilg
.AndIf(Cmp.EqualTo);
2605
ilg
.InitIf();
2609
ilg
.InitIf();
2616
ilg
.Ldc(false);
2617
ilg
.AndIf(Cmp.EqualTo);
2619
Label labelTrue =
ilg
.DefineLabel();
2620
Label labelEnd =
ilg
.DefineLabel();
2628
ilg
.Ldarg(0);
2629
ilg
.Call(XmlSerializationReader_get_IsReturnValue);
2630
ilg
.Brtrue(labelTrue);
2634
ilg
.Ldc(true);
2642
ilg
.Br_S(labelEnd);
2643
ilg
.MarkLabel(labelTrue);
2644
ilg
.Ldc(true);
2645
ilg
.MarkLabel(labelEnd);
2647
ilg
.AndIf();
2657
ilg
.Ldarg(0);
2658
ilg
.Ldc(false);
2659
ilg
.Call(XmlSerializationReader_set_IsReturnValue);
2670
ilg
.Else();
2674
ilg
.EndIf();
2677
ilg
.Ldc(cases);
2678
ilg
.Stloc(
ilg
.GetLocal("state"));
2681
ilg
.EndIf();
2687
ilg
.Else();
2692
ilg
.EndIf();
2757
ilg
.Ldarg(0);
2758
ilg
.Ldloc(
ilg
.GetLocal(a));
2759
ilg
.Ldloc(
ilg
.GetLocal(c));
2760
ilg
.Ldc(typeDesc.ArrayElementTypeDesc!.Type!);
2761
ilg
.Ldc(member.IsNullable);
2762
ilg
.Call(XmlSerializationReader_ShrinkArray);
2763
ilg
.ConvertValue(XmlSerializationReader_ShrinkArray.ReturnType, typeDesc.Type!);
2772
ilg
.Ldarg(0);
2773
ilg
.Ldloc(
ilg
.GetLocal(a));
2774
ilg
.Ldloc(
ilg
.GetLocal(c));
2775
ilg
.Ldc(member.Mapping.ChoiceIdentifier.Mapping!.TypeDesc!.Type!);
2776
ilg
.Ldc(member.IsNullable);
2777
ilg
.Call(XmlSerializationReader_ShrinkArray);
2778
ilg
.ConvertValue(XmlSerializationReader_ShrinkArray.ReturnType, member.Mapping.ChoiceIdentifier.Mapping.TypeDesc.Type!.MakeArrayType());
2784
LocalBuilder arrayLoc =
ilg
.GetLocal(member.ArrayName);
2786
ilg
.Ldloc(arrayLoc);
2807
if (
ilg
.TryGetVariable(source, out variable))
2813
ilg
.LoadAddress(variable);
2820
ilg
.LdlocAddress(
ilg
.GetLocal("o"));
2831
LocalBuilder localA =
ilg
.GetLocal(match.Groups["locA1"].Value);
2832
LocalBuilder localI =
ilg
.GetLocal(match.Groups["locI1"].Value);
2839
ilg
.Ldarg(0);
2840
ilg
.Ldloc(localA);
2841
ilg
.Ldloc(localI);
2842
ilg
.Ldc(arrayElementType);
2843
ilg
.Call(XmlSerializationReader_EnsureArrayIndex);
2844
ilg
.Castclass(localA.LocalType);
2845
ilg
.Stloc(localA);
2848
ilg
.Ldloc(localA);
2849
ilg
.Ldloc(localI);
2850
ilg
.Dup();
2851
ilg
.Ldc(1);
2852
ilg
.Add();
2853
ilg
.Stloc(localI);
2856
ilg
.Ldelema(arrayElementType);
2864
LocalBuilder localA =
ilg
.GetLocal(source.Substring(0, index));
2865
ilg
.LdlocAddress(localA);
2873
System.Diagnostics.Debug.Assert(CodeGenerator.GetVariableType(
ilg
.GetVariable(match.Groups["a"].Value)).IsArray);
2874
ilg
.Load(
ilg
.GetVariable(match.Groups["a"].Value));
2875
ilg
.Load(
ilg
.GetVariable(match.Groups["ia"].Value));
2888
if (
ilg
.TryGetVariable(source, out variable))
2893
ilg
.Call(varType.GetConstructor(varType.GetGenericArguments())!);
2898
ilg
.ConvertValue(stackType, elementType);
2899
ilg
.ConvertValue(elementType, varType);
2900
ilg
.Stloc((LocalBuilder)variable);
2909
ilg
.ConvertValue(stackType, memInfo is FieldInfo ? ((FieldInfo)memInfo).FieldType : ((PropertyInfo)memInfo).PropertyType);
2910
ilg
.StoreMember(memInfo);
2917
object oVar =
ilg
.GetVariable(match.Groups["locA1"].Value);
2919
ilg
.ConvertValue(elementType, arrayElementType);
2922
ilg
.Stobj(arrayElementType);
2926
ilg
.Stelem(arrayElementType);
2934
LocalBuilder localA =
ilg
.GetLocal(source.Substring(0, index));
2943
ilg
.ConvertValue(stackType, addParameterType);
2944
ilg
.Call(Add);
2946
ilg
.Pop();
2953
Type varType = CodeGenerator.GetVariableType(
ilg
.GetVariable(match.Groups["a"].Value));
2956
ilg
.ConvertValue(stackType, varElementType);
2957
ilg
.Stelem(varElementType);
3010
ilg
.Ldarg(0);
3011
ilg
.Call(XmlSerializationReader_GetNullAttr);
3012
ilg
.Ldc(false);
3013
ilg
.If(Cmp.EqualTo);
3020
ilg
.WhileBegin();
3021
ilg
.Ldarg(0);
3022
ilg
.Ldarg(0);
3023
ilg
.Call(XmlSerializationReader_get_Reader);
3024
ilg
.Call(XmlReader_get_Name);
3025
ilg
.Call(XmlSerializationReader_IsXmlnsAttribute);
3026
ilg
.Ldc(false);
3027
ilg
.If(Cmp.EqualTo);
3029
ilg
.Ldarg(0);
3030
ilg
.Load(null);
3031
ilg
.Call(XmlSerializationReader_UnknownNode);
3033
ilg
.EndIf();
3034
ilg
.WhileBeginCondition();
3036
ilg
.Ldarg(0);
3037
ilg
.Call(XmlSerializationReader_get_Reader);
3038
ilg
.Call(XmlReader_MoveToNextAttribute);
3040
ilg
.WhileEndCondition();
3041
ilg
.WhileEnd();
3044
ilg
.Ldarg(0);
3045
ilg
.Call(XmlSerializationReader_get_Reader);
3046
ilg
.Call(XmlReader_MoveToElement);
3047
ilg
.Pop();
3049
ilg
.EndIf();
3064
ilg
.Ldarg(0);
3065
ilg
.Call(XmlSerializationReader_ReadNull);
3066
ilg
.IfNot(); // if (!ReadNull()) { // EnterScope
3067
ilg
.EnterScope();
3083
Label labelTrue =
ilg
.DefineLabel();
3084
Label labelEnd =
ilg
.DefineLabel();
3088
ilg
.Load(
ilg
.GetVariable(member.ArrayName));
3089
ilg
.Load(null);
3090
ilg
.Beq(labelTrue);
3105
ilg
.Ldarg(0);
3106
ilg
.Call(XmlSerializationReader_get_Reader);
3107
ilg
.Call(XmlReader_get_IsEmptyElement);
3110
ilg
.Br_S(labelEnd);
3111
ilg
.MarkLabel(labelTrue);
3112
ilg
.Ldc(true);
3113
ilg
.MarkLabel(labelEnd);
3115
ilg
.If();
3121
ilg
.Ldarg(0);
3122
ilg
.Call(XmlSerializationReader_get_Reader);
3123
ilg
.Call(XmlReader_Skip);
3124
ilg
.Else();
3131
ilg
.Ldarg(0);
3132
ilg
.Call(XmlSerializationReader_get_Reader);
3133
ilg
.Call(XmlReader_ReadStartElement);
3143
ilg
.Ldarg(0);
3144
ilg
.Call(XmlSerializationReader_get_Reader);
3145
ilg
.Call(XmlReader_MoveToContent);
3146
ilg
.Pop();
3154
ilg
.Ldarg(0);
3155
ilg
.Call(XmlSerializationReader_ReadEndElement);
3156
ilg
.EndIf();
3162
ilg
.ExitScope(); // if (!ReadNull()) { ExitScope
3163
ilg
.Else(); // } else { EnterScope
3164
ilg
.EnterScope();
3169
ilg
.ExitScope(); // if (!ReadNull())/else ExitScope
3170
ilg
.EndIf();
3192
ilg
.Ldarg(0);
3193
ilg
.Ldc(true);
3201
ilg
.Call(methodBuilder);
3218
ilg
.Ldarg(0);
3219
ilg
.Call(XmlSerializationReader_ReadNull);
3220
ilg
.If();
3228
ilg
.Load(null);
3231
ilg
.Else();
3246
ilg
.Ldarg(0);
3247
ilg
.Call(XmlSerializationReader_get_Reader);
3248
ilg
.Call(XmlReader_get_IsEmptyElement);
3249
ilg
.If();
3255
ilg
.Ldarg(0);
3256
ilg
.Call(XmlSerializationReader_get_Reader);
3257
ilg
.Call(XmlReader_Skip);
3258
ilg
.Else();
3278
ilg
.Ldarg(0);
3279
ilg
.Call(XmlSerializationReader_get_Reader);
3280
ilg
.Call(XmlReader_get_IsEmptyElement);
3281
ilg
.If();
3288
ilg
.Ldarg(0);
3289
ilg
.Call(XmlSerializationReader_get_Reader);
3290
ilg
.Call(XmlReader_Skip);
3291
LocalBuilder tmpLoc =
ilg
.GetTempLocal(element.Mapping.TypeDesc!.Type);
3292
ilg
.Ldloca(tmpLoc);
3293
ilg
.InitObj(element.Mapping.TypeDesc!.Type);
3294
ilg
.Ldloc(tmpLoc);
3296
ilg
.Else();
3300
ilg
.EndIf();
3312
ilg
.Ldarg(0);
3313
ilg
.Call(XmlSerializationReader_ReadElementQualifiedName);
3335
ilg
.EndIf();
3358
ilg
.Ldloc(arrayName!);
3359
ilg
.Load(null);
3360
ilg
.If(Cmp.EqualTo);
3361
ilg
.Ldarg(0);
3362
ilg
.Call(XmlSerializationReader_get_Reader);
3363
ilg
.Call(XmlReader_Skip);
3364
ilg
.Else();
3368
ilg
.Ldarg(0);
3371
ilg
.Load(element.IsNullable);
3374
ilg
.Ldc(true);
3382
ilg
.Call(methodBuilder);
3386
ilg
.EndIf();
3400
ilg
.Ldarg(0);
3401
ilg
.Ldc(element.Any ? false : true);
3402
ilg
.Call(XmlSerializationReader_ReadXmlXXX);
3405
ilg
.Castclass(special.TypeDesc.Type!);
3418
Label labelTrue =
ilg
.DefineLabel();
3419
Label labelEnd =
ilg
.DefineLabel();
3420
LocalBuilder tserLoc =
ilg
.DeclareOrGetLocal(typeof(XmlQualifiedName), "tser");
3421
ilg
.Ldarg(0);
3422
ilg
.Call(XmlSerializationReader_GetXsiType);
3423
ilg
.Stloc(tserLoc);
3424
ilg
.Ldloc(tserLoc);
3425
ilg
.Load(null);
3426
ilg
.Ceq();
3427
ilg
.Brtrue(labelTrue);
3430
ilg
.Br_S(labelEnd);
3431
ilg
.MarkLabel(labelTrue);
3432
ilg
.Ldc(true);
3433
ilg
.MarkLabel(labelEnd);
3434
ilg
.If();
3443
ilg
.Ldarg(0);
3444
ReflectionAwareILGen.ILGenForCreateInstance(
ilg
, sm.TypeDesc!.Type!, sm.TypeDesc.CannotNew, false);
3446
ilg
.ConvertValue(typeof(object), typeof(IXmlSerializable));
3448
ilg
.ConvertValue(sm.TypeDesc.Type!, typeof(IXmlSerializable));
3450
ilg
.Ldc(true);
3451
ilg
.Call(XmlSerializationReader_ReadSerializable);
3454
ilg
.ConvertValue(typeof(IXmlSerializable), sm.TypeDesc.Type!);
3479
ReflectionAwareILGen.ILGenForEnumMember(
ilg
, choice.Mapping!.TypeDesc!.Type!, choice.MemberIds[elementIndex]);
3490
Label labelTrue =
ilg
.DefineLabel();
3491
Label labelEnd =
ilg
.DefineLabel();
3492
LocalBuilder tserLoc =
ilg
.GetLocal("tser");
3493
ilg
.InitElseIf();
3494
ilg
.Ldloc(tserLoc);
3495
ilg
.Load(null);
3496
ilg
.Ceq();
3497
ilg
.Brtrue(labelTrue);
3500
ilg
.Br_S(labelEnd);
3501
ilg
.MarkLabel(labelTrue);
3502
ilg
.Ldc(true);
3503
ilg
.MarkLabel(labelEnd);
3504
ilg
.AndIf();
3516
ilg
.Ldarg(0);
3517
ReflectionAwareILGen.ILGenForCreateInstance(
ilg
, derived.TypeDesc!.Type!, derived.TypeDesc.CannotNew, false);
3519
ilg
.ConvertValue(typeof(object), typeof(IXmlSerializable));
3521
ilg
.Ldc(true);
3522
ilg
.Call(XmlSerializationReader_ReadSerializable);
3525
ilg
.ConvertValue(typeof(IXmlSerializable), head.TypeDesc.Type!);
3535
ilg
.Ldarg(0);
3536
ilg
.Ldstr(GetCSharpString(derived.XsiType.Name));
3537
ilg
.Ldstr(GetCSharpString(derived.XsiType.Namespace));
3538
ilg
.Ldstr(GetCSharpString(head.XsiType!.Name));
3539
ilg
.Ldstr(GetCSharpString(head.XsiType.Namespace));
3540
ilg
.Ldstr(GetCSharpString(derived.Type.FullName));
3541
ilg
.Ldstr(GetCSharpString(head.Type.FullName));
3542
ilg
.Call(XmlSerializationReader_CreateBadDerivationException);
3543
ilg
.Throw();
3553
ilg
.Ldarg(0);
3554
ilg
.Ldstr(GetCSharpString(derived.XsiType.Name));
3555
ilg
.Ldstr(GetCSharpString(derived.XsiType.Namespace));
3556
ilg
.Ldstr(GetCSharpString(head.Type!.FullName));
3557
ilg
.Call(XmlSerializationReader_CreateMissingIXmlSerializableType);
3558
ilg
.Throw();
3578
ilg
.Ldarg(0);
3579
ilg
.Call(XmlSerializationReader_get_Reader);
3580
ilg
.Call(XmlReader_MoveToContent);
3581
ilg
.Pop();
3582
ilg
.WhileBegin();
3587
ilg
.WhileBeginCondition();
3603
Label labelFalse =
ilg
.DefineLabel();
3604
Label labelEnd =
ilg
.DefineLabel();
3605
ilg
.Ldarg(0);
3606
ilg
.Call(XmlSerializationReader_get_Reader);
3607
ilg
.Call(XmlReader_get_NodeType);
3608
ilg
.Ldc(XmlNodeType_EndElement);
3609
ilg
.Beq(labelFalse);
3610
ilg
.Ldarg(0);
3611
ilg
.Call(XmlSerializationReader_get_Reader);
3612
ilg
.Call(XmlReader_get_NodeType);
3613
ilg
.Ldc(XmlNodeType_None);
3614
ilg
.Cne();
3615
ilg
.Br_S(labelEnd);
3616
ilg
.MarkLabel(labelFalse);
3617
ilg
.Ldc(false);
3618
ilg
.MarkLabel(labelEnd);
3620
ilg
.WhileEndCondition();
3621
ilg
.WhileEnd();
3632
LocalBuilder paramsRead =
ilg
.DeclareLocal(typeof(Span<bool>), "paramsRead");
3635
ilg
.StackallocSpan(typeof(bool), length);
3639
ilg
.NewArray(typeof(bool), length);
3640
ilg
.New(typeof(Span<bool>).GetConstructor(new[] { typeof(bool[]) })!);
3642
ilg
.Stloc(paramsRead);
3650
LocalBuilder loc =
ilg
.DeclareLocal(
3656
ilg
.BeginExceptionBlock();
3658
ReflectionAwareILGen.ILGenForCreateInstance(
ilg
, mapping.TypeDesc.Type!, mapping.TypeDesc.CannotNew, true);
3659
ilg
.Stloc(loc);
3662
ilg
.Leave();
3669
ilg
.Ldarg(0);
3670
ilg
.Ldstr(GetCSharpString(fullTypeName));
3671
ilg
.Call(XmlSerializationReader_CreateInaccessibleConstructorException);
3672
ilg
.Throw();
3680
ilg
.Ldarg(0);
3681
ilg
.Ldstr(GetCSharpString(fullTypeName));
3682
ilg
.Call(XmlSerializationReader_CreateCtorHasSecurityException);
3683
ilg
.Throw();
3685
ilg
.EndExceptionBlock();
3691
ilg
.BeginCatchBlock(exceptionType);
3692
ilg
.Pop();
3697
ReflectionAwareILGen.WriteArrayLocalDecl(typeName, variableName, new SourceInfo(initValue, initValue, null, arrayTypeDesc.Type,
ilg
), arrayTypeDesc);
3702
ReflectionAwareILGen.WriteCreateInstance(source, ctorInaccessible, type,
ilg
);
3741
ilg
.Ldarg(0);
3742
ilg
.Load(null);
3743
ilg
.Ldstr(match.Groups["qnames"].Value);
3744
ilg
.Call(XmlSerializationReader_UnknownNode2);
3751
ilg
.Ldarg(0);
3752
LocalBuilder localO =
ilg
.GetLocal(match.Groups["o"].Value);
3753
ilg
.Ldloc(localO);
3754
ilg
.ConvertValue(localO.LocalType, typeof(object));
3755
ilg
.Ldstr(match.Groups["qnames"].Value);
3756
ilg
.Call(XmlSerializationReader_UnknownNode2);
3763
ilg
.Ldarg(0);
3764
LocalBuilder localO =
ilg
.GetLocal(match.Groups["o"].Value);
3765
ilg
.Ldloc(localO);
3766
ilg
.ConvertValue(localO.LocalType, typeof(object));
3767
ilg
.Load(null);
3768
ilg
.Call(XmlSerializationReader_UnknownNode2);
3775
ilg
.Ldarg(0);
3776
LocalBuilder localO =
ilg
.GetLocal(match.Groups["o"].Value);
3777
ilg
.Ldloc(localO);
3778
ilg
.ConvertValue(localO.LocalType, typeof(object));
3779
ilg
.Call(XmlSerializationReader_UnknownNode1);
3789
ilg
.Ldloca(
ilg
.GetLocal("paramsRead"));
3790
ilg
.Ldc(int.Parse(match.Groups["index"].Value, CultureInfo.InvariantCulture));
3791
ilg
.Call(typeof(Span<bool>).GetMethod("get_Item")!);
3792
ilg
.LdindU1();
3802
ilg
.Ldloca(
ilg
.GetLocal("paramsRead"));
3803
ilg
.Ldc(int.Parse(match.Groups["index"].Value, CultureInfo.InvariantCulture));
3804
ilg
.Call(typeof(Span<bool>).GetMethod("get_Item")!);
3805
ilg
.Ldc(value);
3806
ilg
.StindI1();
3820
ilg
.Ldarg(0);
3821
ilg
.Call(XmlSerializationReader_CreateUnknownNodeException);
3822
ilg
.Throw();
3836
ilg
.Load(value);
System\Xml\Serialization\XmlSerializationWriterILGen.cs (603)
89
ilg
.BeginMethod(typeof(void), "InitCallbacks", Type.EmptyTypes, Array.Empty<string>(),
91
ilg
.EndMethod();
102
ilg
.Ldarg(0);
103
ilg
.Ldstr(GetCSharpString(name));
107
ilg
.Ldstr(GetCSharpString(ns));
118
ilg
.Call(XmlSerializationWriter_WriteXXX);
137
ilg
.Ldarg(0);
139
ilg
.Call(methodBuilder);
167
ilg
.Call(XmlConvert_ToString);
177
ilg
.Ldarg(0);
185
ilg
.Call(FromXXX);
222
ilg
.Ldc(Enum.Parse(mapping.TypeDesc.Type!, enumDefaultValue!, false));
223
ilg
.If(Cmp.NotEqualTo); // " != "
231
ilg
.Ldarg(0);
233
ilg
.Ldstr(GetCSharpString(name));
237
ilg
.Ldstr(GetCSharpString(ns));
259
ilg
.Ldstr(GetCSharpString(mapping.TypeName));
260
ilg
.Ldstr(GetCSharpString(mapping.Namespace));
261
ilg
.New(XmlQualifiedName_ctor);
269
ilg
.Call(XmlSerializationWriter_method);
273
ilg
.EndIf();
284
ilg
.Ldarg(0);
285
ilg
.Ldstr(GetCSharpString(name));
286
ilg
.Ldstr(GetCSharpString(ns));
287
ilg
.Call(XmlSerializationWriter_Method);
297
ilg
.Ldarg(0);
298
ilg
.Ldstr(GetCSharpString(name));
299
ilg
.Ldstr(GetCSharpString(ns));
300
ilg
.Load(null);
301
ilg
.Ldc(writePrefixed);
302
ilg
.Call(XmlSerializationWriter_Method);
317
ilg
.Ldarg(0);
318
ilg
.Call(XmlSerializationWriter_WriteEndElement);
327
object oVar =
ilg
.GetVariable(source);
328
ilg
.Ldarg(0);
329
ilg
.Load(oVar);
330
ilg
.ConvertValue(CodeGenerator.GetVariableType(oVar), typeof(object));
331
ilg
.Call(XmlSerializationWriter_WriteEndElement);
357
ilg
.BeginMethod(
370
ilg
.Ldarg(0);
371
ilg
.Call(XmlSerializationWriter_WriteStartDocument);
378
ilg
.Ldarg(0);
379
ilg
.Call(XmlSerializationWriter_TopLevelElement);
384
LocalBuilder pLengthLoc =
ilg
.DeclareLocal(typeof(int), "pLength");
385
ilg
.Ldarg("p");
386
ilg
.Ldlen();
387
ilg
.Stloc(pLengthLoc);
398
ilg
.Ldloc(pLengthLoc);
399
ilg
.Ldc(xmlnsMember);
400
ilg
.If(Cmp.GreaterThan);
402
ilg
.EndIf();
411
SourceInfo source = new SourceInfo($"p[{i}]", null, null, pLengthLoc.LocalType.GetElementType()!,
ilg
);
422
specifiedSource = new SourceInfo($"((bool)p[{j}])", null, null, typeof(bool),
ilg
);
429
ilg
.Ldloc(pLengthLoc);
430
ilg
.Ldc(i);
431
ilg
.If(Cmp.GreaterThan);
435
Label labelTrue =
ilg
.DefineLabel();
436
Label labelEnd =
ilg
.DefineLabel();
437
ilg
.Ldloc(pLengthLoc);
438
ilg
.Ldc(specifiedPosition);
439
ilg
.Ble(labelTrue);
441
ilg
.Br_S(labelEnd);
442
ilg
.MarkLabel(labelTrue);
443
ilg
.Ldc(true);
444
ilg
.MarkLabel(labelEnd);
445
ilg
.If();
452
ilg
.EndIf();
455
ilg
.EndIf();
478
specifiedSource = new SourceInfo($"((bool)p[{j}])", null, null, typeof(bool),
ilg
);
485
ilg
.Ldloc(pLengthLoc);
486
ilg
.Ldc(i);
487
ilg
.If(Cmp.GreaterThan);
491
Label labelTrue =
ilg
.DefineLabel();
492
Label labelEnd =
ilg
.DefineLabel();
493
ilg
.Ldloc(pLengthLoc);
494
ilg
.Ldc(specifiedPosition);
495
ilg
.Ble(labelTrue);
497
ilg
.Br_S(labelEnd);
498
ilg
.MarkLabel(labelTrue);
499
ilg
.Ldc(true);
500
ilg
.MarkLabel(labelEnd);
501
ilg
.If();
524
WriteMember(new SourceInfo(source, source, null, null,
ilg
), enumSource, member.ElementsSortedByDerivation!, member.Text, member.ChoiceIdentifier, member.TypeDesc!, writeAccessors || hasWrapperElement);
528
ilg
.EndIf();
531
ilg
.EndIf();
538
ilg
.EndMethod();
548
ilg
.BeginMethod(
561
ilg
.Ldarg(0);
562
ilg
.Call(XmlSerializationWriter_WriteStartDocument);
564
ilg
.If(
ilg
.GetArg("o"), Cmp.EqualTo, null);
571
ilg
.GotoMethodEnd();
572
ilg
.EndIf();
581
ilg
.Ldarg(0);
582
ilg
.Call(XmlSerializationWriter_TopLevelElement);
585
WriteMember(new SourceInfo("o", "o", null, typeof(object),
ilg
), null, new ElementAccessor[] { element }, null, null, mapping.TypeDesc, true);
587
ilg
.EndMethod();
605
ilg
.BeginMethod(
611
LocalBuilder sLoc =
ilg
.DeclareLocal(typeof(string), "s");
612
ilg
.Load(null);
613
ilg
.Stloc(sLoc);
621
Label defaultLabel =
ilg
.DefineLabel();
622
Label endSwitchLabel =
ilg
.DefineLabel();
624
LocalBuilder localTmp =
ilg
.DeclareLocal(mapping.TypeDesc.Type!, "localTmp");
625
ilg
.Ldarg("v");
626
ilg
.Stloc(localTmp);
632
Label caseLabel =
ilg
.DefineLabel();
633
ilg
.Ldloc(localTmp);
634
ilg
.Ldc(Enum.ToObject(mapping.TypeDesc.Type!, c.Value));
635
ilg
.Beq(caseLabel);
644
ilg
.Br(defaultLabel);
647
ilg
.MarkLabel(caseLabels[i]);
648
ilg
.Ldc(retValues[i]);
649
ilg
.Stloc(sLoc);
650
ilg
.Br(endSwitchLabel);
652
ilg
.MarkLabel(defaultLabel);
653
ReflectionAwareILGen.ILGenForEnumLongValue(
ilg
, "v");
654
LocalBuilder strArray =
ilg
.DeclareLocal(typeof(string[]), "strArray");
655
ilg
.NewArray(typeof(string), constants.Length);
656
ilg
.Stloc(strArray);
660
ilg
.Ldloc(strArray);
661
ilg
.Ldc(i);
662
ilg
.Ldstr(GetCSharpString(c.XmlName));
663
ilg
.Stelem(typeof(string));
665
ilg
.Ldloc(strArray);
666
LocalBuilder longArray =
ilg
.DeclareLocal(typeof(long[]), "longArray");
667
ilg
.NewArray(typeof(long), constants.Length);
668
ilg
.Stloc(longArray);
673
ilg
.Ldloc(longArray);
674
ilg
.Ldc(i);
675
ilg
.Ldc(c.Value);
676
ilg
.Stelem(typeof(long));
678
ilg
.Ldloc(longArray);
679
ilg
.Ldstr(GetCSharpString(mapping.TypeDesc.FullName));
685
ilg
.Call(XmlSerializationWriter_FromEnum);
686
ilg
.Stloc(sLoc);
687
ilg
.Br(endSwitchLabel);
691
ilg
.Br(defaultLabel);
695
ilg
.MarkLabel(caseLabels[i]);
696
ilg
.Ldc(retValues[i]);
697
ilg
.Stloc(sLoc);
698
ilg
.Br(endSwitchLabel);
716
ilg
.MarkLabel(defaultLabel);
717
ilg
.Ldarg(0);
718
ilg
.Ldarg("v");
719
ilg
.ConvertValue(mapping.TypeDesc.Type!, typeof(long));
720
LocalBuilder numLoc =
ilg
.DeclareLocal(typeof(long), "num");
721
ilg
.Stloc(numLoc);
723
ilg
.LdlocAddress(numLoc);
724
ilg
.Call(CultureInfo_get_InvariantCulture);
725
ilg
.Call(Int64_ToString);
726
ilg
.Ldstr(GetCSharpString(mapping.TypeDesc.FullName));
727
ilg
.Call(XmlSerializationWriter_CreateInvalidEnumValueException);
728
ilg
.Throw();
730
ilg
.MarkLabel(endSwitchLabel);
732
ilg
.Ldloc(sLoc);
733
ilg
.EndMethod();
740
ilg
.InitElseIf();
742
ilg
.AndIf();
752
ilg
.Ldarg(0);
754
ilg
.Ldarg("n");
756
ilg
.Ldarg("ns");
757
object oVar =
ilg
.GetVariable("o");
759
ilg
.Load(oVar);
760
ilg
.ConvertValue(oType, derived.TypeDesc.Type!);
765
ilg
.Ldarg("isNullable");
768
ilg
.Ldc(true);
774
ilg
.Call(methodBuilder);
775
ilg
.GotoMethodEnd();
790
ilg
.InitElseIf();
793
ilg
.AndIf();
811
ilg
.Ldarg(0);
812
ilg
.Call(XmlSerializationWriter_get_Writer);
813
ilg
.Ldarg("n");
814
ilg
.Ldarg("ns");
815
ilg
.Call(XmlWriter_WriteStartElement);
821
ilg
.Ldarg(0);
822
ilg
.Ldstr(GetCSharpString(mapping.TypeName));
823
ilg
.Ldstr(GetCSharpString(mapping.Namespace));
824
ilg
.Call(XmlSerializationWriter_WriteXsiType);
836
ilg
.Ldarg(0);
837
ilg
.Call(XmlSerializationWriter_get_Writer);
838
object oVar =
ilg
.GetVariable("o");
839
ilg
.Ldarg(0);
840
ilg
.Load(oVar);
841
ilg
.ConvertValue(CodeGenerator.GetVariableType(oVar), mapping.TypeDesc.Type!);
842
ilg
.Call(methodBuilder);
843
ilg
.Call(XmlWriter_WriteString);
849
ilg
.Ldarg(0);
850
ilg
.Call(XmlSerializationWriter_get_Writer);
851
ilg
.Call(XmlWriter_WriteEndElement);
852
ilg
.GotoMethodEnd();
858
ilg
.InitElseIf();
864
ilg
.AndIf();
865
ilg
.EnterScope();
877
ilg
.Ldarg(0);
878
ilg
.Call(XmlSerializationWriter_get_Writer);
879
ilg
.Ldarg("n");
880
ilg
.Ldarg("ns");
881
ilg
.Call(XmlWriter_WriteStartElement);
887
ilg
.Ldarg(0);
888
ilg
.Ldstr(GetCSharpString(mapping.TypeName));
889
ilg
.Ldstr(GetCSharpString(mapping.Namespace));
890
ilg
.Call(XmlSerializationWriter_WriteXsiType);
892
WriteMember(new SourceInfo("o", "o", null, null,
ilg
), null, mapping.ElementsSortedByDerivation!, null, null, mapping.TypeDesc, true);
899
ilg
.Ldarg(0);
900
ilg
.Call(XmlSerializationWriter_get_Writer);
901
ilg
.Call(XmlWriter_WriteEndElement);
902
ilg
.GotoMethodEnd();
903
ilg
.ExitScope();
930
ilg
.BeginMethod(typeof(void),
937
ilg
.If(
ilg
.GetArg("o"), Cmp.EqualTo, null);
939
ilg
.If(
ilg
.GetArg("isNullable"), Cmp.EqualTo, true);
946
ilg
.Ldarg(0);
947
ilg
.Ldarg("n");
948
ilg
.Ldarg("ns");
949
ilg
.Call(XmlSerializationWriter_WriteNullTagLiteral);
951
ilg
.EndIf();
952
ilg
.GotoMethodEnd();
954
ilg
.EndIf();
956
ilg
.If(
ilg
.GetArg("needType"), Cmp.NotEqualTo, true); // if (!needType)
958
LocalBuilder tLoc =
ilg
.DeclareLocal(typeof(Type), "t");
964
ArgBuilder oArg =
ilg
.GetArg("o");
965
ilg
.LdargAddress(oArg);
966
ilg
.ConvertAddress(oArg.ArgType, typeof(object));
967
ilg
.Call(Object_GetType);
968
ilg
.Stloc(tLoc);
971
ilg
.If(); // if (t == typeof(...))
975
ilg
.Else();
983
ilg
.Ldarg(0);
984
ilg
.Ldarg("n");
985
ilg
.Ldarg("ns");
986
ilg
.Ldarg("o");
987
ilg
.Ldc(true);
988
ilg
.Call(XmlSerializationWriter_WriteTypedPrimitive);
989
ilg
.GotoMethodEnd();
998
ilg
.Ldarg(0);
999
ilg
.Ldarg(oArg);
1000
ilg
.ConvertValue(oArg.ArgType, typeof(object));
1001
ilg
.Call(XmlSerializationWriter_CreateUnknownTypeException);
1002
ilg
.Throw();
1004
ilg
.EndIf(); // if (t == typeof(...))
1005
ilg
.EndIf(); // if (!needType)
1016
ilg
.Ldarg(0);
1017
ilg
.Ldc(false);
1018
ilg
.Call(XmlSerializationWriter_set_EscapeName);
1031
ilg
.Ldarg(0);
1032
ilg
.Ldarg("n");
1033
ilg
.Ldarg("ns");
1034
ArgBuilder argO =
ilg
.GetArg("o");
1035
ilg
.Ldarg(argO);
1036
ilg
.ConvertValue(argO.ArgType, typeof(object));
1037
ilg
.Ldc(false);
1039
ilg
.Load(null);
1051
ilg
.Call(XmlSerializationWriter_WriteStartElement);
1054
ilg
.If(
ilg
.GetArg("needType"), Cmp.EqualTo, true);
1061
ilg
.Ldarg(0);
1062
ilg
.Ldstr(GetCSharpString(mapping.TypeName));
1063
ilg
.Ldstr(GetCSharpString(mapping.Namespace));
1064
ilg
.Call(XmlSerializationWriter_WriteXsiType);
1066
ilg
.EndIf();
1076
ilg
.LdargAddress(oArg);
1077
ilg
.Call(m.CheckShouldPersistMethodInfo!);
1078
ilg
.If();
1084
ilg
.If();
1086
WriteMember(ReflectionAwareILGen.GetSourceForMember("o", m,
ilg
), m.Attribute, m.TypeDesc!, "o");
1090
ilg
.EndIf();
1094
ilg
.EndIf();
1109
ilg
.LdargAddress(oArg);
1110
ilg
.Call(m.CheckShouldPersistMethodInfo!);
1111
ilg
.If();
1117
ilg
.If();
1127
WriteMember(ReflectionAwareILGen.GetSourceForMember("o", m, m.MemberInfo,
ilg
), choiceSource, m.ElementsSortedByDerivation!, m.Text, m.ChoiceIdentifier, m.TypeDesc!, true);
1131
ilg
.EndIf();
1135
ilg
.EndIf();
1140
ilg
.EndMethod();
1161
ilg
.EnterScope();
1165
ilg
.Ldloc(memberTypeDesc.Type!, aVar);
1166
ilg
.Load(null);
1167
ilg
.If(Cmp.NotEqualTo);
1184
ilg
.Ldarg(0);
1185
ilg
.Call(XmlSerializationWriter_get_Writer);
1186
ilg
.Load(null);
1187
ilg
.Ldstr(GetCSharpString(attribute.Name));
1188
ilg
.Ldstr(GetCSharpString(ns));
1189
ilg
.Call(XmlWriter_WriteStartAttribute);
1193
LocalBuilder sbLoc =
ilg
.DeclareOrGetLocal(typeof(StringBuilder), "sb");
1198
ilg
.New(StringBuilder_ctor);
1199
ilg
.Stloc(sbLoc);
1210
LocalBuilder localI =
ilg
.DeclareOrGetLocal(typeof(int), iVar);
1211
ilg
.For(localI, 0,
ilg
.GetLocal(aVar));
1222
ilg
.Ldloc(iVar);
1223
ilg
.Ldc(0);
1224
ilg
.If(Cmp.NotEqualTo);
1235
ilg
.Ldarg(0);
1236
ilg
.Call(XmlSerializationWriter_get_Writer);
1237
ilg
.Ldstr(" ");
1238
ilg
.Call(XmlWriter_WriteString);
1239
ilg
.EndIf();
1240
ilg
.Ldarg(0);
1251
ilg
.Ldloc(iVar);
1252
ilg
.Ldc(0);
1253
ilg
.If(Cmp.NotEqualTo);
1254
ilg
.Ldloc("sb");
1255
ilg
.Ldstr(" ");
1256
ilg
.Call(StringBuilder_Append);
1257
ilg
.Pop();
1258
ilg
.EndIf();
1259
ilg
.Ldloc("sb");
1264
WriteEnumValue((EnumMapping)attribute.Mapping, new SourceInfo(aiVar, aiVar, null, arrayElementTypeDesc.Type,
ilg
), out argType);
1266
WritePrimitiveValue(arrayElementTypeDesc, new SourceInfo(aiVar, aiVar, null, arrayElementTypeDesc.Type,
ilg
), out argType);
1272
ilg
.Call(method);
1274
ilg
.Pop();
1278
WriteAttribute(new SourceInfo(aiVar, aiVar, null, null,
ilg
), attribute, parent);
1283
ilg
.EndFor();
1299
ilg
.Ldarg(0);
1300
ilg
.Call(XmlSerializationWriter_get_Writer);
1301
ilg
.Call(XmlWriter_WriteEndAttribute);
1310
ilg
.Ldloc("sb");
1311
ilg
.Call(StringBuilder_get_Length);
1312
ilg
.Ldc(0);
1313
ilg
.If(Cmp.NotEqualTo);
1316
ilg
.Ldarg(0);
1317
ilg
.Ldstr(GetCSharpString(attribute.Name));
1322
ilg
.Ldstr(GetCSharpString(ns));
1330
ilg
.Ldloc("sb");
1331
ilg
.Call(Object_ToString);
1338
ilg
.Call(XmlSerializationWriter_WriteAttribute);
1339
ilg
.EndIf();
1345
ilg
.EndIf();
1348
ilg
.ExitScope();
1368
ilg
.Ldarg(0);
1369
ilg
.Ldloc(source.Source);
1370
ilg
.Ldarg(parent);
1371
ilg
.ConvertValue(
ilg
.GetArg(parent).ArgType, typeof(object));
1372
ilg
.Call(XmlSerializationWriter_WriteXmlAttribute);
1419
ilg
.EnterScope();
1421
LocalBuilder aLoc =
ilg
.GetLocal(aName);
1424
ilg
.Ldloc(aLoc);
1425
ilg
.Load(null);
1426
ilg
.If(Cmp.NotEqualTo);
1433
SourceInfo choiceSourceInfo = new SourceInfo(choiceSource!, null, choice.MemberInfo, null,
ilg
);
1437
Label labelEnd =
ilg
.DefineLabel();
1438
Label labelTrue =
ilg
.DefineLabel();
1439
LocalBuilder cLoc =
ilg
.GetLocal(cName);
1440
ilg
.Ldloc(cLoc);
1441
ilg
.Load(null);
1442
ilg
.Beq(labelTrue);
1443
ilg
.Ldloc(cLoc);
1444
ilg
.Ldlen();
1445
ilg
.Ldloc(aLoc);
1446
ilg
.Ldlen();
1447
ilg
.Clt();
1448
ilg
.Br(labelEnd);
1449
ilg
.MarkLabel(labelTrue);
1450
ilg
.Ldc(true);
1451
ilg
.MarkLabel(labelEnd);
1452
ilg
.If();
1458
ilg
.Ldarg(0);
1459
ilg
.Ldstr(GetCSharpString(choice.Mapping.TypeDesc.FullName));
1460
ilg
.Ldstr(GetCSharpString(choice.MemberName));
1461
ilg
.Call(XmlSerializationWriter_CreateInvalidChoiceIdentifierValueException);
1462
ilg
.Throw();
1463
ilg
.EndIf();
1469
ilg
.EndIf();
1472
ilg
.ExitScope();
1485
LocalBuilder eLoc =
ilg
.DeclareLocal(typeof(IEnumerator), "e");
1486
ilg
.LoadAddress(
ilg
.GetVariable(arrayName));
1498
ilg
.ConvertValue(arrayTypeDesc.Type!, typeIEnumerable);
1509
ilg
.ConvertValue(arrayTypeDesc.Type!, typeIEnumerable);
1517
ilg
.Call(getEnumeratorMethod);
1518
ilg
.ConvertValue(getEnumeratorMethod.ReturnType, typeof(IEnumerator));
1519
ilg
.Stloc(eLoc);
1524
sepLoc =
ilg
.DeclareOrGetLocal(typeof(bool), $"{arrayName}NeedsSep");
1525
ilg
.Ldc(false);
1526
ilg
.Stloc(sepLoc);
1529
ilg
.Ldloc(eLoc);
1530
ilg
.Load(null);
1531
ilg
.If(Cmp.NotEqualTo);
1532
ilg
.WhileBegin();
1538
ilg
.Ldloc(sepLoc!);
1539
ilg
.If();
1541
ilg
.EndIf();
1542
ilg
.Ldc(true);
1543
ilg
.Stloc(sepLoc!);
1545
WriteElements(new SourceInfo(arrayNamePlusI, null, null, arrayElementTypeDesc.Type,
ilg
), $"{choiceName}i", elements, text, choice, arrayNamePlusA, true, true);
1547
ilg
.WhileBeginCondition(); // while (e.MoveNext())
1552
ilg
.Ldloc(eLoc);
1553
ilg
.Call(IEnumerator_MoveNext);
1554
ilg
.WhileEndCondition();
1555
ilg
.WhileEnd();
1557
ilg
.EndIf(); // if (e != null)
1565
LocalBuilder localI =
ilg
.DeclareOrGetLocal(typeof(int), iPlusArrayName);
1566
ilg
.For(localI, 0,
ilg
.GetLocal(arrayName));
1575
WriteElements(new SourceInfo(arrayNamePlusI, null, null, arrayElementTypeDesc.Type,
ilg
), $"{choiceName}i", elements, text, choice, arrayNamePlusA, true, arrayElementTypeDesc.IsNullable);
1581
ilg
.Ldloc(localI);
1582
ilg
.Ldc(0);
1583
ilg
.If(Cmp.NotEqualTo);
1585
ilg
.EndIf();
1587
WriteElements(new SourceInfo(ReflectionAwareILGen.GetStringForArrayMember(arrayName, iPlusArrayName), null, null, arrayElementTypeDesc.Type,
ilg
), null, elements, text, choice, arrayNamePlusA, true, arrayElementTypeDesc.IsNullable);
1589
ilg
.EndFor();
1602
ilg
.Ldarg(0);
1603
ilg
.Ldstr(" ");
1604
ilg
.Call(XmlSerializationWriter_WriteValue);
1623
ilg
.Load(null);
1624
ilg
.If(Cmp.NotEqualTo);
1654
if (wroteFirstIf)
ilg
.InitElseIf();
1655
else { wroteFirstIf = true;
ilg
.InitIf(); }
1657
ilg
.Load(enumValue);
1658
ilg
.Ceq();
1661
Label labelFalse =
ilg
.DefineLabel();
1662
Label labelEnd =
ilg
.DefineLabel();
1663
ilg
.Brfalse(labelFalse);
1665
ilg
.Load(null);
1666
ilg
.Cne();
1667
ilg
.Br_S(labelEnd);
1668
ilg
.MarkLabel(labelFalse);
1669
ilg
.Ldc(false);
1670
ilg
.MarkLabel(labelEnd);
1672
ilg
.AndIf();
1682
if (wroteFirstIf)
ilg
.InitElseIf();
1683
else { wroteFirstIf = true;
ilg
.InitIf(); }
1686
ilg
.AndIf();
1699
else
ilg
.EndIf();
1704
if (elements.Length - anyCount > 0)
ilg
.InitElseIf();
1705
else
ilg
.InitIf();
1708
ilg
.IsInst(typeof(XmlElement));
1709
ilg
.Load(null);
1710
ilg
.Cne();
1711
ilg
.AndIf();
1713
LocalBuilder elemLoc =
ilg
.DeclareLocal(typeof(XmlElement), "elem");
1715
ilg
.Stloc(elemLoc);
1721
if (c++ > 0)
ilg
.InitElseIf();
1722
else
ilg
.InitIf();
1731
labelFalse =
ilg
.DefineLabel();
1732
labelEnd =
ilg
.DefineLabel();
1734
ilg
.Load(enumValue);
1735
ilg
.Bne(labelFalse);
1739
ilg
.Load(null);
1740
ilg
.Cne();
1744
ilg
.Ldc(true);
1746
ilg
.Br(labelEnd);
1747
ilg
.MarkLabel(labelFalse);
1748
ilg
.Ldc(false);
1749
ilg
.MarkLabel(labelEnd);
1750
ilg
.AndIf();
1752
labelFalse =
ilg
.DefineLabel();
1753
labelEnd =
ilg
.DefineLabel();
1764
ilg
.Ldloc(elemLoc);
1765
ilg
.Call(XmlNode_get_Name);
1766
ilg
.Ldstr(GetCSharpString(element.Name));
1772
ilg
.Call(String_op_Equality);
1773
ilg
.Brfalse(labelFalse);
1774
ilg
.Ldloc(elemLoc);
1775
ilg
.Call(XmlNode_get_NamespaceURI);
1776
ilg
.Ldstr(GetCSharpString(element.Namespace));
1777
ilg
.Call(String_op_Equality);
1778
ilg
.Br(labelEnd);
1779
ilg
.MarkLabel(labelFalse);
1780
ilg
.Ldc(false);
1781
ilg
.MarkLabel(labelEnd);
1782
if (choice != null)
ilg
.If();
1783
else
ilg
.AndIf();
1784
WriteElement(new SourceInfo("elem", null, null, elemLoc.LocalType,
ilg
), element, arrayName, writeAccessors);
1788
ilg
.Else();
1795
ilg
.Ldarg(0);
1796
ilg
.Ldstr(GetCSharpString(enumFullName));
1797
ilg
.Ldstr(GetCSharpString(choice.MemberName));
1798
ilg
.Ldloc(elemLoc);
1799
ilg
.Call(XmlNode_get_Name);
1800
ilg
.Ldloc(elemLoc);
1801
ilg
.Call(XmlNode_get_NamespaceURI);
1802
ilg
.Call(XmlSerializationWriter_CreateChoiceIdentifierValueException);
1803
ilg
.Throw();
1804
ilg
.EndIf();
1809
ilg
.Else();
1813
WriteElement(new SourceInfo("elem", null, null, elemLoc.LocalType,
ilg
), unnamedAny, arrayName, writeAccessors);
1822
ilg
.Ldarg(0);
1823
ilg
.Ldloc(elemLoc);
1834
ilg
.Call(XmlNode_get_Name);
1835
ilg
.Ldloc(elemLoc);
1836
ilg
.Call(XmlNode_get_NamespaceURI);
1837
ilg
.Call(XmlSerializationWriter_CreateUnknownAnyElementException);
1838
ilg
.Throw();
1842
ilg
.EndIf();
1849
ilg
.InitElseIf();
1851
ilg
.AndIf();
1865
ilg
.InitElseIf();
1867
ilg
.Load(null);
1868
ilg
.AndIf(Cmp.NotEqualTo);
1872
ilg
.Else();
1879
ilg
.Ldarg(0);
1881
ilg
.Call(XmlSerializationWriter_CreateUnknownTypeException);
1882
ilg
.Throw();
1884
ilg
.EndIf();
1888
ilg
.EndIf();
1897
ilg
.Ldarg(0);
1911
ilg
.Call(XmlSerializationWriter_WriteValue);
1929
ilg
.Ldarg(0);
1930
ilg
.Call(XmlSerializationWriter_get_Writer);
1931
ilg
.Call(WriteTo);
1953
ilg
.Call(Nullable_get_HasValue);
1958
ilg
.Load(null);
1959
ilg
.Cne();
1961
ilg
.If();
1968
ilg
.Else();
1971
ilg
.EndIf();
1981
ilg
.EnterScope();
1992
ilg
.Ldloc(
ilg
.GetLocal(arrayName));
1993
ilg
.Load(null);
1994
ilg
.If(Cmp.NotEqualTo);
2002
ilg
.EndIf();
2008
ilg
.EndIf();
2011
ilg
.ExitScope();
2040
ilg
.Ldarg(0);
2041
ilg
.Ldstr(GetCSharpString(name));
2043
ilg
.Ldstr(GetCSharpString(ns));
2049
ilg
.Ldc(element.IsNullable);
2052
ilg
.Ldc(false);
2059
ilg
.Call(methodBuilder);
2070
Label ifLabel1 =
ilg
.DefineLabel();
2071
Label ifLabel2 =
ilg
.DefineLabel();
2073
ilg
.IsInst(typeof(XmlNode));
2074
ilg
.Brtrue(ifLabel1);
2076
ilg
.Load(null);
2077
ilg
.Ceq();
2078
ilg
.Br(ifLabel2);
2079
ilg
.MarkLabel(ifLabel1);
2080
ilg
.Ldc(true);
2081
ilg
.MarkLabel(ifLabel2);
2082
ilg
.If();
2086
ilg
.Else();
2093
ilg
.Ldarg(0);
2095
ilg
.Call(XmlSerializationWriter_CreateInvalidAnyTypeException);
2096
ilg
.Throw();
2098
ilg
.EndIf();
2114
ilg
.Ldarg(0);
2116
ilg
.Ldstr(GetCSharpString(name));
2117
ilg
.Ldstr(GetCSharpString(ns));
2118
ilg
.Ldc(isNullable);
2119
ilg
.Ldc(isAny);
2120
ilg
.Call(XmlSerializationWriter_func);
2128
Label labelEnd =
ilg
.DefineLabel();
2129
Label labelFalse =
ilg
.DefineLabel();
2130
Label labelTrue =
ilg
.DefineLabel();
2134
ilg
.Brfalse(labelTrue);
2137
ilg
.Brfalse(labelFalse);
2144
ilg
.Call(String_get_Length);
2145
ilg
.Ldc(0);
2146
ilg
.Cne();
2147
ilg
.Br(labelEnd);
2150
ilg
.MarkLabel(labelTrue);
2151
ilg
.Ldc(true);
2155
ilg
.MarkLabel(labelFalse);
2156
ilg
.Ldc(false);
2158
ilg
.MarkLabel(labelEnd);
2159
ilg
.If();
2166
ilg
.Load(null);
2167
ilg
.Cne();
2172
ilg
.Ldc(Convert.ChangeType(value, source.Type!, CultureInfo.InvariantCulture));
2173
ilg
.Cne();
2179
ilg
.Ldc(value is string ? GetCSharpString((string)value) : value);
2186
ilg
.Call(op_Inequality);
2188
ilg
.Cne();
2190
ilg
.If();
2196
Label labelFalse =
ilg
.DefineLabel();
2197
Label labelEnd =
ilg
.DefineLabel();
2199
ilg
.Load(null);
2200
ilg
.Beq(labelFalse);
2203
ilg
.Ldc(false);
2204
ilg
.Ceq();
2205
ilg
.Br(labelEnd);
2206
ilg
.MarkLabel(labelFalse);
2207
ilg
.Ldc(false);
2208
ilg
.MarkLabel(labelEnd);
2209
ilg
.If();
2215
ilg
.Ldarg(0);
2216
ilg
.Ldstr(GetCSharpString(typeDesc.FullName));
2217
ilg
.Ldstr(GetCSharpString(choice.MemberName));
2218
ilg
.Ldstr(GetCSharpString(enumName));
2219
ilg
.Call(XmlSerializationWriter_CreateMismatchChoiceException);
2220
ilg
.Throw();
2221
ilg
.EndIf();
2226
LocalBuilder local =
ilg
.GetLocal(source);
2228
ilg
.Load(local);
2229
ilg
.Load(null);
2230
ilg
.If(Cmp.EqualTo);
2232
ilg
.Else();
2242
ilg
.Ldarg(0);
2244
ilg
.Call(XmlSerializationWriter_WriteNamespaceDeclarations);
2260
ReflectionAwareILGen.WriteLocalDecl(variableName, new SourceInfo(initValue, initValue, null, type,
ilg
));
2269
ReflectionAwareILGen.WriteTypeCompare(variable, type,
ilg
);
2274
ReflectionAwareILGen.WriteInstanceOf(source, type,
ilg
);
2278
ReflectionAwareILGen.WriteArrayTypeCompare(variable, arrayType,
ilg
);