//
        void FinalPass(string folder)
        {
            // Now do some addition validation and final preparation

            // Create the Globals and User lookup dictionaries
            _LUGlobals = new ListDictionary();                  // if entries grow beyond 10; make hashtable
            _LUGlobals.Add("PageNumber", new FunctionPageNumber());
            _LUGlobals.Add("TotalPages", new FunctionTotalPages());
            _LUGlobals.Add("ExecutionTime", new FunctionExecutionTime());
            _LUGlobals.Add("ReportFolder", new FunctionReportFolder());
            _LUGlobals.Add("ReportName", new FunctionReportName());
            _LUUser = new ListDictionary();                     // if entries grow beyond 10; make hashtable
            _LUUser.Add("UserID", new FunctionUserID());
            _LUUser.Add("Language", new FunctionUserLanguage());
            if (_CodeModules != null)
            {
                _CodeModules.FinalPass();
                _CodeModules.LoadModules();
            }
            if (_Classes != null)
            {
                _Classes.FinalPass();
                // _Classes.Load();
            }
            if (_Code != null)
            {
                _Code.FinalPass();
                _CodeType = _Code.CodeType();
            }

            if (_ReportParameters != null)                      // report parameters might be used in data source connection strings
            {
                _ReportParameters.FinalPass();
            }
            if (_DataSourcesDefn != null)
            {
                _DataSourcesDefn.FinalPass();
            }
            if (_DataSetsDefn != null)
            {
                _DataSetsDefn.FinalPass();
            }
            _Body.FinalPass();
            if (_PageHeader != null)
            {
                _PageHeader.FinalPass();
            }
            if (_PageFooter != null)
            {
                _PageFooter.FinalPass();
            }
            if (_EmbeddedImages != null)
            {
                _EmbeddedImages.FinalPass();
            }
            if (_Language != null)
            {
                _Language.FinalPass();
            }

            _DataCache.TrimExcess();    // reduce size of array of expressions that cache data
            return;
        }