Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public override TypePrinterResult VisitFieldDecl(Field field)
- {
- var safeIdentifier = SafeIdentifier(field.Name);
- PushMarshalKind(MarshalKind.NativeField);
- var fieldTypePrinted = field.QualifiedType.CSharpType(this);
- PopMarshalKind();
- var fieldType = field.QualifiedType.Type.Desugar().IsAddress() ?
- CSharpTypePrinter.IntPtrType : fieldTypePrinted.Type;
- var fieldName = safeIdentifier;
- if (!string.IsNullOrWhiteSpace(fieldTypePrinted.NameSuffix))
- fieldName += fieldTypePrinted.NameSuffix;
- TypePrinterResult returnTypePrinter = new TypePrinterResult();
- returnTypePrinter.NameSuffix =fieldType;
- returnTypePrinter.Type = fieldName;
- return returnTypePrinter;
- }
- =============================================================================================
- Declaration decl;
- field.QualifiedType.Type.TryGetDeclaration(out decl);
- var arrayType = field.QualifiedType.Type.Desugar() as ArrayType;
- var coreType = field.QualifiedType.Type.Desugar();
- if (arrayType != null && arrayType.SizeType == ArrayType.ArraySize.Constant)
- coreType = arrayType.Type.Desugar();
- // we do not support the primitives below yet because their representation in C# is problematic
- if (coreType.IsPrimitiveType(PrimitiveType.Int128) ||
- coreType.IsPrimitiveType(PrimitiveType.UInt128) ||
- coreType.IsPrimitiveType(PrimitiveType.Half))
- return;
- var safeIdentifier = SafeIdentifier(field.Name);
- //if (safeIdentifier == "longDouble")
- //{
- TypePrinterResult retType = TypePrinter.VisitFieldDecl(new Field { Name = field.Name, QualifiedType = field.QualifiedType });
- //WriteLine(retType.ToString());
- System.Diagnostics.Debugger.Break();
- //}
- if (safeIdentifier.All(c => c.Equals('_')))
- {
- safeIdentifier = SafeIdentifier(field.Name);
- }
- PushBlock(BlockKind.Field);
- if (!Options.GenerateSequentialLayout || @class.IsUnion)
- WriteLine($"[FieldOffset({field.Offset})]");
- //TypePrinter.PushMarshalKind(MarshalKind.NativeField);
- //var fieldTypePrinted = field.QualifiedType.CSharpType(TypePrinter);
- //TypePrinter.PopMarshalKind();
- //var fieldType = field.QualifiedType.Type.Desugar().IsAddress() ?
- // CSharpTypePrinter.IntPtrType : fieldTypePrinted.Type;
- //var fieldName = safeIdentifier;
- //if (!string.IsNullOrWhiteSpace(fieldTypePrinted.NameSuffix))
- // fieldName += fieldTypePrinted.NameSuffix;
- var access = decl != null && !decl.IsGenerated ? "internal" : "public";
- if (field.Expression != null)
- {
- var fieldValuePrinted = field.Expression.CSharpValue(ExpressionPrinter);
- Write($"{access} {retType.NameSuffix} {retType.Type} = {fieldValuePrinted};");
- }
- else
- {
- Write($"{access} {retType.NameSuffix} {retType.Type};");
- }
- PopBlock(NewLineKind.BeforeNextBlock);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement