Exemple #1
0
 public Module(string name)
 {
     Classes = new List<Class>();
     Methods = new List<Method>();
     Fields = new List<Variant>();
     Body = null;
     Name = name;
 }
Exemple #2
0
        private void WriteMethod(Method method, BinaryWriter stream)
        {
            stream.Write(method.Name);
            stream.Write((ushort)method.ArgumentCount);
            stream.Write((ushort)method.Variables.Count);

            // TODO This is incredibly lazy and it's bulkier than Nick's Mom because of it
            stream.Write((uint)method.Instructions.Count);
            foreach (Instruction instr in method.Instructions)
            {
                stream.Write((byte)instr.Opcode);
                if (instr.Operands == null)
                {
                    stream.Write((byte)0);
                    continue;
                }

                stream.Write((byte)instr.Operands.Count);
                foreach (Variant v in instr.Operands)
                {
                    stream.Write((byte)v.Type);

                    switch (v.Type)
                    {
                        case VariantType.String:
                            stream.Write(v.StringValue);
                            break;

                        case VariantType.Double:
                            stream.Write(v.DoubleValue);
                            break;

                        case VariantType.Int64:
                            stream.Write(v.IntValue);
                            break;

                        case VariantType.Array:
                            stream.Write((uint)v.ArrayValue.Count);
                            break;

                        case VariantType.Object:
                            // TODO What to do?
                            break;

                        case VariantType.Nil:
                            break;
                    }
                }
            }
        }