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); }
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); } }