public void FindOrLoad3() { var ns = new BasicSymbolStorage(); ns.AddConstant(new NativeConstant("c1", "value")); NativeSymbolBag bag = new NativeSymbolBag(ns); NativeConstant c = null; Assert.False(bag.Storage.TryGetGlobalSymbol("c1", out c)); Assert.True(bag.TryGetGlobalSymbol("c1", out c)); Assert.True(bag.TryGetGlobalSymbol("c1", out c)); }
public void FindOrLoad2() { var ns = new BasicSymbolStorage(); ns.AddTypeDef(new NativeTypeDef("td", new NativeBuiltinType(BuiltinType.NativeChar))); NativeSymbolBag bag = new NativeSymbolBag(ns); NativeTypeDef td = null; Assert.False(bag.Storage.TryGetGlobalSymbol("td", out td)); Assert.True(bag.TryGetGlobalSymbol("td", out td)); Assert.True(bag.TryGetGlobalSymbol("td", out td)); }
public void FindOrLoad1() { var ns = new BasicSymbolStorage(); ns.AddDefinedType(new NativeStruct("s1")); NativeSymbolBag bag = new NativeSymbolBag(ns); NativeDefinedType s1 = null; Assert.False(bag.Storage.TryGetGlobalSymbol("s1", out s1)); Assert.True(bag.TryGetGlobalSymbol("s1", out s1)); Assert.True(bag.TryGetGlobalSymbol("s1", out s1)); }
public void FindOrLoad4() { var ns = new BasicSymbolStorage(); NativeProcedure p1 = new NativeProcedure("p1"); p1.Signature.ReturnType = new NativeBuiltinType(BuiltinType.NativeBoolean); ns.AddProcedure(p1); NativeSymbolBag bag = new NativeSymbolBag(ns); NativeProcedure p = null; Assert.False(bag.Storage.TryGetGlobalSymbol("p1", out p)); Assert.True(bag.TryGetGlobalSymbol("p1", out p)); Assert.True(bag.TryGetGlobalSymbol("p1", out p)); }
public void BagSaveAndLoad1() { NativeProcedure p1 = new NativeProcedure("p1"); p1.Signature.ReturnType = new NativeBuiltinType(BuiltinType.NativeBoolean); NativeTypeDef td = new NativeTypeDef("LPWSTR", new NativePointer(BuiltinType.NativeWChar)); p1.Signature.Parameters.Add(new NativeParameter("param1", new NativeNamedType("LPWSTR", td))); Assert.Equal("boolean p1(LPWSTR param1)", p1.DisplayName); Assert.Equal("p1(Sig(boolean)(Sal)(param1(LPWSTR(LPWSTR(*(wchar))))(Sal)))", SymbolPrinter.Convert(p1)); var ns = new BasicSymbolStorage(); ns.AddProcedure(p1); ns.AddTypeDef(td); NativeSymbolBag bag = new NativeSymbolBag(ns); NativeProcedure ret1 = null; Assert.True(bag.TryGetGlobalSymbol("p1", out ret1)); bag.AddProcedure(ret1); Assert.True(bag.TryResolveSymbolsAndValues()); Assert.Equal(SymbolPrinter.Convert(p1), SymbolPrinter.Convert(ret1)); }
public void ResolveLoad1() { var ns = new BasicSymbolStorage(); ns.AddDefinedType(new NativeStruct("s1")); NativeSymbolBag bag = new NativeSymbolBag(ns); bag.AddTypeDef(new NativeTypeDef("S1", "s1")); Assert.True(bag.TryResolveSymbolsAndValues()); NativeDefinedType td = null; Assert.True(bag.TryGetGlobalSymbol("s1", out td)); }
/// <summary> /// Make sure that any NativeDefinedType referenced is in the bag. That way if we /// have structures which point to other NativeDefinedType instances, they are automagically /// put into the bag /// </summary> /// <param name="bag"></param> /// <remarks></remarks> private void ChaseReferencedDefinedTypes(NativeSymbolBag bag) { bag.TryResolveSymbolsAndValues(); foreach (NativeSymbol sym in bag.FindAllReachableNativeSymbols()) { if (NativeSymbolCategory.Defined == sym.Category) { NativeDefinedType defined = null; if (!bag.TryGetGlobalSymbol(sym.Name, out defined)) { bag.AddDefinedType((NativeDefinedType)sym); } } } }
public void ResolveLoad2() { var ns = new BasicSymbolStorage(); ns.AddTypeDef(new NativeTypeDef("TEST_INT", BuiltinType.NativeInt32)); NativeStruct s1 = new NativeStruct("s1"); s1.Members.Add(new NativeMember("m1", new NativeNamedType("TEST_INT"))); NativeSymbolBag bag = new NativeSymbolBag(ns); bag.AddDefinedType(s1); Assert.True(bag.TryResolveSymbolsAndValues()); NativeTypeDef td = null; Assert.True(bag.TryGetGlobalSymbol("TEST_INT", out td)); }