public void ConvTypeTest() { Assert.AreEqual("Null", FuncExport.ConvType(null)); Assert.AreEqual("Void", FuncExport.ConvType(FuncExport.Void)); Assert.AreEqual("String", FuncExport.ConvType(Convert(typeof(string)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(BigInteger)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(char)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(byte)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(sbyte)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(short)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(ushort)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(int)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(uint)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(long)))); Assert.AreEqual("Integer", FuncExport.ConvType(Convert(typeof(ulong)))); Assert.AreEqual("Boolean", FuncExport.ConvType(Convert(typeof(bool)))); Assert.AreEqual("ByteArray", FuncExport.ConvType(Convert(typeof(byte[])))); Assert.AreEqual("Any", FuncExport.ConvType(Convert(typeof(object)))); Assert.AreEqual("Array", FuncExport.ConvType(Convert(typeof(object[])))); Assert.AreEqual("Array", FuncExport.ConvType(Convert(typeof(int[])))); Assert.AreEqual("Array", FuncExport.ConvType(Convert(typeof(bool[])))); Assert.IsTrue(FuncExport.ConvType(Convert(typeof(Action <int>))).StartsWith("Unknown:Pointers are not allowed to be public 'System.Action`1")); Assert.IsTrue(FuncExport.ConvType(Convert(typeof(Func <int, bool>))).StartsWith("Unknown:Pointers are not allowed to be public 'System.Func`2")); Assert.AreEqual("Array", FuncExport.ConvType(Convert(typeof(Tuple <int, bool>)))); Assert.AreEqual("Array", FuncExport.ConvType(Convert(typeof(Tuple <int, bool>[])))); }
public override string ToString() { return(FuncExport.ConvType(type)); }
public void Build(Stream fs, Stream fspdb, bool optimizer) { this.IsBuild = false; this.Error = null; this.UseOptimizer = optimizer; var log = new DefLogger(); this.modIL = new ILModule(log); try { modIL.LoadModule(fs, fspdb); } catch (Exception err) { log.Log("LoadModule Error:" + err.ToString()); this.Error = err; return; } converterIL = new ModuleConverter(log); Dictionary <int, int> addrConvTable = null; ConvOption option = new ConvOption(); #if NDEBUG try #endif { converterIL.Convert(modIL, option); finalNEFScript = converterIL.outModule.Build(); if (optimizer) { List <int> entryPoints = new List <int>(); foreach (var f in converterIL.outModule.mapMethods.Values) { if (!entryPoints.Contains(f.funcaddr)) { entryPoints.Add(f.funcaddr); } } var opbytes = NefOptimizeTool.Optimize(finalNEFScript, entryPoints.ToArray(), out addrConvTable); float ratio = (opbytes.Length * 100.0f) / (float)finalNEFScript.Length; log.Log("optimization ratio = " + ratio + "%"); finalNEFScript = opbytes; } IsBuild = true; } #if NDEBUG catch (Exception err) { this.Error = err; log.Log("Convert IL->ASM Error:" + err.ToString()); return; } #endif try { finalABI = FuncExport.GenerateAbi(converterIL.outModule, addrConvTable); } catch (Exception err) { log.Log("Gen Abi Error:" + err.ToString()); this.Error = err; return; } try { debugInfo = DebugExport.Export(converterIL.outModule, finalNEFScript, addrConvTable); } catch (Exception err) { log.Log("Gen debugInfo Error:" + err.ToString()); this.Error = err; return; } try { finalManifest = FuncExport.GenerateManifest(finalABI, converterIL.outModule); } catch (Exception err) { log.Log("Gen Manifest Error:" + err.ToString()); this.Error = err; return; } }
public void Build(Stream fs, Stream fspdb, bool optimizer) { this.IsBuild = false; this.Error = null; this.UseOptimizer = optimizer; var log = new DefLogger(); this.modIL = new ILModule(log); try { modIL.LoadModule(fs, fspdb); } catch (Exception err) { log.Log("LoadModule Error:" + err.ToString()); this.Error = err; return; } converterIL = new ModuleConverter(log); Dictionary <int, int> addrConvTable = null; ConvOption option = new ConvOption(); #if NDEBUG try #endif { converterIL.Convert(modIL, option); finalNEFScript = converterIL.outModule.Build(); if (optimizer) { List <int> entryPoints = new List <int>(); foreach (var f in converterIL.outModule.mapMethods.Values) { if (!entryPoints.Contains(f.funcaddr)) { entryPoints.Add(f.funcaddr); } } var opbytes = NefOptimizeTool.Optimize(finalNEFScript, entryPoints.ToArray(), out addrConvTable); float ratio = (opbytes.Length * 100.0f) / (float)finalNEFScript.Length; log.Log("optimization ratio = " + ratio + "%"); finalNEFScript = opbytes; } IsBuild = true; } #if NDEBUG catch (Exception err) { this.Error = err; log.Log("Convert IL->ASM Error:" + err.ToString()); return; } #endif try { finalABI = FuncExport.GenerateAbi(converterIL.outModule, addrConvTable); } catch (Exception err) { log.Log("Gen Abi Error:" + err.ToString()); this.Error = err; return; } try { debugInfo = DebugExport.Export(converterIL.outModule, finalNEFScript, addrConvTable); } catch (Exception err) { log.Log("Gen debugInfo Error:" + err.ToString()); this.Error = err; return; } try { finalManifest = FuncExport.GenerateManifest(finalABI, converterIL.outModule); } catch (Exception err) { log.Log("Gen Manifest Error:" + err.ToString()); this.Error = err; return; } try { nefFile = new NefFile { Compiler = "neon-" + Version.Parse(((AssemblyFileVersionAttribute)Assembly.GetAssembly(typeof(Program)) .GetCustomAttribute(typeof(AssemblyFileVersionAttribute))).Version).ToString(), Tokens = converterIL.methodTokens.ToArray(), Script = finalNEFScript }; nefFile.CheckSum = NefFile.ComputeChecksum(nefFile); } catch (Exception err) { log.Log("Write Bytes Error:" + err.ToString()); return; } }