public string GetValue(NativeGlobalSymbol symbol) { switch (symbol.Kind) { case NativeNameKind.Struct: return($"struct {symbol.Symbol.Name}"); case NativeNameKind.Union: return($"union {symbol.Symbol.Name}"); case NativeNameKind.FunctionPointer: return($"function pointer {symbol.Symbol.Name}"); case NativeNameKind.Procedure: return(((NativeProcedure)symbol.Symbol).Signature.DisplayName); case NativeNameKind.TypeDef: return($"typedef {symbol.Symbol.Name}"); case NativeNameKind.Constant: return(((NativeConstant)symbol.Symbol).Value.Expression); case NativeNameKind.Enum: return($"enum {symbol.Symbol.Name}"); case NativeNameKind.EnumValue: return(((NativeEnumValue)symbol.Symbol).Value.Expression); default: Contract.ThrowInvalidEnumValue(symbol.Kind); return(string.Empty); } }
private void TestRoundTrip(NativeSymbol symbol) { var storage = new BasicSymbolStorage(); var name = NativeNameUtil.GetName(symbol); var globalSymbol = new NativeGlobalSymbol(name, symbol); storage.Add(globalSymbol); TestRoundTrip(storage); }
private void WriteCore(NativeGlobalSymbol symbol) { _writer.WriteItemStart(); switch (symbol.Kind) { case NativeNameKind.Struct: case NativeNameKind.Union: WriteDefined((NativeDefinedType)symbol.Symbol); break; case NativeNameKind.FunctionPointer: WriteFunctionPointer((NativeFunctionPointer)symbol.Symbol); break; case NativeNameKind.Procedure: WriteProcedure((NativeProcedure)symbol.Symbol); break; case NativeNameKind.TypeDef: WriteTypeDef((NativeTypeDef)symbol.Symbol); break; case NativeNameKind.Constant: WriteConstant((NativeConstant)symbol.Symbol); break; case NativeNameKind.Enum: WriteEnum((NativeEnum)symbol.Symbol); break; case NativeNameKind.EnumValue: throw new Exception("Enum values are not written directly but as a part of the owning enum"); default: throw Contract.CreateInvalidEnumValueException(symbol.Kind); } _writer.WriteItemEnd(); }
private void MaybeWrite(NativeGlobalSymbol symbol) { if (IsAnyWrittenState(symbol.Name)) { return; } try { _writtenMap[symbol.Name] = false; WriteCore(symbol); _writtenMap[symbol.Name] = true; } catch { _writtenMap[symbol.Name] = null; throw; } // Once a symbol is completely exported need to process any types it encountered // during processing. WriteFoundTypes(); }
public void Write(NativeGlobalSymbol symbol) { MaybeWrite(symbol); }