Esempio n. 1
0
 public override void Prepare(Generator generator, TypeReference inferredType)
 {
     base.Prepare(generator, inferredType);
     Resolver.ImplicitField implicitSlot = generator.Resolver.FindImplicitField(name);
     if (implicitSlot != null)
     {
         Expression thisSlot = new DirectSlotExpression(this, implicitSlot.slot, implicitSlot.type);
         field = new FieldExpression(this, thisSlot, name);
         field.Resolve(generator);
         field.Prepare(generator, inferredType);
         type        = field.TypeReference;
         sideEffects = field.HasSideEffects();
     }
     else
     {
         if (generator.Resolver.ContainsSlot(name))
         {
             type = generator.Resolver.ResolveSlotType(name);
         }
         else if (!hasTypeName)
         {
             throw new CompilerException(this, string.Format(Resource.Culture, Resource.FailedToResolveVariable, name.Data));
         }
         else
         {
             if (typeName != null)
             {
                 type = typeName; //todo
             }
             useTypeName = true;
         }
     }
 }
Esempio n. 2
0
 protected override bool InnerNeedsInference(Generator generator, TypeReference inferredHint)
 {
     Resolver.ImplicitField implicitSlot = generator.Resolver.FindImplicitField(name);
     if (implicitSlot != null)
     {
         Expression      thisSlot = new DirectSlotExpression(this, implicitSlot.slot, implicitSlot.type);
         FieldExpression field    = new FieldExpression(this, thisSlot, name);
         field.Resolve(generator);
         return(field.NeedsInference(generator, inferredHint));
     }
     return(false);
 }
Esempio n. 3
0
 protected override bool InnerNeedsInference(Generator generator, TypeReference inferredHint)
 {
     if (target == null)
     {
         Resolver.ImplicitField implicitSlot = generator.Resolver.FindImplicitField(name);
         if (implicitSlot != null)
         {
             target = new DirectSlotExpression(this, implicitSlot.slot, implicitSlot.type);
             target.Resolve(generator);
         }
     }
     if (target == null)
     {
         type = generator.Resolver.ResolveSlotType(name);
         Require.Assigned(type);
         value.Prepare(generator, type);
         return(false);
     }
     else
     {
         return(target.NeedsInference(generator, inferredHint));
     }
 }