Esempio n. 1
0
        public static string Format(IlProgram program, CodeFormatSettings?formatSettings = null)
        {
            var instance = new CodeFormatter();

            instance.FormatInternal(program, formatSettings ?? DefaultFormatSettings);

            return(instance._builder.ToString());
        }
Esempio n. 2
0
        private void FormatInternal(IlProgram program, CodeFormatSettings formatSettings)
        {
            for (var idx = 0; idx < program.IlMethods.Count; idx++)
            {
                if (idx != 0)
                {
                    _builder.AppendLine();
                }

                var method     = (IlMethod)program.IlMethods[idx];
                var methodName = program.MethodNames[method.Address];

                _builder.Append(SyntaxFacts.GetAttributeText(SyntaxKind.Attribute_Method));
                _builder.Append(' ');
                _builder.Append(methodName);
                _builder.AppendLine(":");

                if (method.Address == program.EntryPoint)
                {
                    _builder.Append(' ', formatSettings.LineIndentSize);
                    _builder.AppendLine(SyntaxFacts.GetAttributeText(SyntaxKind.Attribute_Entrypoint));
                }

                if (method.Args != 0)
                {
                    _builder.Append(' ', formatSettings.LineIndentSize);
                    _builder.Append(SyntaxFacts.GetAttributeText(SyntaxKind.Attribute_Args));
                    _builder.Append(' ');
                    _builder.AppendLine(method.Args.ToString());
                }

                var locals = GetLocalsSize(method.IlObjects);

                if (locals != 0)
                {
                    _builder.Append(' ', formatSettings.LineIndentSize);
                    _builder.Append(SyntaxFacts.GetAttributeText(SyntaxKind.Attribute_Locals));
                    _builder.Append(' ');
                    _builder.AppendLine(locals.ToString());
                }

                FormatMethod(method, program, formatSettings);
            }
Esempio n. 3
0
        public static byte[] Emit(IlProgram program)
        {
            var binaryCode = new List <byte>();

            var entryPoint = BinaryConvert.GetBytes(program.EntryPoint.Value);

            binaryCode.AddRange(entryPoint);

            foreach (var ilMethod in program.IlMethods)
            {
                binaryCode.Add(ilMethod.Args);

                foreach (var ilObj in ilMethod.IlObjects)
                {
                    var code = EmitObject(ilObj.Obj);
                    binaryCode.AddRange(code);
                }
            }

            return(binaryCode.ToArray());
        }