示例#1
0
        public override void BindSubMembers(IntermediateBuilder builder)
        {
            foreach (var a in _baseArgs)
            {
                a.Bind(builder);
            }

            IMethodWrapper baseCon
                = builder.FindMostApplicableConstructor(_callThis ? new InterUserType(Owner) : UserType.ToUserType(Owner.BaseType), _baseArgs);


            AddInstruction(new InterCall(baseCon, _baseArgs, false, ThisPointer), 0);


            foreach (var field in Owner.Fields)
            {
                if (field.IsStatic || field.Initializer == null)
                {
                    continue;
                }
                AddInstruction(new InterCopy(field.Symbol, field.Initializer), 0);
            }

            base.BindSubMembers(builder);
        }
示例#2
0
        public override void Bind(IntermediateBuilder context)
        {
            foreach (var p in _parameters)
            {
                p.Bind(context);
            }

            _type = context.ResolveType(_typeName);

            _constructor = context.FindMostApplicableConstructor(_type as UserType, _parameters);


            for (int i = 0; i < _parameters.Length; i++)
            {
                if (_parameters[i].Type.CanAssignTo(_constructor.Arguments[i]) == AssignType.CanAssign)
                {
                    continue;
                }

                _parameters[i] = new ConvertedValue(_parameters[i], _constructor.Arguments[i], Owner);
                _parameters[i].Bind(context);
            }
        }