Ejemplo n.º 1
0
        internal ScriptBlockAst GetScriptBlockAst()
        {
            var scriptContents = ScriptContents;

            if (_scriptBlock == null)
            {
                this.ScriptBlock = ScriptBlock.TryGetCachedScriptBlock(_path, scriptContents);
            }
            if (_scriptBlock != null)
            {
                return((ScriptBlockAst)_scriptBlock.Ast);
            }
            if (_scriptBlockAst == null)
            {
                ParseError[] errors;
                Parser       parser = new Parser();
                _scriptBlockAst = parser.Parse(_path, ScriptContents, null, out errors, ParseMode.Default);
                if (errors.Length == 0)
                {
                    this.ScriptBlock = new ScriptBlock(_scriptBlockAst, isFilter: false);
                    ScriptBlock.CacheScriptBlock(_scriptBlock.Clone(), _path, scriptContents);
                }
            }
            return(_scriptBlockAst);
        }
Ejemplo n.º 2
0
        internal ScriptBlockAst GetScriptBlockAst()
        {
            var scriptContents = ScriptContents;

            if (_scriptBlock == null)
            {
                this.ScriptBlock = ScriptBlock.TryGetCachedScriptBlock(_path, scriptContents);
            }

            if (_scriptBlock != null)
            {
                return((ScriptBlockAst)_scriptBlock.Ast);
            }

            if (_scriptBlockAst == null)
            {
                ParseError[] errors;
                Parser       parser = new Parser();

                // If we are in ConstrainedLanguage mode but the defining language mode is FullLanguage, then we need
                // to parse the script contents in FullLanguage mode context.  Otherwise we will get bogus parsing errors
                // such as "Configuration or Class keyword not allowed".
                var context = LocalPipeline.GetExecutionContextFromTLS();
                if (context != null && context.LanguageMode == PSLanguageMode.ConstrainedLanguage &&
                    DefiningLanguageMode == PSLanguageMode.FullLanguage)
                {
                    context.LanguageMode = PSLanguageMode.FullLanguage;
                    try
                    {
                        _scriptBlockAst = parser.Parse(_path, ScriptContents, null, out errors, ParseMode.Default);
                    }
                    finally
                    {
                        context.LanguageMode = PSLanguageMode.ConstrainedLanguage;
                    }
                }
                else
                {
                    _scriptBlockAst = parser.Parse(_path, ScriptContents, null, out errors, ParseMode.Default);
                }

                if (errors.Length == 0)
                {
                    this.ScriptBlock = new ScriptBlock(_scriptBlockAst, isFilter: false);
                    ScriptBlock.CacheScriptBlock(_scriptBlock.Clone(), _path, scriptContents);
                }
            }

            return(_scriptBlockAst);
        }
Ejemplo n.º 3
0
 internal ScriptBlockAst GetScriptBlockAst()
 {
     var scriptContents = ScriptContents;
     if (_scriptBlock == null)
     {
         this.ScriptBlock = ScriptBlock.TryGetCachedScriptBlock(_path, scriptContents);
     }
     if (_scriptBlock != null)
     {
         return (ScriptBlockAst)_scriptBlock.Ast;
     }
     if (_scriptBlockAst == null)
     {
         ParseError[] errors;
         Parser parser = new Parser();
         _scriptBlockAst = parser.Parse(_path, ScriptContents, null, out errors, ParseMode.Default);
         if (errors.Length == 0)
         {
             this.ScriptBlock = new ScriptBlock(_scriptBlockAst, isFilter: false);
             ScriptBlock.CacheScriptBlock(_scriptBlock.Clone(), _path, scriptContents);
         }
     }
     return _scriptBlockAst;
 }