public string DumpApi(SignatureWriter WriteSignature, DumpPostProcesser postProcess = null)
        {
            if (Database == null)
            {
                throw new Exception("Cannot Dump API without a ReflectionDatabase provided.");
            }

            buffer.Clear();

            foreach (ClassDescriptor classDesc in Database.Classes.Values)
            {
                WriteSignature(this, classDesc, 0);
                NextLine();

                foreach (MemberDescriptor memberDesc in sorted(classDesc.Members))
                {
                    WriteSignature(this, memberDesc, 1);
                    NextLine();
                }
            }

            foreach (EnumDescriptor enumDesc in Database.Enums.Values)
            {
                WriteSignature(this, enumDesc, 0);
                NextLine();

                foreach (EnumItemDescriptor itemDesc in sorted(enumDesc.Items))
                {
                    WriteSignature(this, itemDesc, 1);
                    NextLine();
                }
            }

            return(ExportResults(postProcess));
        }
Ejemplo n.º 2
0
 public override void Write(SignatureWriter wtr)
 {
     wtr.Write(Element);
     wtr.Write(vt ? ElementType.ValueType : ElementType.Class);
     wtr.WriteTypeDefOrRefEncoded(t);
     ts.Write(wtr);
 }
Ejemplo n.º 3
0
		public void Write() {
			uint codeSize = InitializeInstructionOffsets();
			jitBody.MaxStack = keepMaxStack ? body.MaxStack : GetMaxStack();

			jitBody.Options = 0;
			if (body.InitLocals)
				jitBody.Options |= 0x10;

			if (body.Variables.Count > 0) {
				var local = new LocalSig(body.Variables.Select(var => var.Type).ToList());
				jitBody.LocalVars = SignatureWriter.Write(metadata, local);
			}
			else
				jitBody.LocalVars = new byte[0];

			using (var ms = new MemoryStream()) {
				uint _codeSize = WriteInstructions(new BinaryWriter(ms));
				Debug.Assert(codeSize == _codeSize);
				jitBody.ILCode = ms.ToArray();
			}

			jitBody.EHs = new JITEHClause[exceptionHandlers.Count];
			if (exceptionHandlers.Count > 0) {
				jitBody.Options |= 8;
				for (int i = 0; i < exceptionHandlers.Count; i++) {
					ExceptionHandler eh = exceptionHandlers[i];
					jitBody.EHs[i].Flags = (uint)eh.HandlerType;

					uint tryStart = GetOffset(eh.TryStart);
					uint tryEnd = GetOffset(eh.TryEnd);
					jitBody.EHs[i].TryOffset = tryStart;
					jitBody.EHs[i].TryLength = tryEnd - tryStart;

					uint handlerStart = GetOffset(eh.HandlerStart);
					uint handlerEnd = GetOffset(eh.HandlerEnd);
					jitBody.EHs[i].HandlerOffset = handlerStart;
					jitBody.EHs[i].HandlerLength = handlerEnd - handlerStart;

					if (eh.HandlerType == ExceptionHandlerType.Catch) {
						uint token = metadata.GetToken(eh.CatchType).Raw;
						if ((token & 0xff000000) == 0x1b000000)
							jitBody.Options |= 0x80;

						jitBody.EHs[i].ClassTokenOrFilterOffset = token;
					}
					else if (eh.HandlerType == ExceptionHandlerType.Filter) {
						jitBody.EHs[i].ClassTokenOrFilterOffset = GetOffset(eh.FilterStart);
					}
				}
			}
		}
