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