public override void Bind(IntermediateBuilder context) { if (_ids.Length == 1) { string name = _ids[0]; foreach (var field in Owner.Owner.Fields) { if (field.Name != name) { continue; } IsStatic = field.IsStatic; _field = new FieldOrPropertySymbol(field.Symbol); _field.Bind(context); Type = _field.Type; return; } //TODO: Add properties } int i = 0; for (; i < _ids.Length; i++) { Type = context.ResolveType(new BasicTypeName(string.Join('.', _ids[0..(i + 1)]), _namespaceContext));
//TODO: Add back pre-emit type conversion public override void Emit(IlBuilder builder) { base.Emit(builder); if (!Owner.IsStatic && FieldOrPropertySymbol.IsFieldOrProperty(_target)) { var forp = FieldOrPropertySymbol.ToFieldOrPropertySymbol(_target); if (!forp.HasOwner()) { forp.SetOwner(Owner.ThisPointer); _target = forp; } } _target.Store(builder, _source); //builder.EmitOpCode(_target.Location.GetStoreOpcode(), "For ID " + _target.ID); }