Ejemplo n.º 4
0
 public override byte[] Compute()
 {
     using (Operation op = L.Begin("Build file signature for file {file}", File.FullName))
     {
         using (FileStream basisStream = File.Open(FileMode.Open, FileAccess.Read, FileShare.Read))
             using (MemoryStream ms = new MemoryStream())
             {
                 SignatureWriter  octoSigWriter    = new SignatureWriter(ms);
                 SignatureBuilder signatureBuilder = new SignatureBuilder();
                 signatureBuilder.ProgressReporter = new OctoSigBuildProgressReporter(File);
                 signatureBuilder.Build(basisStream, octoSigWriter);
                 ComputedDateTime = DateTime.UtcNow;
                 op.Complete();
                 return(ComputedSignature = ms.ToArray());
             }
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        ///     Returns the given signature, remapped with the
        ///     <see cref="SignatureVisitor" />
        ///     returned by
        ///     <see cref="CreateSignatureRemapper" />
        ///     .
        /// </summary>
        /// <param name="signature">
        ///     a <i>JavaTypeSignature</i>, <i>ClassSignature</i> or <i>MethodSignature</i>.
        /// </param>
        /// <param name="typeSignature">
        ///     whether the given signature is a <i>JavaTypeSignature</i>.
        /// </param>
        /// <returns>
        ///     signature the given signature, remapped with the
        ///     <see cref="SignatureVisitor" />
        ///     returned by
        ///     <see cref="CreateSignatureRemapper" />
        ///     .
        /// </returns>
        public virtual string MapSignature(string signature, bool typeSignature)
        {
            if (signature == null)
            {
                return(null);
            }
            var signatureReader   = new SignatureReader(signature);
            var signatureWriter   = new SignatureWriter();
            var signatureRemapper = CreateSignatureRemapper(signatureWriter);

            if (typeSignature)
            {
                signatureReader.AcceptType(signatureRemapper);
            }
            else
            {
                signatureReader.Accept(signatureRemapper);
            }
            return(signatureWriter.ToString());
        }
Ejemplo n.º 6
0
 public override void Write(SignatureWriter wtr)
 {
     wtr.Write(Element);
 }
Ejemplo n.º 7
0
 public override void Write(SignatureWriter wtr)
 {
     wtr.Write(Element);
     wtr.WriteCompressedInt(num);
 }
Ejemplo n.º 8
0
 public override void Write(SignatureWriter wtr)
 {
     wtr.Write(Element);
     wtr.WriteTypeDefOrRefEncoded(tkn);
 }
Ejemplo n.º 9
0
    public static int Main(string[] args)
    {
        if (args.Length < 2 || args.Length > 2)
        {
            WriteUsage();
            return(1);
        }

        var inputFile = args[0];

        if (!File.Exists(inputFile))
        {
            Console.WriteLine(Directory.GetCurrentDirectory());
            Console.WriteLine(inputFile + " not found.");
            return(1);
        }

        var    writeSource     = true;
        var    writeSignatures = false;
        string outputFile      = null;

        if (args.Length == 2)
        {
            if (args[1] == "/sig")
            {
                writeSignatures = true;
            }
            else
            {
                outputFile = args[1];
            }
        }

        var reader = XmlReader.Create(inputFile, new XmlReaderSettings {
            DtdProcessing = DtdProcessing.Prohibit
        });
        var serializer = new XmlSerializer(typeof(Tree));
        var tree       = (Tree)serializer.Deserialize(reader);

        if (writeSignatures)
        {
            SignatureWriter.Write(Console.Out, tree);
        }
        else
        {
            if (writeSource)
            {
                var outputPath         = outputFile.Trim('"');
                var prefix             = Path.GetFileName(inputFile);
                var outputMainFile     = Path.Combine(outputPath, $"{prefix}.Main.Generated.cs");
                var outputInternalFile = Path.Combine(outputPath, $"{prefix}.Internal.Generated.cs");
                var outputSyntaxFile   = Path.Combine(outputPath, $"{prefix}.Syntax.Generated.cs");

                WriteToFile(tree, SourceWriter.WriteMain, outputMainFile);
                WriteToFile(tree, SourceWriter.WriteInternal, outputInternalFile);
                WriteToFile(tree, SourceWriter.WriteSyntax, outputSyntaxFile);
            }
            //if (writeTests)
            //{
            //    WriteToFile(tree, TestWriter.Write, outputFile);
            //}
        }

        return(0);
    }