private static string GetLibrary(IPackageOrComponentDescriptor desc) { var lib = desc.Library; if (lib == null) lib = "work"; return lib; }
private void GenerateDependencies(IPackageOrComponentDescriptor desc, IndentedTextWriter tw) { foreach (var kvp in _pkgRefs.OrderBy(kvp => kvp.Key)) { bool allNonSynth = kvp.Value.All(s => !_synthPkgRefs.Contains(Tuple.Create(kvp.Key, s))); if (allNonSynth) SwitchOffSynthesis(tw); tw.WriteLine("library " + kvp.Key + ";"); foreach (string pkg in kvp.Value.OrderBy(s => s)) { bool nonSynth = !allNonSynth && !_synthPkgRefs.Contains(Tuple.Create(kvp.Key, pkg)); if (nonSynth) SwitchOffSynthesis(tw); tw.WriteLine("use " + kvp.Key + "." + pkg + ".all;"); if (nonSynth) SwitchOnSynthesis(tw); } if (allNonSynth) SwitchOnSynthesis(tw); } var pds = desc.Dependencies .Where(pd => pd != desc && !pd.IsEmpty) .GroupBy(pd => GetLibrary(pd)); foreach (var grp in pds) { tw.WriteLine("library {0};", grp.Key); foreach (var pd in grp) { tw.WriteLine("use {0}.{1}.all;", grp.Key, MakeIDName(pd.PackageName, pd)); } } tw.WriteLine("library {0};", GetLibrary(desc)); tw.WriteLine(); }
private void DecompileAndEnqueueCallees(CodeDescriptor cd, object instance, object[] arguments, MethodCallInfo mymci = null) { IPackageOrComponentDescriptor owner = cd.Owner as IPackageOrComponentDescriptor; var rmd = cd.Method.GetCustomOrInjectedAttribute <RewriteMethodDefinition>(); IDecompilationResult result; var md = cd as MethodDescriptor; var pd = cd as ProcessDescriptor; if (pd != null) { _context.CurrentProcess = pd.Instance; } else { _context.CurrentProcess = md.CallingProcess.Instance; } EVariability[] argVar; if (md == null) { argVar = new EVariability[0]; } else { argVar = md.ArgVariabilities; } if (rmd != null) { result = rmd.Rewrite(_context, cd, instance, arguments); } else if (cd.Method.IsMoveNext()) { var decomp = new AsyncMethodDecompiler(_context, cd, instance, arguments); result = decomp.Decompile(); cd.Implementation = result.Decompiled; cd.GenuineImplementation = result.Decompiled; } else { var decomp = new MSILDecompiler(cd, instance, arguments, argVar); if (cd is ProcessDescriptor) { decomp.Template.DisallowReturnStatements = true; } decomp.Template.DisallowConditionals = true; if (mymci != null) { mymci.Inherit(decomp.Template); } result = decomp.Decompile(); cd.Implementation = result.Decompiled; cd.GenuineImplementation = result.Decompiled; } foreach (var mci in result.CalledMethods) { _methodQ.Enqueue(mci); } foreach (var fri in result.ReferencedFields) { AnalyzeFieldRef(fri, cd); } _allMethods.Add(cd); }