private void CreateEndOfFilePresentImpl(IIntermediateClassType resultClass, IInterfaceIndexerMember initialIndexer, IInterfaceType readOnlyCollection, IClassPropertyMember countProp) { EndOFilePresentImpl = resultClass.Properties.Add(new TypedName("EndOFilePresent", RuntimeCoreType.Boolean, assembly.IdentityManager), true, false); EndOFilePresentImpl.SummaryText = string.Format(@"Returns whether the @s:{0}Symbols.{1}; is present within the @s:{2};", this.compiler.Source.Options.AssemblyName, this.compiler.LexicalSymbolModel.GetEofIdentityField().Name, resultClass.Name); var mainBlock = EndOFilePresentImpl.GetMethod; var countPropRef = countProp.GetReference(new SpecialReferenceExpression(SpecialReferenceKind.This)); var countCheck = mainBlock.If(countPropRef.GreaterThan(0)); countCheck.Return(this.commonSymbolBuilder.Identity.GetReference(initialIndexer.GetIndexerSignatureReference <IInterfaceIndexerMember, IInterfaceType>(new SpecialReferenceExpression(SpecialReferenceKind.This), new IExpression[] { countPropRef.Subtract(1) })).EqualTo(compiler.LexicalSymbolModel.GetEofIdentityField().GetReference())); mainBlock.Return(IntermediateGateway.FalseValue); }
private void CreateIndexerImpl(IIntermediateClassType resultClass, IInterfaceIndexerMember initialIndexer) { var indexerFirstParam = initialIndexer.Parameters[0].Value; var indexerImpl = resultClass.Indexers.Add(new TypedName(initialIndexer.Name, initialIndexer.PropertyType), new TypedNameSeries(new TypedName(indexerFirstParam.Name, indexerFirstParam.ParameterType)), true, false); indexerImpl.SummaryText = string.Format("Returns the @t:{0}; at the @p:{1}; provided.", indexerImpl.PropertyType.Name, indexerFirstParam.Name); var indexerImplFirstParam = indexerImpl.Parameters[indexerFirstParam.UniqueIdentifier]; indexerImplFirstParam.SummaryText = string.Format("The @s:Int32; value denoting the index of the @s:{0}; to retrieve.", indexerImpl.PropertyType.Name); indexerImpl.AccessLevel = AccessLevelModifiers.Public; var indexerImplMainBlock = indexerImpl.GetMethod; indexerImplMainBlock.Return(this.InternalStreamImpl.GetReference().GetIndexer(indexerImpl.Parameters[indexerFirstParam.UniqueIdentifier].GetReference())); this.IndexerImpl = indexerImpl; }