public static TranslationProcess Create( List <string> verifiedFiles, List <string> assumedFiles, List <string> references, TranslationConfiguration translationConfiguration) { TranslationProcess process = new TranslationProcess(); process.Configuration = translationConfiguration; foreach (string name in verifiedFiles) { if (translationConfiguration.Verbose) { Console.WriteLine($"- Adding '{name}' to files marked for full verification."); } process.compilationUnits.Add(CompilationUnit.CreateFromFile(name, CompilationUnitVerificationStyle.FullVerification)); } foreach (string name in assumedFiles) { if (translationConfiguration.Verbose) { Console.WriteLine($"- Adding '{name}' to files marked for signature extraction only."); } process.compilationUnits.Add(CompilationUnit.CreateFromFile(name, CompilationUnitVerificationStyle.ContractsOnly)); } foreach (string name in references) { if (translationConfiguration.Verbose) { Console.WriteLine($"- Adding '{name}' to referenced assemblies."); } process.referencedAssemblies.Add(name); } return(process); }
public static TranslationContext StartNew(TranslationProcess translationProcess, SemanticModel semantics, bool verifyUnmarkedItems, CompilationUnitVerificationStyle style) { return(new TranslationContext(translationProcess, semantics) { VerifyUnmarkedItems = verifyUnmarkedItems, MarkEverythingAbstract = style == CompilationUnitVerificationStyle.ContractsOnly }); }
/// <summary> /// Generates the Viper text that contains fields and the initializer of this class. /// </summary> /// <param name="process">The TranslationProcess.</param> public Silvernode GenerateGlobalSilvernode(TranslationProcess process) { var node = new SimpleSequenceSilvernode(null); // Translate fields foreach (CollectedField field in this.InstanceFields) { node.List.Add("field "); node.List.Add(new IdentifierSilvernode(field.Name)); node.List.Add(": "); node.List.Add(new TypeSilvernode(null, field.SilverType)); if (this.InstanceFields[this.InstanceFields.Count - 1] != field) { node.List.Add("\n"); } } // Translate the initializer/default constructor if (!this._isStatic) { Identifier initializer = process.IdentifierTranslator.RegisterAndGetIdentifierWithTag(this.ClassSymbol, Constants.InitializerTag); // The initializer gives write access to all fields var accessToAllFields = new List <ContractSilvernode>(); foreach (CollectedField field in this.InstanceFields) { var protectedField = new SimpleSequenceSilvernode(null, Constants.SilverThis, ".", new IdentifierSilvernode(field.Name) ); accessToAllFields.Add(new EnsuresSilvernode(new AccSilvernode(protectedField, "write", null), null)); } var initializerContents = new BlockSilvernode(null, new List <StatementSilvernode>()); initializerContents.Add(new AssignmentSilvernode(Constants.SilverThis, new NewStarSilvernode(null), null)); var initializerMethod = new MethodSilvernode(null, new IdentifierSilvernode(initializer), new List <ParameterSilvernode>(), Constants.SilverThis, new TypeSilvernode(null, SilverType.Ref), accessToAllFields, initializerContents); node.List.Add("\n"); node.List.Add(initializerMethod); } return(node); }
/// <summary> /// Creates a new <see cref="TranslationProcess"/> from a C# syntax tree supplied by Visual Studio. /// </summary> /// <param name="syntaxTree">The tree to translate.</param> // ReSharper disable once UnusedMember.Global - used by plugin public static TranslationProcess CreateFromSyntaxTree( SyntaxTree syntaxTree) { TranslationProcess process = new TranslationProcess(); process.Configuration = new TranslationConfiguration() { Verbose = false, VerifyUnmarkedItems = true }; process.compilationUnits.Add(CompilationUnit.CreateFromTree((CSharpSyntaxTree)syntaxTree, CompilationUnitVerificationStyle.FullVerification)); return(process); }
private TranslationContext(TranslationProcess process, SemanticModel semantics) { this.Process = process; this.Semantics = semantics; }
public IdentifierTranslator(TranslationProcess process) { this.process = process; }