Esempio n. 1
0
        public void TestPublicSetterOnGenericVariable2()
        {
            ISetAccessor accessorSet = factorySet.CreateSetAccessor(typeof(SpecialReference <Account>), "Value");

            SpecialReference <Account> referenceAccount = new SpecialReference <Account>();
            Account account = new Account(5);

            accessorSet.Set(referenceAccount, account);

            Assert.AreEqual(account, referenceAccount.Value);
            Assert.AreEqual(account.Id, referenceAccount.Value.Id);
        }
Esempio n. 2
0
 private static string FormatSpecialReference(SpecialReference reference)
 {
     if (reference.GetType() == typeof(CountSpecialReference))
     {
         return("COUNT(*)");
     }
     if (reference.GetType() == typeof(ExistsSpecialReference))
     {
         return("DISTINCT 1");
     }
     throw new InvalidOperationException("SpecialReference type not recognised.");
 }
Esempio n. 3
0
        public void TestPrivateSetterOnGenericVariable()
        {
            ISetAccessor accessorSet = factorySet.CreateSetAccessor(typeof(PropertySon), "_referenceAccount");

            PropertySon son = new PropertySon();
            SpecialReference <Account> referenceAccount = new SpecialReference <Account>();
            Account account = new Account(5);

            referenceAccount.Value = account;
            accessorSet.Set(son, referenceAccount);

            Assert.AreEqual(son.ReferenceAccount, referenceAccount);
            Assert.AreEqual(son.ReferenceAccount.Value.Id, referenceAccount.Value.Id);
        }
Esempio n. 4
0
        public void TestPrivateGetterOnGenericProperty2()
        {
            IGetAccessor accessorGet = factoryGet.CreateGetAccessor(typeof(SpecialReference <Account>), "_value");

            SpecialReference <Account> referenceAccount = new SpecialReference <Account>();
            Account account = new Account(5);

            referenceAccount.Value = account;

            Account acc = accessorGet.Get(referenceAccount) as Account;

            Assert.AreEqual(referenceAccount.Value, acc);
            Assert.AreEqual(referenceAccount.Value.Id, acc.Id);
        }
Esempio n. 5
0
        public void TestPrivateGetterOnGenericProperty()
        {
            IGetAccessor accessorGet = factoryGet.CreateGetAccessor(typeof(PropertySon), "_referenceAccount");

            PropertySon son = new PropertySon();

            son.ReferenceAccount = new SpecialReference <Account>();
            Account account = new Account(5);

            son.ReferenceAccount.Value = account;

            SpecialReference <Account> acc = accessorGet.Get(son) as SpecialReference <Account>;

            Assert.AreEqual(account, acc.Value);
            Assert.AreEqual(account.Id, acc.Value.Id);
        }
