Advertisement
Guest User

Untitled

a guest
May 26th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. public override TypePrinterResult VisitFieldDecl(Field field)
  2. {
  3. var safeIdentifier = SafeIdentifier(field.Name);
  4.  
  5. PushMarshalKind(MarshalKind.NativeField);
  6. var fieldTypePrinted = field.QualifiedType.CSharpType(this);
  7. PopMarshalKind();
  8.  
  9. var fieldType = field.QualifiedType.Type.Desugar().IsAddress() ?
  10. CSharpTypePrinter.IntPtrType : fieldTypePrinted.Type;
  11.  
  12. var fieldName = safeIdentifier;
  13. if (!string.IsNullOrWhiteSpace(fieldTypePrinted.NameSuffix))
  14. fieldName += fieldTypePrinted.NameSuffix;
  15.  
  16. TypePrinterResult returnTypePrinter = new TypePrinterResult();
  17. returnTypePrinter.NameSuffix =fieldType;
  18. returnTypePrinter.Type = fieldName;
  19.  
  20.  
  21. return returnTypePrinter;
  22. }
  23. =============================================================================================
  24.  
  25. Declaration decl;
  26. field.QualifiedType.Type.TryGetDeclaration(out decl);
  27.  
  28. var arrayType = field.QualifiedType.Type.Desugar() as ArrayType;
  29. var coreType = field.QualifiedType.Type.Desugar();
  30. if (arrayType != null && arrayType.SizeType == ArrayType.ArraySize.Constant)
  31. coreType = arrayType.Type.Desugar();
  32. // we do not support the primitives below yet because their representation in C# is problematic
  33. if (coreType.IsPrimitiveType(PrimitiveType.Int128) ||
  34. coreType.IsPrimitiveType(PrimitiveType.UInt128) ||
  35. coreType.IsPrimitiveType(PrimitiveType.Half))
  36. return;
  37.  
  38.  
  39. var safeIdentifier = SafeIdentifier(field.Name);
  40.  
  41.  
  42. //if (safeIdentifier == "longDouble")
  43. //{
  44. TypePrinterResult retType = TypePrinter.VisitFieldDecl(new Field { Name = field.Name, QualifiedType = field.QualifiedType });
  45. //WriteLine(retType.ToString());
  46. System.Diagnostics.Debugger.Break();
  47. //}
  48.  
  49.  
  50. if (safeIdentifier.All(c => c.Equals('_')))
  51. {
  52. safeIdentifier = SafeIdentifier(field.Name);
  53. }
  54.  
  55. PushBlock(BlockKind.Field);
  56.  
  57. if (!Options.GenerateSequentialLayout || @class.IsUnion)
  58. WriteLine($"[FieldOffset({field.Offset})]");
  59.  
  60. //TypePrinter.PushMarshalKind(MarshalKind.NativeField);
  61. //var fieldTypePrinted = field.QualifiedType.CSharpType(TypePrinter);
  62. //TypePrinter.PopMarshalKind();
  63.  
  64. //var fieldType = field.QualifiedType.Type.Desugar().IsAddress() ?
  65. // CSharpTypePrinter.IntPtrType : fieldTypePrinted.Type;
  66.  
  67. //var fieldName = safeIdentifier;
  68. //if (!string.IsNullOrWhiteSpace(fieldTypePrinted.NameSuffix))
  69. // fieldName += fieldTypePrinted.NameSuffix;
  70.  
  71. var access = decl != null && !decl.IsGenerated ? "internal" : "public";
  72. if (field.Expression != null)
  73. {
  74. var fieldValuePrinted = field.Expression.CSharpValue(ExpressionPrinter);
  75. Write($"{access} {retType.NameSuffix} {retType.Type} = {fieldValuePrinted};");
  76. }
  77. else
  78. {
  79. Write($"{access} {retType.NameSuffix} {retType.Type};");
  80. }
  81.  
  82. PopBlock(NewLineKind.BeforeNextBlock);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement