Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
        }
Пример #4
0
        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();
        }
Пример #5
0
 public void Write(NativeGlobalSymbol symbol)
 {
     MaybeWrite(symbol);
 }