public static T GetGlobalSymbol <T>(this INativeSymbolLookup lookup, NativeName name) where T : NativeSymbol { var symbol = GetGlobalSymbol(lookup, name); return((T)symbol.Symbol); }
public NativeGlobalSymbol(NativeName name, NativeSymbol symbol) { Contract.Requires(name.SymbolKind == symbol.Kind); Contract.Requires(name.Name == symbol.Name); Contract.Requires(name == NativeNameUtil.GetName(symbol)); Name = name; Symbol = symbol; }
public static bool TryGetName(NativeSymbol symbol, out NativeName name) { NativeNameKind kind; if (!TryGetNativeNameKind(symbol.Kind, out kind)) { name = NativeName.Nil; return(false); } name = new NativeName(symbol.Name, kind); return(true); }
/// <summary> /// Do a lookup for a symbol with a specific name of the specified type. /// </summary> internal static bool TryGetGlobalSymbolExhaustive(this INativeSymbolLookup lookup, string name, out NativeGlobalSymbol symbol) { foreach (var kind in Enum.GetValues(typeof(NativeNameKind)).Cast <NativeNameKind>()) { var nativeName = new NativeName(name, kind); if (lookup.TryGetGlobalSymbol(nativeName, out symbol)) { return(true); } } symbol = default(NativeGlobalSymbol); return(false); }
/// <summary> /// Do a lookup for a symbol with a specific name of the specified type. /// </summary> public static bool TryGetGlobalSymbol <T>(this INativeSymbolLookup lookup, NativeName name, out T symbol) where T : NativeSymbol { NativeGlobalSymbol globalSymbol; if (!lookup.TryGetGlobalSymbol(name, out globalSymbol)) { symbol = null; return(false); } symbol = globalSymbol.Symbol as T; return(symbol != null); }
public bool TryGetGlobalSymbol(NativeName name, out NativeGlobalSymbol symbol) => _storage.TryGetGlobalSymbol(name, out symbol) || _nextSymbolLookup.TryGetGlobalSymbol(name, out symbol);
public bool TryGetGlobalSymbol(NativeName name, out NativeGlobalSymbol symbol) { symbol = default(NativeGlobalSymbol); return(false); }
public static bool Contains(this INativeSymbolLookup lookup, NativeName name) { NativeGlobalSymbol symbol; return(lookup.TryGetGlobalSymbol(name, out symbol)); }
public static NativeGlobalSymbol GetGlobalSymbol(this INativeSymbolLookup lookup, NativeName name) { NativeGlobalSymbol symbol; if (!lookup.TryGetGlobalSymbol(name, out symbol)) { throw new Exception($"Unable to get symbol {name}"); } return(symbol); }
public bool TryGetGlobalSymbol(NativeName name, out NativeGlobalSymbol symbol) { switch (name.Kind) { case NativeNameKind.Struct: case NativeNameKind.Union: case NativeNameKind.FunctionPointer: case NativeNameKind.Enum: { NativeDefinedType definedType; if (_definedMap.TryGetValue(name.Name, out definedType)) { symbol = new NativeGlobalSymbol(definedType); return(true); } } break; case NativeNameKind.Procedure: { NativeProcedure proc; if (_procMap.TryGetValue(name.Name, out proc)) { symbol = new NativeGlobalSymbol(proc); return(true); } } break; case NativeNameKind.TypeDef: { NativeTypeDef typeDef; if (_typeDefMap.TryGetValue(name.Name, out typeDef)) { symbol = new NativeGlobalSymbol(typeDef); return(true); } } break; case NativeNameKind.Constant: { NativeConstant constant; if (_constMap.TryGetValue(name.Name, out constant)) { symbol = new NativeGlobalSymbol(constant); return(true); } } break; case NativeNameKind.EnumValue: { NativeEnumValue value; if (_enumValueMap.TryGetValue(name.Name, out value)) { symbol = new NativeGlobalSymbol(value); return(true); } } break; default: Contract.ThrowInvalidEnumValue(name.Kind); break; } symbol = default(NativeGlobalSymbol); return(false); }