Exemple #1
0
        private static byte[] EmitObject(object obj)
        {
            // TODO (RH -): add decimal type handling
            var code = obj switch
            {
                InstructionCode instruction => BinaryConvert.GetBytes(instruction),
                string text => BinaryConvert.GetBytes(text),
                int value => BinaryConvert.GetBytes(value),
                _ => throw new ArgumentOutOfRangeException(nameof(obj), obj.GetType().Name, null)
            };

            return(code);
        }
    }
Exemple #2
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());
        }