internal AnonymousType(IIntermediateAssembly parent, params AnonymousTypeMember[] members) : base(parent.PrivateImplementationDetails) { this.index = parent.PrivateImplementationDetails.AnonymousTypes.Count; this.members = members; this.Lock(); }
private static string[] WriteProject(string resultPath, IIntermediateAssembly newAssembly) { var opts = new IntermediateCodeTranslatorOptions(/*HtmlCodeFormatterProvider.Singleton/**/ new DefaultCodeTranslatorFormatterProvider() /**/); opts.AllowPartials = true; /* Below controls the emission order of the elements. The default would be verbatim order (the order they were inserted.) */ CSharpProjectTranslator cspt = new CSharpProjectTranslator(opts); opts.TranslationOrder.Add(DeclarationTranslationOrder.Fields); opts.TranslationOrder.Add(DeclarationTranslationOrder.Constructors); opts.TranslationOrder.Add(DeclarationTranslationOrder.UnaryOperatorCoercions); opts.TranslationOrder.Add(DeclarationTranslationOrder.BinaryOperatorCoercions); opts.TranslationOrder.Add(DeclarationTranslationOrder.TypeCoercions); opts.TranslationOrder.Add(DeclarationTranslationOrder.Properties); opts.TranslationOrder.Add(DeclarationTranslationOrder.Methods); opts.TranslationOrder.Add(DeclarationTranslationOrder.Classes); opts.TranslationOrder.Add(DeclarationTranslationOrder.Delegates); opts.TranslationOrder.Add(DeclarationTranslationOrder.Enums); opts.TranslationOrder.Add(DeclarationTranslationOrder.Interfaces); /* Make it follow the preferred two-space format. */ opts.IndentationSpaceCount = 2; opts.TranslationOrder.Add(DeclarationTranslationOrder.Structs); opts.ElementOrderingMethod = TranslationOrderKind.Specific | TranslationOrderKind.Alphabetic; return(cspt.WriteProject(newAssembly, resultPath)); }
public void Build(ParserCompiler compiler, IIntermediateAssembly assembly) { this._compiler = compiler; this._assembly = assembly; this._identityManager = ((IIntermediateCliManager)(this._assembly.IdentityManager)); this.BuildFixedTokenClass(); }
private void CreateICharStreamSegment(IIntermediateAssembly assembly) { this._charStreamSegmentInterface = assembly.DefaultNamespace.Parts.Add().Interfaces.Add("I{0}CharStreamSegment", this._compiler.Source.Options.AssemblyName); this._charStreamSegmentInterface.AccessLevel = AccessLevelModifiers.Public; this.CreatePosition(); this.CreateLength(); }
public IAssemblyUniqueIdentifier GetIdentifier(IIntermediateAssembly assembly) { //if (assembly.PublicKeyInfo == null || assembly.PublicKeyInfo.PublicToken.Token == null || assembly.PublicKeyInfo.PublicToken.Token.Length == 0) return(TypeSystemIdentifiers.GetAssemblyIdentifier(assembly.Name, assembly.AssemblyInformation.AssemblyVersion, assembly.AssemblyInformation.Culture)); //else // return TypeSystemIdentifiers.GetAssemblyIdentifier(assembly.Name, assembly.AssemblyInformation.AssemblyVersion, assembly.AssemblyInformation.Culture, assembly.PublicKeyInfo.PublicToken.Token); }
private static void Test <TLanguage, TProvider>(ILanguageProvider <TLanguage, TProvider> provider) where TLanguage : ILanguage <TLanguage, TProvider> where TProvider : ILanguageProvider <TLanguage, TProvider> { IIntermediateAssembly iia = (IIntermediateAssembly)provider.CreateAssembly("TestAssembly"); var idm = iia.IdentityManager; var ienumerableType = (IInterfaceType)idm.ObtainTypeReference(TypeSystemIdentifiers.GetTypeIdentifier("System.Collections.Generic", "IEnumerable", 1)); var structuralExampleMethod = iia.Methods.Add("StructuralExample"); var tdataset = structuralExampleMethod.TypeParameters.Add("TDataset"); var tdatabase = structuralExampleMethod.TypeParameters.Add("TDatabase"); var byteRef = idm.ObtainTypeReference(idm.RuntimeEnvironment.Byte); var datasetIndex = tdataset.Indexers.Add(byteRef, new TypedNameSeries(new TypedName("index", idm.ObtainTypeReference(idm.RuntimeEnvironment.Int32))), true, true); var database = tdataset.Properties.Add(new TypedName("Database", tdatabase), true, false); var dataCopy = tdataset.Methods.Add(new TypedName("GetDataCopy", byteRef.MakeArray())); var clone = tdataset.Methods.Add(new TypedName("Clone", tdataset)); var ctor = tdataset.Constructors.Add(new TypedName("uInst", tdatabase), new TypedName("data", byteRef.MakeArray())); var d = datasetIndex.GetMethod.GetReference(new SpecialReferenceExpression(SpecialReferenceKind.This)).Invoke(); var gvm = datasetIndex.GetMethod.UniqueIdentifier; var parameters = datasetIndex.Parameters; var nextParameter = parameters.Add(new TypedName("testIndex", idm.ObtainTypeReference(RuntimeCoreType.Int16))); var valueParameter = datasetIndex.SetMethod.ValueParameter; nextParameter.ParameterType = idm.ObtainTypeReference(RuntimeCoreType.SByte); iia.Dispose(); }
public void Build(ParserCompiler compiler, IIntermediateAssembly assembly) { this._compiler = compiler; this._assembly = assembly; this._identityManager = ((IIntermediateCliManager)(assembly.IdentityManager)); CreateICharStreamSegment(assembly); CreateCharStreamSegment(assembly); }
public void Build(ParserCompiler compiler, IIntermediateAssembly targetAssembly) { this._targetAssembly = targetAssembly; this._compiler = compiler; this._symbolStore = targetAssembly.DefaultNamespace.Parts.Add().Classes.Add("{0}SymbolStore", this._compiler.Source.Options.AssemblyName); this._singletons = _symbolStore.Parts.Add().Classes.Add("Singletons"); this._identityEnum = targetAssembly.DefaultNamespace.Parts.Add().Enums.Add("{0}Symbols", this._compiler.Source.Options.AssemblyName); _symbolStore.AccessLevel = AccessLevelModifiers.Internal; _symbolStore.SpecialModifier = SpecialClassModifier.Static; _singletons.AccessLevel = AccessLevelModifiers.Internal; _symbolStore.SummaryText = string.Format("Defines the used symbols for the {0} language, effectively each unique set of combinations is outlined within this symbol store.", compiler.Source.Options.GrammarName); }
private void CreateCharStreamSegment(IIntermediateAssembly assembly) { this._charStreamSegmentClass = assembly.DefaultNamespace.Parts.Add().Classes.Add("{0}CharStreamSegment", this._compiler.Source.Options.AssemblyName); this._charStreamSegmentClass.ImplementedInterfaces.ImplementInterfaceQuick(this._charStreamSegmentInterface); this.CreateStartPositionImpl(); this.CreateEndPositionImpl(); this.CreateLengthImpl(); this.CreateOwnerImpl(); this.LengthImpl.AccessLevel = this.StartPositionImpl.AccessLevel = this.EndPositionImpl.AccessLevel = AccessLevelModifiers.Public; this._StartPositionImpl.AccessLevel = this._EndPositionImpl.AccessLevel = AccessLevelModifiers.Private; this.CharStreamSegment.AccessLevel = AccessLevelModifiers.Public; }
public string Visit(IIntermediateAssembly assembly, DefaultAssemblyFilenameVisitorContext context) { if (!assembly.UsesDefaultFileName) { context.CurrentResult = assembly.FileName; } else { VisitNamespaceParent(assembly, context); } return(context.CurrentResult); }
private static CSharpAssemblyFileInfo GetFileInfo(IIntermediateAssembly target, List <string> otherFiles, bool allowPartials) { var context = new CSharpAssemblyFileContext() { RootAssembly = target.GetRoot(), OtherFiles = otherFiles }; if (!allowPartials) { if (target.IsRoot) { context.CurrentResult = new CSharpAssemblyFileInfo() { FileName = target.Name } } ; else { context.CurrentResult = new CSharpAssemblyFileInfo(); } return(context.CurrentResult); } var visitor = new AssemblyFileVisitor(); target.Accept(visitor, context); if (context.CurrentResult.YieldsFile) { if (context.CurrentResult.FileName.Contains('+')) { } if (context.OtherFiles.Contains(context.CurrentResult.FileName)) { string fnameCurrent = context.CurrentResult.FileName; var path = Path.GetDirectoryName(fnameCurrent); var fileName = Path.GetFileNameWithoutExtension(fnameCurrent); int offset = 0; while (context.OtherFiles.Contains(fnameCurrent)) { fnameCurrent = string.Format("{0}{1}{2}{3}{4}", path, Path.DirectorySeparatorChar, fileName, '-', ++offset); } context.CurrentResult.FileName = fnameCurrent; context.OtherFiles.Add(fnameCurrent); } else { context.OtherFiles.Add(context.CurrentResult.FileName); } } return(context.CurrentResult); }
public void AssemblyCreated(IIntermediateAssembly assembly) { if (this.intermediateAssemblies.ContainsKey(assembly.UniqueIdentifier)) { throw new InvalidOperationException("A similarly named assembly within the current scope already exists."); } if (assembly == null) { throw new ArgumentNullException("assembly"); } this.intermediateAssemblies._Add(assembly.UniqueIdentifier, assembly); assembly.IdentifierChanged += assembly_IdentifierChanged; assembly.Disposed += assembly_Disposed; }
public CSharpAssemblyFileInfo Visit(IIntermediateAssembly assembly, CSharpAssemblyFileContext context) { CSharpAssemblyFileInfo result = new CSharpAssemblyFileInfo(); context.CurrentResult = result; if (!assembly.UsesDefaultFileName)//(string.IsNullOrEmpty(assembly.FileName) || string.IsNullOrWhiteSpace(assembly.FileName))) { context.CurrentResult.FileName = assembly.FileName; } else { VisitNamespaceParent(assembly, context); } return(result); }
public void ScaffoldInterface(IIntermediateAssembly assembly) { this._assembly = assembly; var namespaceNames = this._relevantTypes.Select(k => k.NamespaceName).Distinct().ToArray(); /* We're going to throw-out cases where there's only one type, as it's likely a special case, not the standard. */ var totalTypeCount = this._relevantTypes.Count; var namespaceNamesTrimmed = (from name in namespaceNames join type in this._relevantTypes on name equals type.NamespaceName into set where (((float)set.Count()) / (float)totalTypeCount) * 100 > 20 select name).Distinct().ToArray(); if (namespaceNamesTrimmed.Length > 0) { namespaceNames = namespaceNamesTrimmed; } var relativeRoot = namespaceNames.GetRelativeRoot("."); if (!assembly.Namespaces.PathExists(relativeRoot)) { assembly.Namespaces.Add(relativeRoot); } var ns = assembly.Namespaces[relativeRoot]; GenericParameterData[] gpData = new GenericParameterData[(this._detail.ContextualVisitor ? 1 : 0) + (this._detail.YieldingVisitor ? 1 : 0)]; if (this._detail.YieldingVisitor) { gpData[0] = new GenericParameterData("TResult"); } if (this._detail.ContextualVisitor) { gpData[this._detail.YieldingVisitor ? 1 : 0] = new GenericParameterData("TContext"); } var nameParts = this._detail.TargetContext.TitleCaseIdentifierSplit(); this.NameParts = nameParts; if (!this._detail.YieldingVisitor && this._detail.ContextualVisitor) { var npList = new List <string>(nameParts); npList.Insert(npList.Count - 1, "Contextual"); nameParts = npList.ToArray(); } var visitorInterface = ns.Parts.Add().Interfaces.Add(string.Format("I{0}", string.Join(string.Empty, nameParts)), gpData); this.VisitorInterface = visitorInterface; this.VisitorInterface.AccessLevel = AccessLevelModifiers.Public; }
public string Visit(IIntermediateAssembly assembly, IntermediateNameRequestDetails context) { string name = null; switch (context) { case IntermediateNameRequestDetails.TargetFileName: this.fileNameLookup.TryGetValue(assembly, out name); break; case IntermediateNameRequestDetails.SourceFileName: name = assembly.FileName; break; case IntermediateNameRequestDetails.DisplayName: name = assembly.Name; break; } return(name); }
public void BeginDocument(IIntermediateAssembly target) { this.CreateStream(); this.HandleWriteInternal("<!DOCTYPE html>"); this.HandleWriteInternal("<html>"); this.HandleWriteLine(); string targetFileName; TryGetAssemblyFileName(out targetFileName); if (targetFileName != null) { targetFileName = Path.GetFileNameWithoutExtension(targetFileName); } else { targetFileName = string.Empty; } this.HandleWriteInternal(@" <head> <title>" + targetFileName + @"</title> <style> a { text-decoration:none; } a:hover.ref { text-decoration:none; border-bottom:1px dotted #CFCFCF; color:inherit; } </style> </head>"); this.HandleWriteLine(); this.HandleWriteInternal(string.Format("<body style=\"background-color:#{0};\">", GetColorCssRgb(backgroundColor1))); this.HandleWriteLine(); this.HandleWriteInternal("<pre>"); this.HandleWriteLine(); }
public string[] WriteProject(IIntermediateAssembly assembly, string rootFolder, string extension = ".cs") { List<string> fileTracker = new List<string>(); Dictionary<IIntermediateAssembly, string> fileNameLookup = new Dictionary<IIntermediateAssembly, string>(); this.nameProvider = new NameProvider(this, fileNameLookup); var information = (from part in new[] { assembly }.Concat(assembly.Parts) let partFile = CSharpProjectTranslator.AssemblyFileVisitor.GetFileInfo(part, this, fileTracker) where partFile.YieldsFile let fnTrans = GetTranslatorAndFinalName(rootFolder, extension, partFile.FileName, part, fileNameLookup) select new { Part = part, FileName = partFile.FileName, FinalName = fnTrans.Item2, Translator = fnTrans.Item1 }).ToArray(); #if !DO_NOT_WRITE_MULTITHREADED Parallel.ForEach(information, async assemblyFileInfo => #else foreach (var assemblyFileInfo in information) #endif { CodeTranslator translator = assemblyFileInfo.Translator; var fileStream = new FileStream(assemblyFileInfo.FinalName, FileMode.Create, FileAccess.Write, FileShare.Read); var streamWriter = new StreamWriter(fileStream); IndentedTextWriter itw ; if (options.IndentationSpaceCount != null) itw = new IndentedTextWriter(streamWriter, new string(' ', options.IndentationSpaceCount.Value)); else itw = new IndentedTextWriter(streamWriter); translator.Target = itw; translator.Translate(assemblyFileInfo.Part); #if !DO_NOT_WRITE_MULTITHREADED await streamWriter.FlushAsync(); #else streamWriter.Flush(); #endif streamWriter.Dispose(); fileStream.Close(); fileStream.Dispose(); }
/// <summary> /// Creates a new <see cref="IntermediateIndexerSignatureMember{TIndexer, TIntermediateIndexer, TIndexerParent, TIntermediateIndexerParent, TMethodMember}"/> /// with the <paramref name="name"/>, <paramref name="parent"/> and <paramref name="assembly"/> provided. /// </summary> /// <param name="name">The <see cref="String"/> value representing the unique name of the /// <see cref="IntermediateIndexerSignatureMember{TIndexer, TIntermediateIndexer, TIndexerParent, TIntermediateIndexerParent, TMethodMember}"/>.</param> /// <param name="parent">The <typeparamref name="TIntermediateIndexerParent"/> which contains the /// <see cref="IntermediateIndexerSignatureMember{TIndexer, TIntermediateIndexer, TIndexerParent, TIntermediateIndexerParent, TMethodMember}"/>.</param> /// <param name="assembly">The <see cref="IIntermediateAssembly"/> which /// contains the <see cref="IntermediateIndexerSignatureMember{TIndexer, TIntermediateIndexer, TIndexerParent, TIntermediateIndexerParent, TMethodMember}"/>.</param> public IntermediateIndexerSignatureMember(string name, TIntermediateIndexerParent parent, IIntermediateAssembly assembly) : base(name, parent, assembly) { }
//#region ILanguageCSTTranslator<IOilexerGrammarFile> Members public void Process(IOilexerGrammarFile nextInput, IIntermediateAssembly currentAssembly) { throw new NotSupportedException("Inputs are linked explicitly in grammar files, next input processing is not supported."); }
public void BeginDocument(IIntermediateAssembly target) { }
public TestLinkerResult Visit(IIntermediateAssembly assembly, ICompilationContext context) { throw new NotImplementedException(); }
/// <summary> /// Creates a new <see cref="IntermediatePropertyMember{TProperty, TIntermediateProperty, TPropertyParent, TIntermediatePropertyParent, TMethodMember}"/> /// with the <paramref name="parent"/> provided. /// </summary> /// <param name="parent">The <typeparamref name="TIntermediatePropertyParent"/> /// which contains the <see cref="IntermediatePropertyMember{TProperty, TIntermediateProperty, TPropertyParent, TIntermediatePropertyParent, TMethodMember}"/>.</param> /// <param name="assembly">The <see cref="IIntermediateAssembly"/> contains the <see cref="IntermediatePropertyMember{TProperty, TIntermediateProperty, TPropertyParent, TIntermediatePropertyParent, TMethodMember}"/>. /// </param> public IntermediatePropertyMember(TIntermediatePropertyParent parent, IIntermediateAssembly assembly) : base(parent) { this.assembly = assembly; }
/// <summary> /// Creates a new <see cref="IntermediatePropertyMember{TProperty, TIntermediateProperty, TPropertyParent, TIntermediatePropertyParent, TMethodMember}"/> /// with the <paramref name="name"/> and <paramref name="parent"/> /// provided. /// </summary> /// <param name="name">The <see cref="String"/> value representing the /// unique name of the <see cref="IntermediatePropertyMember{TProperty, TIntermediateProperty, TPropertyParent, TIntermediatePropertyParent, TMethodMember}"/>. /// </param> /// <param name="parent">The <typeparamref name="TIntermediatePropertyParent"/> /// which contains the <see cref="IntermediatePropertyMember{TProperty, TIntermediateProperty, TPropertyParent, TIntermediatePropertyParent, TMethodMember}"/>.</param> /// <param name="assembly">The <see cref="IIntermediateAssembly"/> contains the <see cref="IntermediatePropertyMember{TProperty, TIntermediateProperty, TPropertyParent, TIntermediatePropertyParent, TMethodMember}"/>. /// </param> public IntermediatePropertyMember(string name, TIntermediatePropertyParent parent, IIntermediateAssembly assembly) : base(parent) { base.OnSetName(name); this.assembly = assembly; }
/// <summary> /// Creates a new <see cref="IntermediateParameterParentMemberBase{TParentIdentifier, TParent, TIntermediateParent, TParameter, TIntermediateParameter, TGrandParent, TIntermediateGrandParent}"/> /// with the <paramref name="name"/> and <paramref name="parent"/> provided. /// </summary> /// <param name="name">The <see cref="String"/> representing the unique identifier of the /// <see cref="IntermediateParameterParentMemberBase{TParentIdentifier, TParent, TIntermediateParent, TParameter, TIntermediateParameter, TGrandParent, TIntermediateGrandParent}"/>.</param> /// <param name="parent">The <typeparamref name="TIntermediateGrandParent"/> /// which contains the <see cref="IntermediateParameterParentMemberBase{TParentIdentifier, TParent, TIntermediateParent, TParameter, TIntermediateParameter, TGrandParent, TIntermediateGrandParent}"/>.</param> /// <param name="assembly">The <see cref="IIntermediateAssembly"/> /// which contains the parameter parent member.</param> public IntermediateParameterParentMemberBase(string name, TIntermediateGrandParent parent, IIntermediateAssembly assembly) : base(name, parent) { this.assembly = assembly; }
void IIntermediateDeclarationVisitor.Visit(IIntermediateAssembly intermediateDeclaration) { this.Translate(intermediateDeclaration); }
/// <summary> /// Creates a new <see cref="IntermediateConstructorSignatureMemberBase{TCtor, TIntermediateCtor, TType, TIntermediateType}"/> /// with the <paramref name="parent"/> provdied. /// </summary> /// <param name="parent">The <typeparamref name="TIntermediateType"/> /// which the <see cref="IntermediateConstructorSignatureMemberBase{TCtor, TIntermediateCtor, TType, TIntermediateType}"/> /// belongs to.</param> /// <param name="assembly">The <see cref="IIntermediateAssembly"/> /// which contains the intermediate signature member and contains context relative /// to disambiguating type identities.</param> /// <param name="typeInitializer">Whether the <see cref="IntermediateConstructorSignatureMemberBase{TCtor, TIntermediateCtor, TType, TIntermediateType}"/> /// is a type initializer</param> internal IntermediateConstructorSignatureMemberBase(TIntermediateType parent, IIntermediateAssembly assembly, bool typeInitializer = false) : base(parent, assembly) { this.typeInitializer = typeInitializer; this.AssignName(typeInitializer ? ".cctor" : ".ctor"); }
/// <summary> /// Creates a new <see cref="IntermediateModule"/> with the <paramref name="parent"/> /// provided. /// </summary> /// <param name="name">The string value representing the unique name of the <see cref="IntermediateModule"/>.</param> /// <param name="parent">The <see cref="IIntermediateAssembly"/> which contains the <see cref="IntermediateModule"/></param> public IntermediateModule(string name, IIntermediateAssembly parent) : base(parent) { this.name = name; }
public ParameterMember(string name, TIntermediateIndexer parent, IIntermediateAssembly assembly) : base(parent, assembly) { this.AssignName(name); }
public ParameterMember(TIntermediateIndexer parent, IIntermediateAssembly assembly) : base(parent, assembly) { }
public override void ChangeSignatureParameterArraySupport <TParent, TIntermediateParent, TParameter, TIntermediateParameter>(IIntermediateParameterParent <TParent, TIntermediateParent, TParameter, TIntermediateParameter> target, IIntermediateAssembly associatedAssembly, bool support) { var metadatumType = this.IdentityManager.ObtainTypeReference(this.IdentityManager.RuntimeEnvironment.GetCoreIdentifier(CliRuntimeCoreType.ParamArrayMetadatum, associatedAssembly)); if (metadatumType == null) { return; } if (target.Parameters.Count == 0) { return; } IIntermediateParameterMember <TParent, TIntermediateParent> lastParameter = target.Parameters.Values[target.Parameters.Count - 1]; if (SignatureSupportsParameterArray(target, associatedAssembly)) { if (support) { return; } var metadatum = lastParameter.Metadata[metadatumType]; lastParameter.Metadata.Remove(metadatum); return; } else if (support) { lastParameter.Metadata.Add(new MetadatumDefinitionParameterValueCollection(metadatumType)); } }