Esempio n. 6
0
        public Instruction ParseSingle(ParseState ParseState)
        {
            var InstructionPosition = Stream.Position;
            var OpcodeNum = BinaryReader.ReadUInt16();
            if (!Opcodes.ContainsKey(OpcodeNum))
            {
                throw(new NotImplementedException(String.Format("Unhandled opcode 0x{0:X2}", OpcodeNum)));
            }
            var Opcode = Opcodes[OpcodeNum];
            var Params = new List<object>();

            foreach (var FormatChar in Opcode.Format)
            {
                switch (FormatChar)
                {
                    case '<': break;
                    case 's': Params.Add(ReadString()); break;
                    case 'S': Params.Add(ReadStringz()); break;
                    case '1': Params.Add(BinaryReader.ReadByte()); break;
                    case '7': Params.Add((AritmeticOps)BinaryReader.ReadByte()); break;
                    case '9': Params.Add((ComparisionOps)BinaryReader.ReadByte()); break;
                    case '2': Params.Add(BinaryReader.ReadInt16()); break;
                    case 'v': Params.Add(new VariableReference() { Index = BinaryReader.ReadUInt16() }); break;
                    case '4': Params.Add(BinaryReader.ReadUInt32()); break;
                    case 'L': Params.Add(new LabelReference() { Offset = BinaryReader.ReadUInt32() }); break;
                    case 'P':
                        {
                            var ParamType = BinaryReader.ReadByte();
                            object Value = null;
                            switch (ParamType)
                            {
                                case 0x00: Value = BinaryReader.ReadSByte(); break;
                                case 0x10: Value = BinaryReader.ReadByte(); break;
                                case 0x20: Value = BinaryReader.ReadInt16(); break;
                                case 0x40: Value = BinaryReader.ReadInt32(); break;
                                case 0x01: Value = new VariableReference() { Index = BinaryReader.ReadUInt16() }; break;
                                case 0x02: Value = new SpecialReference() { Index = BinaryReader.ReadUInt16() }; break;
                                default: throw (new NotImplementedException(String.Format("Invalid param type {0}", ParamType)));
                            }

                            Params.Add(Value);
                        }
                        break;
                    default:
                        throw(new NotImplementedException(String.Format("Invalid format '{0}'", FormatChar)));
                }
            }

            try
            {
                if (ParseState.Unindent.Contains((uint)InstructionPosition))
                {
                    ParseState.Indent--;
                }
                switch (Opcode.OpcodeName)
                {
                    case "JUMP_ALWAYS":
                        ParseState.Indent--;
                        break;
                }

                return new Instruction()
                {
                    Position = (uint)InstructionPosition,
                    Opcode = Opcode,
                    Parameters = Params.ToArray(),
                    Indent = ParseState.Indent,
                };
            }
            finally
            {
                switch (Opcode.OpcodeName)
                {
                    //case "FUNCTION_DEF":
                    case "JUMP_IF":
                        ParseState.Unindent.Add(((LabelReference)(Params.ToArray()[3])).Offset);
                        ParseState.Indent++;
                        break;
                    case "JUMP_ALWAYS":
                        ParseState.Unindent.Add(((LabelReference)(Params.ToArray()[0])).Offset);
                        ParseState.Indent += 2;
                        break;
                }
            }
        }
Esempio n. 7
0
 private static string FormatSpecialReference(SpecialReference reference)
 {
     if (reference.GetType() == typeof(CountSpecialReference)) return "COUNT(*)";
     if (reference.GetType() == typeof(ExistsSpecialReference)) return "DISTINCT 1";
     throw new InvalidOperationException("SpecialReference type not recognised.");
 }
