Exemple #1
0
        public static Variable CreateTemp(Type type, Instruction defineInstr)
        {
            var var = new Variable
            {
                Name = "t" + (_tempVarId++),
                SymType = SymbolType.ST_TEMP,
                ValType = type,
                DefineInstruction = defineInstr
            };

            return var;
        }
Exemple #2
0
        private Variable ComputeTempVar(Expression exp, OpCode code, Variable[] sources)
        {
            Instruction inst;
            if (_indexedInsts.TryGetValue(exp, out inst))
                return inst.Destinations[0];
            inst = new Instruction(code);
            _indexedInsts.Add(exp, inst);
            _insts.Add(inst);

            foreach (var s in sources)
                inst.Sources.Add(s);

            var d = Variable.CreateTemp(exp.Type, inst);
            inst.Destinations.Add(d);
            return d;
        }
Exemple #3
0
        public static Variable CreateLocal(string name, Type type, Instruction defineInstr)
        {
            var var = new Variable
            {
                Name = name,
                SymType = SymbolType.ST_LOCAL,
                ValType = type,
                DefineInstruction = defineInstr
            };

            return var;
        }
Exemple #4
0
        public static Variable CreateConstant(Type type, object value)
        {
            var var = new Variable
            {
                Name = "c" + (_constVarId++),
                SymType = SymbolType.ST_CONSTANT,
                ValType = type,
                ConstantValue = value
            };

            return var;
        }
Exemple #5
0
        public static Variable CreateParam(string name, Type type)
        {
            var var = new Variable
            {
                Name = name,
                SymType = SymbolType.ST_PARAMETER,
                ValType = type
            };

            return var;
        }
Exemple #6
0
        private Variable VisitMemberBinding(Variable host, MemberBinding node)
        {
            switch (node.BindingType)
            {
                case MemberBindingType.Assignment:
                    return VisitMemberAssignment(host, (MemberAssignment)node);

                case MemberBindingType.MemberBinding:
                    return VisitMemberMemberBinding(host, (MemberMemberBinding)node);

                case MemberBindingType.ListBinding:
                    return VisitMemberListBinding(host, (MemberListBinding)node);
                default:
                    throw new ArgumentException("Error.UnhandledBindingType(node.BindingType);");
            }
            //throw Error.UnhandledBindingType(node.BindingType);
            //throw new System.ArgumentException("Error.UnhandledBindingType(node.BindingType);");
        }
Exemple #7
0
        private Variable VisitMemberMemberBinding(Variable host, MemberMemberBinding binding)
        {
            throw new NotSupportedException();

            //this.Out(binding.Member.Name);
            //this.Out(" = {");
            //int num = 0;
            //int count = binding.Bindings.Count;
            //while (num < count)
            //{
            //    if (num > 0)
            //    {
            //        this.Out(", ");
            //    }
            //    this.VisitMemberBinding(binding.Bindings[num]);
            //    num++;
            //}
            //this.Out("}");
        }
Exemple #8
0
        private Variable VisitMemberAssignment(Variable host, MemberAssignment assignment)
        {
            var inst = CreateNonIndexedInstruction(OpCode.MemberWrite);
            var val = Visit(assignment.Expression);
            inst.Destinations.Add(host);
            inst.Destinations.Add(Variable.CreateConstant(typeof(string), assignment.Member.Name));
            inst.Sources.Add(val);

            return val;
        }