Exemplo n.º 1
0
        public override bool Supports(TypeReference value)
        {
            if (value == null)
            {
                return(true);
            }
            if (value is NullableTypeReference)
            {
                return(false);
            }
            FunctionTypeReference tr = value as FunctionTypeReference;

            if (tr == null)
            {
                return(false);
            }
            if (!returnType.Supports(tr.returnType))
            {
                return(false);
            }
            if (parameters.Count != tr.parameters.Count)
            {
                return(false);
            }
            for (int i = 0; i < parameters.Count; ++i)
            {
                if (!parameters[i].Supports(tr.parameters[i]))
                {
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 2
0
 public override bool Supports(TypeReference value)
 {
     if (value == null)
     {
         return(true);
     }
     if (value is NullableTypeReference)
     {
         return(parent.Supports(((NullableTypeReference)value).Parent));
     }
     else
     {
         if (value.TypeName.Data != "void")
         {
             return(parent.Supports(value));
         }
         else
         {
             return(true);
         }
     }
 }
Exemplo n.º 3
0
 public override void Generate(Generator generator, TypeReference returnType)
 {
     base.Generate(generator, returnType);
     generator.Resolver.EnterContext();
     expression.Prepare(generator, typeRef);
     if (typeName == null)
     {
         typeRef = expression.TypeReference;
     }
     if (!disposable.Supports(typeRef))
     {
         throw new CompilerException(this, Resource.CanOnlyUseScopeOnNotNullDisposable);
     }
     expression.Generate(generator);
     typeRef.GenerateConversion(this, generator, expression.TypeReference);
     generator.Resolver.AddVariable(name, typeRef, slot, true);
     generator.Resolver.AssignSlot(slot);
     generator.Assembler.StoreVariable(slot);
     statement.Generate(generator, returnType);
     returns = statement.Returns();
     generator.Resolver.LeaveAndMergeContext();
 }