Esempio n. 8
0
        public Instruction ParseSingle(ParseState ParseState)
        {
            var InstructionPosition = Stream.Position;
            var OpcodeNum           = BinaryReader.ReadUInt16();

            if (!Opcodes.ContainsKey(OpcodeNum))
            {
                throw(new NotImplementedException(String.Format("Unhandled opcode 0x{0:X2}", OpcodeNum)));
            }
            var Opcode = Opcodes[OpcodeNum];
            var Params = new List <object>();

            foreach (var FormatChar in Opcode.Format)
            {
                switch (FormatChar)
                {
                case '<': break;

                case 's': Params.Add(ReadString()); break;

                case 'S': Params.Add(ReadStringz()); break;

                case '1': Params.Add(BinaryReader.ReadByte()); break;

                case '7': Params.Add((AritmeticOps)BinaryReader.ReadByte()); break;

                case '9': Params.Add((ComparisionOps)BinaryReader.ReadByte()); break;

                case '2': Params.Add(BinaryReader.ReadInt16()); break;

                case 'v': Params.Add(new VariableReference()
                    {
                        Index = BinaryReader.ReadUInt16()
                    }); break;

                case '4': Params.Add(BinaryReader.ReadUInt32()); break;

                case 'L': Params.Add(new LabelReference()
                    {
                        Offset = BinaryReader.ReadUInt32()
                    }); break;

                case 'P':
                {
                    var    ParamType = BinaryReader.ReadByte();
                    object Value     = null;
                    switch (ParamType)
                    {
                    case 0x00: Value = BinaryReader.ReadSByte(); break;

                    case 0x10: Value = BinaryReader.ReadByte(); break;

                    case 0x20: Value = BinaryReader.ReadInt16(); break;

                    case 0x40: Value = BinaryReader.ReadInt32(); break;

                    case 0x01: Value = new VariableReference()
                    {
                            Index = BinaryReader.ReadUInt16()
                    }; break;

                    case 0x02: Value = new SpecialReference()
                    {
                            Index = BinaryReader.ReadUInt16()
                    }; break;

                    default: throw (new NotImplementedException(String.Format("Invalid param type {0}", ParamType)));
                    }

                    Params.Add(Value);
                }
                break;

                default:
                    throw(new NotImplementedException(String.Format("Invalid format '{0}'", FormatChar)));
                }
            }

            try
            {
                if (ParseState.Unindent.Contains((uint)InstructionPosition))
                {
                    ParseState.Indent--;
                }
                switch (Opcode.OpcodeName)
                {
                case "JUMP_ALWAYS":
                    ParseState.Indent--;
                    break;
                }

                return(new Instruction()
                {
                    Position = (uint)InstructionPosition,
                    Opcode = Opcode,
                    Parameters = Params.ToArray(),
                    Indent = ParseState.Indent,
                });
            }
            finally
            {
                switch (Opcode.OpcodeName)
                {
                //case "FUNCTION_DEF":
                case "JUMP_IF":
                    ParseState.Unindent.Add(((LabelReference)(Params.ToArray()[3])).Offset);
                    ParseState.Indent++;
                    break;

                case "JUMP_ALWAYS":
                    ParseState.Unindent.Add(((LabelReference)(Params.ToArray()[0])).Offset);
                    ParseState.Indent += 2;
                    break;
                }
            }
        }
        public void TestPublicSetterOnGenericVariable2()
        {
            ISetAccessor accessorSet = factorySet.CreateSetAccessor(typeof(SpecialReference<Account>), "Value");

            SpecialReference<Account> referenceAccount = new SpecialReference<Account>();
            Account account = new Account(5);
            accessorSet.Set(referenceAccount, account);

            Assert.AreEqual(account, referenceAccount.Value);
            Assert.AreEqual(account.Id, referenceAccount.Value.Id);
        }
        public void TestPublicSetterOnGenericVariable()
        {
            ISetAccessor accessorSet = factorySet.CreateSetAccessor(typeof(PropertySon), "ReferenceAccount");

            PropertySon son = new PropertySon();
            SpecialReference<Account> referenceAccount = new SpecialReference<Account>();
            Account account = new Account(5);
            referenceAccount.Value = account;
            accessorSet.Set(son, referenceAccount);

            Assert.AreEqual(son.ReferenceAccount, referenceAccount);
            Assert.AreEqual(son.ReferenceAccount.Value.Id, referenceAccount.Value.Id);
        }
        public void TestPublicGetterOnGenericProperty2()
        {
            IGetAccessor accessorGet = factoryGet.CreateGetAccessor(typeof(SpecialReference<Account>), "Value");

            SpecialReference<Account> referenceAccount = new SpecialReference<Account>();
            Account account = new Account(5);
            referenceAccount.Value = account;

            Account acc = accessorGet.Get(referenceAccount) as Account;
            Assert.AreEqual(referenceAccount.Value, acc);
            Assert.AreEqual(referenceAccount.Value.Id, acc.Id);
        }
Esempio n. 12
0
 private string FormatSpecialReference(SpecialReference reference)
 {
     if (reference.GetType() == typeof(CountSpecialReference)) return "$count";
     throw new InvalidOperationException("SpecialReference type not recognised.");
 }