Exemple #1
0
        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
     });
 }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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;
 }