Exemplo n.º 1
0
        /// <summary>
        /// Compile the given code units
        /// </summary>
        /// <param name="dslProject">The input DSL project</param>
        /// <param name="forceCompilation"></param>
        public void Compile(LanguageCodeProject dslProject, bool forceCompilation = false)
        {
            if (forceCompilation == false && CodeChanged(dslProject) == false)
            {
                return;
            }

            InitializeCompiler(dslProject);

            foreach (var codeFile in Project.SourceFiles)
            {
                CompileCodeFile(codeFile);
            }

            FinalizeCompiler();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initialize the compiler after clearing all previous compilation data; if any
        /// </summary>
        /// <param name="dslProject">The input DSL project</param>
        private void InitializeCompiler(LanguageCodeProject dslProject)
        {
            CodeUnitCompilers = new List <LanguageProjectCodeUnitCompiler>();

            CodeUnitParseTrees = new List <ParseTreeNode>();

            Project = dslProject;

            InitializeCompilationLog();

            InitializeRootAst();

            InitializeTranslatorContext();

            Project.UpdateSourceCodeUnitsText();
        }
Exemplo n.º 3
0
        /// <summary>
        /// Tests if the code of the given project has changed since last compilation, if any
        /// </summary>
        /// <param name="dslProject"></param>
        /// <returns></returns>
        protected virtual bool CodeChanged(LanguageCodeProject dslProject)
        {
            return(true);

            //if (CodeUnitParseTrees == null || CodeUnitParseTrees.Count != Project.SourceFiles.Count())
            //    return true;

            //var i = 0;
            //foreach (var codeFile in Project.SourceFiles)
            //{
            //    var oldRootParseNode = CodeUnitParseTrees[i++];
            //    var newRootParseNode = ParseCodeUnit(codeFile);

            //    if (
            //        ReferenceEquals(oldRootParseNode, null) ||
            //        ReferenceEquals(newRootParseNode, null) ||
            //        oldRootParseNode.IsSameParseTreeNode(newRootParseNode) == false
            //        )
            //        return true;
            //}

            //return false;
        }
Exemplo n.º 4
0
 protected override bool CodeChanged(LanguageCodeProject dslProject)
 {
     return(ReferenceEquals(RootGMacAst, null) || dslProject.ModifiedAfter(RootGMacAst.CreationTime));
 }