Пример #1
0
        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));
Пример #2
0
        //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);
        }