edit: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/MerlinWeb/MerlinWeb/EngineHelper.cs;C391561 File: EngineHelper.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/MerlinWeb/MerlinWeb/EngineHelper.cs;C391561 (server) 4/17/2008 6:25 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/MerlinWeb/MerlinWeb/EngineHelper.cs;HostingSeparation1 @@ -162,11 +162,11 @@ return null; } - internal static object EvaluateCompiledCode(CompiledCode compiledExpression, ScriptScope module, + internal static object EvaluateCompiledCode(CompiledCode compiledExpression, ScriptScope scope, string defaultVirtualPath, int lineOffset) { try { - return compiledExpression.Evaluate(module); + return compiledExpression.Execute(scope); } catch (Exception e) { if (!ProcessRuntimeException(e, defaultVirtualPath, lineOffset)) throw; =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/Microsoft.Scripting.SilverLight/DynamicApplication.cs;C415429 File: DynamicApplication.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/Microsoft.Scripting.SilverLight/DynamicApplication.cs;C415429 (server) 4/30/2008 9:29 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/Microsoft.Scripting.SilverLight/DynamicApplication.cs;HostingSeparation1 @@ -249,9 +249,7 @@ // Create a new script module & execute the code. // It's important to use optimized scopes, // which are ~4x faster on benchmarks that make heavy use of top-level functions/variables. - CompiledCode compiledCode = sourceCode.Compile(new ErrorFormatter.Sink()); - ScriptScope scope = compiledCode.MakeOptimizedScope(); - compiledCode.Execute(scope); + sourceCode.Compile(new ErrorFormatter.Sink()).Execute(); } private string DownloadEntryPoint() { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/samples/dlrconsole/python/app/app.py;C417577 File: app.py =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/samples/dlrconsole/python/app/app.py;C417577 (server) 5/1/2008 12:15 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/samples/dlrconsole/python/app/app.py;HostingSeparation1 @@ -22,7 +22,7 @@ clr.AddReference('Microsoft.Scripting') from Microsoft.Scripting.Hosting import * -from Microsoft.Scripting import SourceLocation, SourceSpan +from Microsoft.Scripting import SourceLocation, SourceSpan, TokenCategory, TokenTriggers scriptEnv = ScriptEnvironment.GetEnvironment() languages = ['Python', 'JScript', 'Ruby'] =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/samples(CTP)/DLRConsole/python/app/DLRConsole.py;C417577 File: DLRConsole.py =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/samples(CTP)/DLRConsole/python/app/DLRConsole.py;C417577 (server) 5/1/2008 12:16 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/SilverLight/samples(CTP)/DLRConsole/python/app/DLRConsole.py;HostingSeparation1 @@ -19,7 +19,7 @@ clr.AddReference('Microsoft.Scripting.Core') clr.AddReference('Microsoft.Scripting') from Microsoft.Scripting.Hosting import * -from Microsoft.Scripting import SourceLocation, SourceSpan, SourceCodeKind +from Microsoft.Scripting import SourceLocation, SourceSpan, SourceCodeKind, TokenCategory, TokenTriggers scriptEnv = ScriptRuntime.Create() =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/TestHost/Program.cs;C419174 File: Program.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/TestHost/Program.cs;C419174 (server) 4/14/2008 12:07 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Hosts/TestHost/Program.cs;HostingSeparation1 @@ -275,7 +275,8 @@ def __int__(self): return self ", SourceCodeKind.Statements); - ScriptScope sm = _env.ExecuteSourceUnit(pyCode); + ScriptScope sm = _env.CreateScope(); + pyCode.Execute(sm); // instances for tests object simple = PythonCalls.Call(sm.GetVariable("simple")), len_nonzero = PythonCalls.Call(sm.GetVariable("len_nonzero")), @@ -1172,7 +1173,7 @@ ScriptSource unit = engine.CreateScriptSourceFromString("1+1", SourceCodeKind.Expression); CompiledCode code = unit.Compile(); - object o = code.Evaluate(scope); + object o = code.Execute(scope); Assert(o is int && (int)o == 2); unit = engine.CreateScriptSourceFromString("dir()", SourceCodeKind.Expression); @@ -1180,11 +1181,11 @@ if (Utilities.IsRemote(env)) { AssertExceptionThrown(delegate() { - object foo = code.Evaluate(scope); + object foo = code.Execute(scope); }); } - ObjectHandle handle = code.EvaluateAndWrap(scope); + ObjectHandle handle = code.ExecuteAndWrap(scope); IList members = engine.Operations.GetMemberNames(handle); Assert(members.IndexOf("sort") != -1, "Python dictionary should contain sort() method"); } @@ -1230,19 +1231,19 @@ RedirectOutput(TextWriter.Null, delegate() { compiled_code = VB.CreateScriptSourceFromString("?1+1", SourceCodeKind.InteractiveCode).Compile(); - result = compiled_code.Evaluate(scope); + result = compiled_code.Execute(scope); Assert(result is long && (long)result == 2); // TODO: should be null, ? should be converted to print compiled_code = VB.CreateScriptSourceFromString("?Nothing", SourceCodeKind.InteractiveCode).Compile(); - result = compiled_code.Evaluate(scope); + result = compiled_code.Execute(scope); Assert(result == null); compiled_code = PY.CreateScriptSourceFromString("1+1", SourceCodeKind.InteractiveCode).Compile(); - result = compiled_code.Evaluate(scope); + result = compiled_code.Execute(scope); Assert(result == null); compiled_code = PY.CreateScriptSourceFromString("print 'foo'", SourceCodeKind.InteractiveCode).Compile(); - result = compiled_code.Evaluate(scope); + result = compiled_code.Execute(scope); Assert(result == null); }); @@ -1489,9 +1490,8 @@ public static void Scenario_Exceptions() { if (!hostedOnDLR) { //Disable this test when this assembly is hosted from Python; stack isn't really predictable. - ScriptScope sm = _env.ExecuteSourceUnit(PY.CreateScriptSourceFromString( - "def pyf(): return abc", - SourceCodeKind.Statements)); + ScriptScope sm = _env.CreateScope(); + PY.CreateScriptSourceFromString("def pyf(): return abc", SourceCodeKind.Statements).Execute(sm); try { object x = PythonCalls.Call(sm.GetVariable("pyf")); @@ -1501,9 +1501,8 @@ } - sm = _env.ExecuteSourceUnit(PY.CreateScriptSourceFromString( - "def pyf(): return abc\n\ndef pyf2(): return pyf()", - SourceCodeKind.Statements)); + sm = _env.CreateScope(); + PY.CreateScriptSourceFromString("def pyf(): return abc\n\ndef pyf2(): return pyf()", SourceCodeKind.Statements).Execute(sm); try { object x = PythonCalls.Call(sm.GetVariable("pyf2")); @@ -1967,10 +1966,9 @@ [Scenario] public static void Scenario_GetMember() { - - ScriptScope sm = _env.ExecuteSourceUnit(JS.CreateScriptSourceFromString( - "function jsf() { this.abc = 3; }\nxyz = new jsf();\n", - SourceCodeKind.Statements)); + + ScriptScope sm = _env.CreateScope(); + JS.CreateScriptSourceFromString("function jsf() { this.abc = 3; }\nxyz = new jsf();\n", SourceCodeKind.Statements).Execute(sm); object jsObject = sm.GetVariable("xyz"); Assert(PythonOps.HasAttr(DefaultContext.Default, jsObject, SymbolTable.StringToId("abc")), "python should see JS attributes"); @@ -2086,11 +2084,12 @@ AssertExceptionThrown(delegate() { ops.RemoveMember("abc", "isalpha"); }); - ScriptScope mod = _env.ExecuteSourceUnit(PY.CreateScriptSourceFromString( -@" + ScriptScope mod = _env.CreateScope(); + PY.CreateScriptSourceFromString( + @" class foo(object): abc = 3 -", SourceCodeKind.Statements)); +", SourceCodeKind.Statements).Execute(mod); object klass = mod.GetVariable("foo"); ops.RemoveMember(klass, "abc"); // TODO: Python's remove member rule doesn't return the right true/false value. =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/IronPython.csproj;C421074 File: IronPython.csproj =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/IronPython.csproj;C421074 (server) 4/30/2008 12:15 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/IronPython.csproj;HostingSeparation1 @@ -179,7 +179,6 @@ - =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Compiler/Parser.cs;C417983 File: Parser.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Compiler/Parser.cs;C417983 (server) 4/30/2008 12:13 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Compiler/Parser.cs;HostingSeparation1 @@ -67,7 +67,7 @@ ContractUtils.RequiresNotNull(errorSink, "errorSink"); ContractUtils.RequiresNotNull(parserSink, "parserSink"); - tokenizer.Errors = new TokenizerErrorSink(this); + tokenizer.ErrorSink = new TokenizerErrorSink(this); _tokenizer = tokenizer; _errors = errorSink; =================================================================== delete: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Compiler/PythonTokenCategorizer.cs;C390406 File: PythonTokenCategorizer.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Compiler/PythonTokenCategorizer.cs;C390406 (server) 4/30/2008 12:15 PM +++ [no target file] @@ -1,144 +1,0 @@ -/* **************************************************************************** - * - * Copyright (c) Microsoft Corporation. - * - * This source code is subject to terms and conditions of the Microsoft Public License. A - * copy of the license can be found in the License.html file at the root of this distribution. If - * you cannot locate the Microsoft Public License, please send an email to - * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound - * by the terms of the Microsoft Public License. - * - * You must not remove this notice, or any other, from this software. - * - * - * ***************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Text; - -using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; -using IronPython.Hosting; -using Microsoft.Scripting.Runtime; - -namespace IronPython.Compiler { - - public sealed class PythonTokenCategorizer : TokenCategorizer { - - private readonly Tokenizer _tokenizer; - - public override SourceLocation CurrentPosition { - get { return _tokenizer.TokenStart; } - } - - public override object CurrentState { - get { return _tokenizer.CurrentState; } - } - - // TODO: - public override bool IsRestartable { - get { return false; } - } - - public override ErrorSink ErrorSink { - get { - return _tokenizer.Errors; - } - set { - _tokenizer.Errors = value; - } - } - - public PythonTokenCategorizer() { - _tokenizer = new Tokenizer(ErrorSink.Null, true); - } - - public override void Initialize(object state, SourceUnitReader sourceReader, SourceLocation initialLocation) { - _tokenizer.Initialize(state, sourceReader, initialLocation); - } - - public override bool SkipToken() { - return _tokenizer.GetNextToken().Kind != TokenKind.EndOfFile; - } - - public override TokenInfo ReadToken() { - TokenInfo result = new TokenInfo(); - Token token = _tokenizer.GetNextToken(); - result.SourceSpan = _tokenizer.TokenSpan; - - switch (token.Kind) { - case TokenKind.EndOfFile: - result.Category = TokenCategory.EndOfStream; - break; - - case TokenKind.Comment: - result.Category = TokenCategory.Comment; - break; - - case TokenKind.Name: - result.Category = TokenCategory.Identifier; - break; - - case TokenKind.Error: - result.Category = TokenCategory.Error; - break; - - case TokenKind.Constant: - result.Category = (token.Value is string) ? TokenCategory.StringLiteral : TokenCategory.NumericLiteral; - break; - - case TokenKind.LeftParenthesis: - result.Category = TokenCategory.Grouping; - result.Trigger = TokenTriggers.MatchBraces | TokenTriggers.ParameterStart; - break; - - case TokenKind.RightParenthesis: - result.Category = TokenCategory.Grouping; - result.Trigger = TokenTriggers.MatchBraces | TokenTriggers.ParameterEnd; - break; - - case TokenKind.LeftBracket: - case TokenKind.LeftBrace: - case TokenKind.RightBracket: - case TokenKind.RightBrace: - result.Category = TokenCategory.Grouping; - result.Trigger = TokenTriggers.MatchBraces; - break; - - case TokenKind.Colon: - result.Category = TokenCategory.Delimiter; - break; - - case TokenKind.Semicolon: - result.Category = TokenCategory.Delimiter; - break; - - case TokenKind.Comma: - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.ParameterNext; - break; - - case TokenKind.Dot: - result.Category = TokenCategory.Operator; - result.Trigger = TokenTriggers.MemberSelect; - break; - - case TokenKind.NewLine: - result.Category = TokenCategory.WhiteSpace; - break; - - default: - if (token.Kind >= TokenKind.FirstKeyword && token.Kind <= TokenKind.LastKeyword) { - result.Category = TokenCategory.Keyword; - break; - } - - result.Category = TokenCategory.Operator; - break; - } - - return result; - } - } -} =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Compiler/Tokenizer.cs;C413883 File: Tokenizer.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Compiler/Tokenizer.cs;C413883 (server) 4/30/2008 12:11 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Compiler/Tokenizer.cs;HostingSeparation1 @@ -26,7 +26,6 @@ using Microsoft.Scripting; using Microsoft.Scripting.Generation; -using Microsoft.Scripting.Hosting; using Microsoft.Scripting.Runtime; using Microsoft.Scripting.Utils; @@ -36,7 +35,7 @@ /// IronPython tokenizer /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Tokenizer")] - public sealed partial class Tokenizer { + public sealed partial class Tokenizer : TokenizerService { private const int EOF = -1; private const int MaxIndent = 80; @@ -85,21 +84,30 @@ private TokenizerBuffer _buffer; private ErrorSink _errors; private Severity _indentationInconsistencySeverity; - private bool _endContinues; + private bool _endContinues; - public object CurrentState { + // TODO: + public override bool IsRestartable { + get { return false; } + } + + public override object CurrentState { get { return _state; } } + public override SourceLocation CurrentPosition { + get { return TokenStart; } + } + public SourceUnit SourceUnit { get { return _sourceUnit; } } - public ErrorSink Errors { + public override ErrorSink ErrorSink { get { return _errors; } set { ContractUtils.RequiresNotNull(value, "value"); @@ -142,6 +150,10 @@ } } + public Tokenizer() + : this(ErrorSink.Null, true) { + } + public Tokenizer(ErrorSink errorSink) : this(errorSink, false) { } @@ -167,7 +179,7 @@ Initialize(null, sourceUnit.GetReader(), SourceLocation.MinValue, DefaultBufferCapacity); } - public void Initialize(object state, SourceUnitReader sourceReader, SourceLocation initialLocation) { + public override void Initialize(object state, SourceUnitReader sourceReader, SourceLocation initialLocation) { Initialize(state, sourceReader, initialLocation, DefaultBufferCapacity); } @@ -189,13 +201,87 @@ DumpBeginningOfUnit(); } - public int ReadToken() { - + public override TokenInfo ReadToken() { if (_buffer == null) { throw new InvalidOperationException("Uninitialized"); } - return (int)GetNextToken().Kind; + TokenInfo result = new TokenInfo(); + Token token = GetNextToken(); + result.SourceSpan = TokenSpan; + + switch (token.Kind) { + case TokenKind.EndOfFile: + result.Category = TokenCategory.EndOfStream; + break; + + case TokenKind.Comment: + result.Category = TokenCategory.Comment; + break; + + case TokenKind.Name: + result.Category = TokenCategory.Identifier; + break; + + case TokenKind.Error: + result.Category = TokenCategory.Error; + break; + + case TokenKind.Constant: + result.Category = (token.Value is string) ? TokenCategory.StringLiteral : TokenCategory.NumericLiteral; + break; + + case TokenKind.LeftParenthesis: + result.Category = TokenCategory.Grouping; + result.Trigger = TokenTriggers.MatchBraces | TokenTriggers.ParameterStart; + break; + + case TokenKind.RightParenthesis: + result.Category = TokenCategory.Grouping; + result.Trigger = TokenTriggers.MatchBraces | TokenTriggers.ParameterEnd; + break; + + case TokenKind.LeftBracket: + case TokenKind.LeftBrace: + case TokenKind.RightBracket: + case TokenKind.RightBrace: + result.Category = TokenCategory.Grouping; + result.Trigger = TokenTriggers.MatchBraces; + break; + + case TokenKind.Colon: + result.Category = TokenCategory.Delimiter; + break; + + case TokenKind.Semicolon: + result.Category = TokenCategory.Delimiter; + break; + + case TokenKind.Comma: + result.Category = TokenCategory.Delimiter; + result.Trigger = TokenTriggers.ParameterNext; + break; + + case TokenKind.Dot: + result.Category = TokenCategory.Operator; + result.Trigger = TokenTriggers.MemberSelect; + break; + + case TokenKind.NewLine: + result.Category = TokenCategory.WhiteSpace; + break; + + default: + if (token.Kind >= TokenKind.FirstKeyword && token.Kind <= TokenKind.LastKeyword) { + result.Category = TokenCategory.Keyword; + break; + } + + result.Category = TokenCategory.Operator; + break; + } + + return result; } internal bool TokenStringEquals(string str) { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Runtime/PythonContext.cs;C419174 File: PythonContext.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Runtime/PythonContext.cs;C419174 (server) 4/30/2008 12:27 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/IronPython/IronPython/Runtime/PythonContext.cs;HostingSeparation1 @@ -39,9 +39,6 @@ using PyAst = IronPython.Compiler.Ast; -// TODO: remove HAPI reference -using Microsoft.Scripting.Hosting; - namespace IronPython.Runtime { public sealed class PythonContext : LanguageContext { private static readonly Guid PythonLanguageGuid = new Guid("03ed4b80-d10b-442f-ad9a-47dae85b2051"); @@ -847,7 +844,7 @@ } private static T GetAssemblyAttribute() where T : Attribute { - Assembly asm = typeof(ScriptEngine).Assembly; + Assembly asm = typeof(PythonContext).Assembly; object[] attributes = asm.GetCustomAttributes(typeof(T), false); if (attributes != null && attributes.Length > 0) { return (T)attributes[0]; @@ -1082,12 +1079,12 @@ return GetContext(context).EnsurePythonModule(context.GlobalScope); } - public override ServiceType GetService(params object[] args) { - if (typeof(ServiceType) == typeof(TokenCategorizer)) { - return (ServiceType)(object)new PythonTokenCategorizer(); + public override TService GetService(params object[] args) { + if (typeof(TService) == typeof(TokenizerService)) { + return (TService)(object)new Tokenizer(); } - return base.GetService(args); + return base.GetService(args); } public static PythonEngineOptions GetPythonOptions(CodeContext context) { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/JS.Runtime.csproj;C415429 File: JS.Runtime.csproj =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/JS.Runtime.csproj;C415429 (server) 4/30/2008 8:21 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/JS.Runtime.csproj;HostingSeparation1 @@ -110,6 +110,7 @@ + @@ -126,7 +127,6 @@ - =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/JSContext.cs;C415805 File: JSContext.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/JSContext.cs;C415805 (server) 4/30/2008 8:08 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/JSContext.cs;HostingSeparation1 @@ -208,13 +208,13 @@ return new Version(3, 0); } } - - public override ServiceType GetService(params object[] args) { - if (typeof(ServiceType) == typeof(Microsoft.Scripting.Hosting.TokenCategorizer)) { - return (ServiceType)(object)new Microsoft.JScript.Runtime.Hosting.TokenCategorizer(this); + + public override TService GetService(params object[] args) { + if (typeof(TService) == typeof(TokenizerService)) { + return (TService)(object)new JSTokenizerService(ECMA3Mode); } - return base.GetService(args); + return base.GetService(args); } public override string FormatException(Exception exception) { =================================================================== rename, edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/Compiler/JSTokenizerService.cs;C415429 File: JSTokenizerService.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/Compiler/JSTokenizerService.cs;C415429 (server) 4/30/2008 12:28 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/JS/JS.Runtime/Compiler/JSTokenizerService.cs;HostingSeparation1 @@ -1,25 +1,30 @@ -using DlrSourceLocation = Microsoft.Scripting.SourceLocation; -using DlrSourceSpan = Microsoft.Scripting.SourceSpan; -using Microsoft.Scripting.Hosting; - using System.Collections.Generic; +using DlrSourceLocation = Microsoft.Scripting.SourceLocation; +using DlrSourceSpan = Microsoft.Scripting.SourceSpan; +using DlrTokenInfo = Microsoft.Scripting.TokenInfo; +using DlrTokenCategory = Microsoft.Scripting.TokenCategory; +using DlrTokenTriggers = Microsoft.Scripting.TokenTriggers; +using DlrTokenizerService = Microsoft.Scripting.TokenizerService; +using Microsoft.Scripting.Runtime; + using Microsoft.JScript.Compiler; using Microsoft.JScript.Compiler.Tokens; -namespace Microsoft.JScript.Runtime.Hosting { - public class TokenCategorizer : Microsoft.Scripting.Hosting.TokenCategorizer { +namespace Microsoft.JScript.Compiler { + public class JSTokenizerService : DlrTokenizerService { + private Tokenizer _Tokenizer; - private JSContext _context; + private bool _ecma3Mode; - public TokenCategorizer(JSContext context) { - _context = context; + public JSTokenizerService(bool ecma3Mode) { + _ecma3Mode = ecma3Mode; } public override void Initialize(object state, Microsoft.Scripting.SourceUnitReader sourceReader, Microsoft.Scripting.SourceLocation initialLocation) { // TODO: restart tokenizer, work with SourceUnitReader (it's a TextReader) not with the array of chars: - _Tokenizer = new Tokenizer(sourceReader.ReadToEnd().ToCharArray(), new IdentifierTable(_context.ECMA3Mode), _context.ECMA3Mode); + _Tokenizer = new Tokenizer(sourceReader.ReadToEnd().ToCharArray(), new IdentifierTable(_ecma3Mode), _ecma3Mode); _Tokenizer.Position = ToCompilerLocation(initialLocation); } @@ -67,19 +72,19 @@ // TODO: remove; this should be implemented only by the base class - public override IEnumerable ReadTokens(int countOfChars) { - List tokens = new List(); + public override IEnumerable ReadTokens(int countOfChars) { + List tokens = new List(); int StartIndex = CurrentPosition.Index; while ((CurrentPosition.Index - StartIndex < countOfChars)) { int commentCount = _Tokenizer.Comments.Count; - TokenInfo tokenInfo = ReadToken(); + DlrTokenInfo tokenInfo = ReadToken(); int addedCommentCount = _Tokenizer.Comments.Count - commentCount; if ((addedCommentCount > 0)) { for (int i = 0; i <= addedCommentCount - 1; i++) { Comment c = _Tokenizer.Comments[commentCount + i]; - tokens.Add(new TokenInfo(new DlrSourceSpan(new DlrSourceLocation(c.Location.StartPosition, c.Location.StartLine, c.Location.StartColumn + 1), new DlrSourceLocation(c.Location.EndPosition, c.Location.EndLine, c.Location.EndColumn + 1)), TokenCategory.Comment, TokenTriggers.None)); + tokens.Add(new DlrTokenInfo(new DlrSourceSpan(new DlrSourceLocation(c.Location.StartPosition, c.Location.StartLine, c.Location.StartColumn + 1), new DlrSourceLocation(c.Location.EndPosition, c.Location.EndLine, c.Location.EndColumn + 1)), DlrTokenCategory.Comment, DlrTokenTriggers.None)); } } tokens.Add(tokenInfo); @@ -89,15 +94,15 @@ } - public override TokenInfo ReadToken() { - TokenInfo result = new TokenInfo(); + public override DlrTokenInfo ReadToken() { + DlrTokenInfo result = new DlrTokenInfo(); Token token = _Tokenizer.GetNext(); result.SourceSpan = new DlrSourceSpan(new DlrSourceLocation(token.StartPosition, token.StartLine, token.StartColumn + 1), new DlrSourceLocation(token.StartPosition + token.Width, token.StartLine, token.StartColumn + 1 + token.Width)); switch (token.Kind) { case Token.Type.EndOfInput: - result.Category = TokenCategory.EndOfStream; + result.Category = DlrTokenCategory.EndOfStream; break; @@ -160,49 +165,49 @@ case Token.Type.@while: case Token.Type.with: - result.Category = TokenCategory.Keyword; + result.Category = DlrTokenCategory.Keyword; break; case Token.Type.Dot: - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.MemberSelect; + result.Category = DlrTokenCategory.Delimiter; + result.Trigger = DlrTokenTriggers.MemberSelect; break; case Token.Type.Comma: - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.ParameterNext; + result.Category = DlrTokenCategory.Delimiter; + result.Trigger = DlrTokenTriggers.ParameterNext; break; case Token.Type.Semicolon: - result.Category = TokenCategory.Delimiter; + result.Category = DlrTokenCategory.Delimiter; break; case Token.Type.LeftParenthesis: - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.ParameterStart | TokenTriggers.MatchBraces; + result.Category = DlrTokenCategory.Delimiter; + result.Trigger = DlrTokenTriggers.ParameterStart | DlrTokenTriggers.MatchBraces; break; case Token.Type.RightParenthesis: - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.ParameterEnd | TokenTriggers.MatchBraces; + result.Category = DlrTokenCategory.Delimiter; + result.Trigger = DlrTokenTriggers.ParameterEnd | DlrTokenTriggers.MatchBraces; break; case Token.Type.LeftBrace: case Token.Type.LeftBracket: - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.MatchBraces; + result.Category = DlrTokenCategory.Delimiter; + result.Trigger = DlrTokenTriggers.MatchBraces; break; case Token.Type.RightBrace: case Token.Type.RightBracket: - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.MatchBraces; + result.Category = DlrTokenCategory.Delimiter; + result.Trigger = DlrTokenTriggers.MatchBraces; break; case Token.Type.RegularExpressionLiteral: - result.Category = TokenCategory.RegularExpressionLiteral; + result.Category = DlrTokenCategory.RegularExpressionLiteral; break; case Token.Type.Ampersand: @@ -244,27 +249,27 @@ case Token.Type.Star: case Token.Type.StarEqual: case Token.Type.Tilda: - result.Category = TokenCategory.Operator; + result.Category = DlrTokenCategory.Operator; break; case Token.Type.StringLiteral: - result.Category = TokenCategory.StringLiteral; + result.Category = DlrTokenCategory.StringLiteral; break; case Token.Type.Comment: - result.Category = TokenCategory.LineComment; + result.Category = DlrTokenCategory.LineComment; break; case Token.Type.Identifier: - result.Category = TokenCategory.Identifier; + result.Category = DlrTokenCategory.Identifier; break; case Token.Type.NumericLiteral: - result.Category = TokenCategory.NumericLiteral; + result.Category = DlrTokenCategory.NumericLiteral; break; case Token.Type.Bad: - result.Category = TokenCategory.Error; + result.Category = DlrTokenCategory.Error; break; } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Ruby.csproj;C420856 File: Ruby.csproj =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Ruby.csproj;C420856 (server) 4/30/2008 7:36 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Ruby.csproj;HostingSeparation1 @@ -213,7 +213,6 @@ - =================================================================== delete: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/RubyTokenCategorizer.cs;C392185 File: RubyTokenCategorizer.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/RubyTokenCategorizer.cs;C392185 (server) 4/30/2008 7:37 PM +++ [no target file] @@ -1,262 +1,0 @@ -/* **************************************************************************** - * - * Copyright (c) Microsoft Corporation. - * - * This source code is subject to terms and conditions of the Microsoft Public License. A - * copy of the license can be found in the License.html file at the root of this distribution. If - * you cannot locate the Microsoft Public License, please send an email to - * ironruby@microsoft.com. By using this source code in any fashion, you are agreeing to be bound - * by the terms of the Microsoft Public License. - * - * You must not remove this notice, or any other, from this software. - * - * - * ***************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Text; - -using Microsoft.Scripting.Hosting; -using Microsoft.Scripting; -using Microsoft.Scripting.Utils; - -namespace Ruby.Compiler { - - public sealed class RubyTokenCategorizer : TokenCategorizer { - - private Tokenizer _tokenizer; - - public override SourceLocation CurrentPosition { - get { return _tokenizer.TokenSpan.End; } // TODO: ??? - } - - public override object CurrentState { - get { return _tokenizer.CurrentState; } - } - - public override bool IsRestartable { - get { return false; } - } - - public override ErrorSink/*!*/ ErrorSink { - get { - return _tokenizer.ErrorSink; - } - set { - _tokenizer.ErrorSink = value; - } - } - - public RubyTokenCategorizer() : base() { - _tokenizer = new Tokenizer(true); - } - - public override void Initialize(object state, SourceUnitReader/*!*/ sourceReader, SourceLocation initialLocation) { - _tokenizer.Initialize(state, sourceReader, initialLocation); - } - - public override bool SkipToken() { - return _tokenizer.GetNextToken() != Tokens.EndOfFile; - } - - public override TokenInfo ReadToken() { - - TokenInfo result = new TokenInfo(); - - Tokens token = _tokenizer.GetNextToken(); - result.SourceSpan = _tokenizer.TokenSpan; - - switch (token) { - case Tokens.Undef: - case Tokens.Rescue: - case Tokens.Ensure: - case Tokens.If: - case Tokens.Unless: - case Tokens.Then: - case Tokens.Elsif: - case Tokens.Else: - case Tokens.Case: - case Tokens.When: - case Tokens.While: - case Tokens.Until: - case Tokens.For: - case Tokens.Break: - case Tokens.Next: - case Tokens.Redo: - case Tokens.Retry: - case Tokens.In: - case Tokens.Return: - case Tokens.Yield: - case Tokens.Super: - case Tokens.Self: - case Tokens.Nil: - case Tokens.True: - case Tokens.False: - case Tokens.And: - case Tokens.Or: - case Tokens.Not: - case Tokens.IfMod: - case Tokens.UnlessMod: - case Tokens.WhileMod: - case Tokens.UntilMod: - case Tokens.RescueMod: - case Tokens.Alias: - case Tokens.Defined: - case Tokens.Line: - case Tokens.File: - result.Category = TokenCategory.Keyword; - break; - - case Tokens.Def: - case Tokens.Class: - case Tokens.Module: - case Tokens.End: - case Tokens.Begin: - case Tokens.UppercaseBegin: - case Tokens.UppercaseEnd: - case Tokens.Do: - case Tokens.LoopDo: - case Tokens.BlockDo: - result.Category = TokenCategory.Keyword; - result.Trigger = TokenTriggers.MatchBraces; - break; - - case Tokens.Uplus: - case Tokens.Uminus: - case Tokens.UminusNum: - case Tokens.Pow: - case Tokens.Cmp: - case Tokens.Eq: - case Tokens.Eqq: - case Tokens.Neq: - case Tokens.Geq: - case Tokens.Leq: - case Tokens.BitwiseAnd: - case Tokens.BitwiseOr: - case Tokens.Match: // =~ - case Tokens.Nmatch: // !~ - case Tokens.Dot2: // .. - case Tokens.Dot3: // ... - case Tokens.Aref: // [] - case Tokens.Aset: // []= - case Tokens.Lshft: - case Tokens.Rshft: - case Tokens.Assoc: - case Tokens.Star: - case Tokens.Ampersand: - case Tokens.Assignment: - result.Category = TokenCategory.Operator; - break; - - case Tokens.SeparatingDoubleColon: - case Tokens.LeadingDoubleColon: - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.MemberSelect; - break; - - case Tokens.Lbrack: // [ - case Tokens.Lbrace: // { - case (Tokens)'{': - case Tokens.LbraceArg: // { - case (Tokens)'}': - case (Tokens)']': - case (Tokens)'|': - result.Category = TokenCategory.Grouping; - result.Trigger = TokenTriggers.MatchBraces; - break; - - case Tokens.LeftParen: // ( - case Tokens.LparenArg: // ( - result.Category = TokenCategory.Grouping; - result.Trigger = TokenTriggers.MatchBraces | TokenTriggers.ParameterStart; - break; - - case (Tokens)')': - result.Category = TokenCategory.Grouping; - result.Trigger = TokenTriggers.MatchBraces | TokenTriggers.ParameterEnd; - break; - - case (Tokens)',': - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.ParameterNext; - break; - - case (Tokens)'.': - result.Category = TokenCategory.Delimiter; - result.Trigger = TokenTriggers.MemberSelect; - break; - - case Tokens.StringEnd: - result.Category = TokenCategory.StringLiteral; - break; - - case Tokens.StringEmbeddedVariableBegin: // # in string followed by @ or $ - case Tokens.StringEmbeddedCodeBegin: // # in string followed by { - result.Category = TokenCategory.Delimiter; - break; - - case Tokens.Identifier: - case Tokens.FunctionIdentifier: - case Tokens.GlobalVariable: - case Tokens.InstanceVariable: - case Tokens.ConstantIdentifier: - case Tokens.ClassVariable: - case Tokens.MatchReference: - result.Category = TokenCategory.Identifier; - break; - - case Tokens.Integer: - case Tokens.Float: - result.Category = TokenCategory.NumericLiteral; - break; - - case Tokens.StringContent: - case Tokens.StringBeg: - case Tokens.ShellStringBegin: - case Tokens.Symbeg: - case Tokens.WordsBeg: - case Tokens.VerbatimWordsBegin: - case Tokens.RegexpBeg: - case Tokens.RegexpEnd: - // TODO: distingush various kinds of string content (regex, string, heredoc) - result.Category = TokenCategory.StringLiteral; - break; - - case (Tokens)'#': - result.Category = TokenCategory.LineComment; - break; - - case Tokens.EndOfFile: - result.Category = TokenCategory.EndOfStream; - break; - - case (Tokens)'\n': - case Tokens.EndOfLine: - case Tokens.Whitespace: - result.Category = TokenCategory.WhiteSpace; - break; - - case Tokens.SingleLineComment: - result.Category = TokenCategory.LineComment; - break; - - case Tokens.MultiLineComment: - result.Category = TokenCategory.Comment; - break; - - case Tokens.Error: - case Tokens.InvalidCharacter: - result.Category = TokenCategory.Error; - break; - - default: - result.Category = TokenCategory.None; - break; - } - - return result; - } - } - -} =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Tokenizer.cs;C413883 File: Tokenizer.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Tokenizer.cs;C413883 (server) 4/30/2008 7:30 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Compiler/Parser/Tokenizer.cs;HostingSeparation1 @@ -19,10 +19,11 @@ using System.Globalization; using System.IO; using System.Text; + using Microsoft.Scripting; -using Microsoft.Scripting.Hosting; using Microsoft.Scripting.Math; using Microsoft.Scripting.Utils; + using Ruby.Compiler.Ast; using Ruby.Runtime; @@ -39,7 +40,7 @@ EXPR_CLASS, /* immediate after `class', no here document. */ }; - public class Tokenizer { + public class Tokenizer : TokenizerService { // TODO: make private (unit tests) public sealed class BignumParser : UnsignedBigIntegerParser { private string/*!*/ _buffer; // TODO: TokenizerBuffer @@ -88,7 +89,7 @@ /// private Parser _parser; - public object CurrentState { + public override object CurrentState { get { return null; } @@ -100,7 +101,7 @@ } } - public ErrorSink/*!*/ ErrorSink { + public override ErrorSink/*!*/ ErrorSink { get { return _errorSink; } set { ContractUtils.RequiresNotNull(value, "value"); @@ -108,12 +109,20 @@ } } + public override bool IsRestartable { + get { return false; } + } + internal bool IsEndOfFile { get { return _eofReached; // TODO: _buffer.Peek() == TokenizerBuffer.EOF; } } + public override SourceLocation CurrentPosition { + get { return _tokenSpan.End; } // TODO: ??? + } + public SourceSpan TokenSpan { get { return _tokenSpan; @@ -133,6 +142,10 @@ return _lexicalState; } } + + public Tokenizer() + : this(true) { + } public Tokenizer(bool verbatim) : this(verbatim, ErrorSink.Null) { @@ -167,7 +180,7 @@ Initialize(null, sourceUnit.GetReader(), SourceLocation.MinValue, DefaultBufferCapacity); } - public void Initialize(object state, SourceUnitReader sourceReader, SourceLocation initialLocation) { + public override void Initialize(object state, SourceUnitReader sourceReader, SourceLocation initialLocation) { Initialize(state, sourceReader, initialLocation, DefaultBufferCapacity); } @@ -699,7 +712,7 @@ _tokenValue = new TokenValue(); #endif - Tokens result = ReadToken(); + Tokens result = Tokenize(); if (result == Tokens.EndOfFile) { _eofReached = true; @@ -708,7 +721,7 @@ return result; } - private Tokens ReadToken() { + private Tokens Tokenize() { yytext = new StringBuilder(); bool whitespaceSeen = false; @@ -3304,5 +3317,211 @@ } #endregion + + #region Tokenizer Service + + public override bool SkipToken() { + return GetNextToken() != Tokens.EndOfFile; + } + + public override TokenInfo ReadToken() { + + TokenInfo result = new TokenInfo(); + + Tokens token = GetNextToken(); + result.SourceSpan = TokenSpan; + + switch (token) { + case Tokens.Undef: + case Tokens.Rescue: + case Tokens.Ensure: + case Tokens.If: + case Tokens.Unless: + case Tokens.Then: + case Tokens.Elsif: + case Tokens.Else: + case Tokens.Case: + case Tokens.When: + case Tokens.While: + case Tokens.Until: + case Tokens.For: + case Tokens.Break: + case Tokens.Next: + case Tokens.Redo: + case Tokens.Retry: + case Tokens.In: + case Tokens.Return: + case Tokens.Yield: + case Tokens.Super: + case Tokens.Self: + case Tokens.Nil: + case Tokens.True: + case Tokens.False: + case Tokens.And: + case Tokens.Or: + case Tokens.Not: + case Tokens.IfMod: + case Tokens.UnlessMod: + case Tokens.WhileMod: + case Tokens.UntilMod: + case Tokens.RescueMod: + case Tokens.Alias: + case Tokens.Defined: + case Tokens.Line: + case Tokens.File: + result.Category = TokenCategory.Keyword; + break; + + case Tokens.Def: + case Tokens.Class: + case Tokens.Module: + case Tokens.End: + case Tokens.Begin: + case Tokens.UppercaseBegin: + case Tokens.UppercaseEnd: + case Tokens.Do: + case Tokens.LoopDo: + case Tokens.BlockDo: + result.Category = TokenCategory.Keyword; + result.Trigger = TokenTriggers.MatchBraces; + break; + + case Tokens.Uplus: + case Tokens.Uminus: + case Tokens.UminusNum: + case Tokens.Pow: + case Tokens.Cmp: + case Tokens.Eq: + case Tokens.Eqq: + case Tokens.Neq: + case Tokens.Geq: + case Tokens.Leq: + case Tokens.BitwiseAnd: + case Tokens.BitwiseOr: + case Tokens.Match: // =~ + case Tokens.Nmatch: // !~ + case Tokens.Dot2: // .. + case Tokens.Dot3: // ... + case Tokens.Aref: // [] + case Tokens.Aset: // []= + case Tokens.Lshft: + case Tokens.Rshft: + case Tokens.Assoc: + case Tokens.Star: + case Tokens.Ampersand: + case Tokens.Assignment: + result.Category = TokenCategory.Operator; + break; + + case Tokens.SeparatingDoubleColon: + case Tokens.LeadingDoubleColon: + result.Category = TokenCategory.Delimiter; + result.Trigger = TokenTriggers.MemberSelect; + break; + + case Tokens.Lbrack: // [ + case Tokens.Lbrace: // { + case (Tokens)'{': + case Tokens.LbraceArg: // { + case (Tokens)'}': + case (Tokens)']': + case (Tokens)'|': + result.Category = TokenCategory.Grouping; + result.Trigger = TokenTriggers.MatchBraces; + break; + + case Tokens.LeftParen: // ( + case Tokens.LparenArg: // ( + result.Category = TokenCategory.Grouping; + result.Trigger = TokenTriggers.MatchBraces | TokenTriggers.ParameterStart; + break; + + case (Tokens)')': + result.Category = TokenCategory.Grouping; + result.Trigger = TokenTriggers.MatchBraces | TokenTriggers.ParameterEnd; + break; + + case (Tokens)',': + result.Category = TokenCategory.Delimiter; + result.Trigger = TokenTriggers.ParameterNext; + break; + + case (Tokens)'.': + result.Category = TokenCategory.Delimiter; + result.Trigger = TokenTriggers.MemberSelect; + break; + + case Tokens.StringEnd: + result.Category = TokenCategory.StringLiteral; + break; + + case Tokens.StringEmbeddedVariableBegin: // # in string followed by @ or $ + case Tokens.StringEmbeddedCodeBegin: // # in string followed by { + result.Category = TokenCategory.Delimiter; + break; + + case Tokens.Identifier: + case Tokens.FunctionIdentifier: + case Tokens.GlobalVariable: + case Tokens.InstanceVariable: + case Tokens.ConstantIdentifier: + case Tokens.ClassVariable: + case Tokens.MatchReference: + result.Category = TokenCategory.Identifier; + break; + + case Tokens.Integer: + case Tokens.Float: + result.Category = TokenCategory.NumericLiteral; + break; + + case Tokens.StringContent: + case Tokens.StringBeg: + case Tokens.ShellStringBegin: + case Tokens.Symbeg: + case Tokens.WordsBeg: + case Tokens.VerbatimWordsBegin: + case Tokens.RegexpBeg: + case Tokens.RegexpEnd: + // TODO: distingush various kinds of string content (regex, string, heredoc) + result.Category = TokenCategory.StringLiteral; + break; + + case (Tokens)'#': + result.Category = TokenCategory.LineComment; + break; + + case Tokens.EndOfFile: + result.Category = TokenCategory.EndOfStream; + break; + + case (Tokens)'\n': + case Tokens.EndOfLine: + case Tokens.Whitespace: + result.Category = TokenCategory.WhiteSpace; + break; + + case Tokens.SingleLineComment: + result.Category = TokenCategory.LineComment; + break; + + case Tokens.MultiLineComment: + result.Category = TokenCategory.Comment; + break; + + case Tokens.Error: + case Tokens.InvalidCharacter: + result.Category = TokenCategory.Error; + break; + + default: + result.Category = TokenCategory.None; + break; + } + + return result; + } + + #endregion } } =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C420856 File: RubyContext.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;C420856 (server) 4/17/2008 6:45 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/Ruby/Ruby/Runtime/RubyContext.cs;HostingSeparation1 @@ -21,7 +21,6 @@ using Microsoft.Scripting; using Microsoft.Scripting.Actions; using Microsoft.Scripting.Ast; -using Microsoft.Scripting.Hosting; using Microsoft.Scripting.Utils; using Ruby.Builtins; using Ruby.Compiler; @@ -170,12 +169,12 @@ } } - public override ServiceType GetService(params object[] args) { - if (typeof(ServiceType) == typeof(TokenCategorizer)) { - return (ServiceType)(object)new RubyTokenCategorizer(); + public override TService GetService(params object[] args) { + if (typeof(TService) == typeof(TokenizerService)) { + return (TService)(object)new Tokenizer(); } - return base.GetService(args); + return base.GetService(args); } public override string DisplayName { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Scripting.vbproj;C403416 File: Scripting.vbproj =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Scripting.vbproj;C403416 (server) 4/30/2008 7:28 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Scripting.vbproj;HostingSeparation1 @@ -165,7 +165,7 @@ - + True Application.myapp =================================================================== rename, edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Hosting/Services/VisualBasicTokenizerService.vb;C390406 File: VisualBasicTokenizerService.vb =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Hosting/Services/VisualBasicTokenizerService.vb;C390406 (server) 4/30/2008 7:27 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Hosting/Services/VisualBasicTokenizerService.vb;HostingSeparation1 @@ -5,13 +5,12 @@ ' Imports System.IO -Imports Microsoft.Scripting.Hosting Imports Microsoft.VisualBasic.Compiler.Tokens Imports Microsoft.VisualBasic.Compiler Namespace Microsoft.VisualBasic.Scripting.Hosting - Friend NotInheritable Class VisualBasicTokenCategorizer - Inherits TokenCategorizer + Friend NotInheritable Class VisualBasicTokenizerService + Inherits TokenizerService Implements IDisposable Private _scanner As Scanner =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Runtime/VisualBasicLanguageContext.vb;C415805 File: VisualBasicLanguageContext.vb =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Runtime/VisualBasicLanguageContext.vb;C415805 (server) 4/30/2008 7:29 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Languages/VBX/Microsoft.VisualBasic.Scripting/Runtime/VisualBasicLanguageContext.vb;HostingSeparation1 @@ -209,12 +209,12 @@ Return IronPython.Runtime.Operations.PythonOps.CallWithKeywordArgs(context, func, args, names) End Function - Public Overrides Function GetService(Of ServiceType As Class)(ByVal ParamArray args() As Object) As ServiceType - If (GetType(ServiceType).Equals(GetType(TokenCategorizer))) Then - Return CType(CType(New VisualBasicTokenCategorizer(), Object), ServiceType) + Public Overrides Function GetService(Of TService As Class)(ByVal ParamArray args() As Object) As TService + If (GetType(TService).Equals(GetType(TokenizerService))) Then + Return CType(CType(New VisualBasicTokenizerService(), Object), TService) End If - Return MyBase.GetService(Of ServiceType)(args) + Return MyBase.GetService(Of TService)(args) End Function Public Overrides ReadOnly Property DisplayName() As String =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Runtime/Microsoft.Scripting/Hosting/Shell/ConsoleHost.cs;C413883 File: ConsoleHost.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Runtime/Microsoft.Scripting/Hosting/Shell/ConsoleHost.cs;C413883 (server) 4/14/2008 12:12 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Runtime/Microsoft.Scripting/Hosting/Shell/ConsoleHost.cs;HostingSeparation1 @@ -148,7 +148,7 @@ _engine.SetScriptSourceSearchPaths(Options.SourceUnitSearchPaths); _languageOptionsParser.Engine = _engine; - _languageOptionsParser.Platform = _runtime.Platform; + _languageOptionsParser.Platform = _runtime.Host.PlatformAdaptationLayer; _languageOptionsParser.EngineOptions = _engine.Options; _languageOptionsParser.GlobalOptions = GlobalOptions; =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Runtime/Tests/TestAst/TestOptionsParser.cs;C413883 File: TestOptionsParser.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Runtime/Tests/TestAst/TestOptionsParser.cs;C413883 (server) 4/14/2008 12:13 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Runtime/Tests/TestAst/TestOptionsParser.cs;HostingSeparation1 @@ -65,7 +65,7 @@ string dir = PopNextArg(); - if (!Engine.Runtime.Platform.DirectoryExists(dir)) + if (!Engine.Runtime.Host.PlatformAdaptationLayer.DirectoryExists(dir)) throw new System.IO.DirectoryNotFoundException(String.Format("Directory '{0}' doesn't exist.", dir)); Snippets.Shared.SnippetsDirectory = dir; =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Nessie/CodeSenseSupport.py;C419174 File: CodeSenseSupport.py =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Nessie/CodeSenseSupport.py;C419174 (server) 5/1/2008 10:58 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Nessie/CodeSenseSupport.py;HostingSeparation1 @@ -20,7 +20,7 @@ from Microsoft.Scripting.Hosting import TokenCategorizer -from Microsoft.Scripting import SourceLocation +from Microsoft.Scripting import SourceLocation, TokenTriggers, TokenCategory def GetTokenTrigger(console, code): engine = console.CurrentEngine @@ -30,8 +30,6 @@ return token_categorizer.ReadToken().Trigger -from Microsoft.Scripting.Hosting import TokenTriggers - def HandleUserInputForMethodSignatureTip(console, args): if (len(args.NewText) == 1): if (Trigger(GetTokenTrigger(console, args.NewText), TokenTriggers.ParameterStart)): @@ -86,8 +84,6 @@ if (obj != None): return console.CurrentEngine.Operations.GetMemberNames(obj) -from Microsoft.Scripting.Hosting import TokenCategory - def GetCurrentObject(console, expression): engine = console.CurrentEngine source_unit = engine.CreateScriptSourceFromString(expression) =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Shell/Connector.cs;C390406 File: Connector.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Shell/Connector.cs;C390406 (server) 4/30/2008 8:50 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Shell/Connector.cs;HostingSeparation1 @@ -483,10 +483,9 @@ ScriptSource sourceCode = GetDocumentSourceCode(scriptEngine, document, pane.TextView.TextBuffer); if (scriptScope == null) { - scriptScope = GetScriptEnvironment(pane.NessiePane).ExecuteSourceUnit(sourceCode); - } else { - sourceCode.Execute(scriptScope); - } + scriptScope = GetScriptEnvironment(pane.NessiePane).CreateScope(); + } + sourceCode.Execute(scriptScope); iPane.SwitchModuleContext(new BufferLanguageInfo(scriptEngine, scriptScope, GetModuleName(document))); } catch (Exception e) { =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Tests/IntegrationTests.cs;C390406 File: IntegrationTests.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Tests/IntegrationTests.cs;C390406 (server) 4/30/2008 7:51 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/Tools/Nessie/Tests/IntegrationTests.cs;HostingSeparation1 @@ -29,11 +29,11 @@ private static IInteractionScopeManager _interactionScopeManager; #pragma warning restore 649 - private ScriptRuntime _localEnvironment; - private ScriptEngine _localVBProvider; - private ScriptEngine _localJSProvider; - private ScriptEngine _localPythonProvider; - private ScriptEngine _localRubyProvider; + private ScriptRuntime _runtime; + private ScriptEngine _vb; + private ScriptEngine _js; + private ScriptEngine _python; + private ScriptEngine _ruby; private IScriptInteractiveWindow _localScriptInteractiveWindow; private Dispatcher _dispatcher; @@ -81,16 +81,16 @@ LoaderHelpers.Initialize(_files, false, this.GetType()); - _localEnvironment = ScriptRuntime.Create(); - _localEnvironment.LoadAssembly(typeof(string).Assembly); - _localEnvironment.LoadAssembly(typeof(System.Diagnostics.Debug).Assembly); + _runtime = ScriptRuntime.Create(); + _runtime.LoadAssembly(typeof(string).Assembly); + _runtime.LoadAssembly(typeof(System.Diagnostics.Debug).Assembly); - _localVBProvider = _localEnvironment.GetEngine("vbx"); - _localJSProvider = _localEnvironment.GetEngine("managedjscript"); - _localPythonProvider = _localEnvironment.GetEngine("python"); + _vb = _runtime.GetEngine("vbx"); + _js = _runtime.GetEngine("managedjscript"); + _python = _runtime.GetEngine("python"); // TODO: Enable this once we support Ruby // _localRubyProvider = _localEnvironment.GetScriptEngine("ruby"); - _localRubyProvider = null; + _ruby = null; _localScriptInteractiveWindow = _scriptInteractiveWindowFactory.CreateScriptInteractiveWindow(); IFeatureSet featureSet = _interactionScopeManager.GetFeatureSet(_localScriptInteractiveWindow.AvalonTextViewHost.TextView); @@ -110,7 +110,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieVBEngineCreation() { - ScriptEngine ScriptEngine = _localEnvironment.GetEngine("vbx"); + ScriptEngine ScriptEngine = _runtime.GetEngine("vbx"); _localScriptInteractiveWindow.Initialize(ScriptEngine); Assert.AreEqual("Nessie GUI running on:" + Environment.NewLine + ScriptEngine.LanguageVersion.ToString() + Environment.NewLine + ">>> ", _localScriptInteractiveWindow.ConsoleBuffer.TextBuffer.GetText()); } @@ -118,7 +118,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieJSEngineCreation() { - ScriptEngine ScriptEngine = _localEnvironment.GetEngine("managedjscript"); + ScriptEngine ScriptEngine = _runtime.GetEngine("managedjscript"); _localScriptInteractiveWindow.Initialize(ScriptEngine); Assert.AreEqual("Nessie GUI running on:" + Environment.NewLine + ScriptEngine.LanguageVersion.ToString() + Environment.NewLine + ">>> ", _localScriptInteractiveWindow.ConsoleBuffer.TextBuffer.GetText()); } @@ -126,7 +126,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessiePythonEngineCreation() { - ScriptEngine ScriptEngine = _localEnvironment.GetEngine("python"); + ScriptEngine ScriptEngine = _runtime.GetEngine("python"); _localScriptInteractiveWindow.Initialize(ScriptEngine); Assert.AreEqual("Nessie GUI running on:" + Environment.NewLine + ScriptEngine.LanguageVersion.ToString() + Environment.NewLine + ">>> ", _localScriptInteractiveWindow.ConsoleBuffer.TextBuffer.GetText()); } @@ -135,7 +135,7 @@ [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] [Ignore] // Enable this test once Ruby comes online public void NessieRubyEngineCreation() { - ScriptEngine ScriptEngine = _localEnvironment.GetEngine("ruby"); + ScriptEngine ScriptEngine = _runtime.GetEngine("ruby"); _localScriptInteractiveWindow.Initialize(ScriptEngine); Assert.AreEqual("Nessie GUI running on:" + Environment.NewLine + ScriptEngine.LanguageVersion.ToString() + Environment.NewLine + ">>> ", _localScriptInteractiveWindow.ConsoleBuffer.TextBuffer.GetText()); } @@ -145,7 +145,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessiePythonFunctionCall() { - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); _localScriptInteractiveWindow.ExecuteScriptCommand(_pythonFunction); _localScriptInteractiveWindow.ExecuteScriptCommand("fact(5)"); @@ -156,7 +156,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieJSFunctionCall() { - _localScriptInteractiveWindow.Initialize(_localJSProvider); + _localScriptInteractiveWindow.Initialize(_js); _localScriptInteractiveWindow.ExecuteScriptCommand(_jsFunction); _localScriptInteractiveWindow.ExecuteScriptCommand("fact(5);"); @@ -167,7 +167,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieVBFunctionCall() { - _localScriptInteractiveWindow.Initialize(_localVBProvider); + _localScriptInteractiveWindow.Initialize(_vb); _localScriptInteractiveWindow.ExecuteScriptCommand(_vbFunction); _localScriptInteractiveWindow.ExecuteScriptCommand("?fact(5)"); @@ -179,7 +179,7 @@ [Ignore] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieRubyFunctionCall() { - _localScriptInteractiveWindow.Initialize(_localRubyProvider); + _localScriptInteractiveWindow.Initialize(_ruby); _localScriptInteractiveWindow.ExecuteScriptCommand(_rubyFunction); _localScriptInteractiveWindow.ExecuteScriptCommand("fact(5)"); @@ -194,7 +194,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieVBEval() { - _localScriptInteractiveWindow.Initialize(_localVBProvider); + _localScriptInteractiveWindow.Initialize(_vb); string function = "? \"2\" + 2"; @@ -209,13 +209,12 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessiePythonRunModule() { - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); - ScriptEngine engine = _localPythonProvider; - ScriptScope scope = _localEnvironment.ExecuteSourceUnit( - engine.CreateScriptSourceFromString(_pythonFunction, "PythonTest.py", SourceCodeKind.File)); + ScriptScope scope = _runtime.CreateScope(); + _python.CreateScriptSourceFromString(_pythonFunction, "PythonTest.py", SourceCodeKind.File).Execute(scope); - _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(engine, scope, "PythonTest")); + _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(_python, scope, "PythonTest")); _localScriptInteractiveWindow.ExecuteScriptCommand("fact(5)"); @@ -232,14 +231,12 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieJSRunModule() { - _localScriptInteractiveWindow.Initialize(_localJSProvider); + _localScriptInteractiveWindow.Initialize(_js); - - ScriptEngine engine = _localJSProvider; - ScriptScope module = _localEnvironment.ExecuteSourceUnit( - engine.CreateScriptSourceFromString(_jsFunction, "JSTest.jsx", SourceCodeKind.File)); + ScriptScope scope = _runtime.CreateScope(); + _js.CreateScriptSourceFromString(_jsFunction, "JSTest.jsx", SourceCodeKind.File).Execute(scope); - _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(engine, module, "JSTest")); + _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(_python, scope, "JSTest")); _localScriptInteractiveWindow.ExecuteScriptCommand("fact(5)"); @@ -249,13 +246,12 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieVBRunModule() { - _localScriptInteractiveWindow.Initialize(_localVBProvider); + _localScriptInteractiveWindow.Initialize(_vb); - ScriptEngine engine = _localVBProvider; - ScriptScope module = _localEnvironment.ExecuteSourceUnit( - engine.CreateScriptSourceFromString(_vbFunction, "VBTest.vbx", SourceCodeKind.File)); + ScriptScope scope = _runtime.CreateScope(); + _vb.CreateScriptSourceFromString(_vbFunction, "VBTest.py", SourceCodeKind.File).Execute(scope); - _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(engine, module, "VBTest")); + _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(_python, scope, "VBTest")); _localScriptInteractiveWindow.ExecuteScriptCommand("?fact(5)"); @@ -266,12 +262,12 @@ [Ignore] // VB can't execute files or define functions [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieRubyRunModule() { - _localScriptInteractiveWindow.Initialize(_localRubyProvider); + _localScriptInteractiveWindow.Initialize(_ruby); - ScriptEngine engine = _localRubyProvider; - ScriptScope module = _localEnvironment.ExecuteSourceUnit(engine.CreateScriptSourceFromString("c:\\RubyTest.rb", _rubyFunction, SourceCodeKind.File)); + ScriptScope scope = _runtime.CreateScope(); + _ruby.CreateScriptSourceFromString(_rubyFunction, "RubyTest.py", SourceCodeKind.File).Execute(scope); - _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(engine, module, "RubyTest")); + _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(_python, scope, "RubyTest")); _localScriptInteractiveWindow.ExecuteScriptCommand("fact(5)"); @@ -283,12 +279,12 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieExecutePythonInitFile() { - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); File.WriteAllText(Environment.CurrentDirectory + "\\Test.py", _pythonFunction + Environment.NewLine + Environment.NewLine + "print fact(5)"); - ScriptEngine engine = _localPythonProvider; - ScriptScope containerModule = _localEnvironment.CreateScope(); + ScriptEngine engine = _python; + ScriptScope containerModule = _runtime.CreateScope(); engine.CreateScriptSourceFromFile(Environment.CurrentDirectory + "\\Test.py").Execute(containerModule); @@ -300,13 +296,13 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieExecuteJSInitFile() { - _localScriptInteractiveWindow.Initialize(_localJSProvider); + _localScriptInteractiveWindow.Initialize(_js); File.WriteAllText(Environment.CurrentDirectory + "\\Test.jsx", _jsFunction + Environment.NewLine + Environment.NewLine + "print(fact(5))"); // Use Python here because that is what we use in initialization to create the container module - ScriptEngine engine = _localJSProvider; - ScriptScope containerModule = _localEnvironment.CreateScope(); + ScriptEngine engine = _js; + ScriptScope containerModule = _runtime.CreateScope(); engine.CreateScriptSourceFromFile(Environment.CurrentDirectory + "\\Test.jsx").Execute(containerModule); @@ -318,13 +314,13 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieExecuteVBInitFile() { - _localScriptInteractiveWindow.Initialize(_localVBProvider); + _localScriptInteractiveWindow.Initialize(_vb); File.WriteAllText(Environment.CurrentDirectory + "\\Test.vbx", _vbFunction + Environment.NewLine + Environment.NewLine + "System.Console.WriteLine(fact(5))"); // Use Python here because that is what we use in initialization to create the container module - ScriptEngine engine = _localVBProvider; - ScriptScope containerModule = _localEnvironment.CreateScope(); + ScriptEngine engine = _vb; + ScriptScope containerModule = _runtime.CreateScope(); engine.CreateScriptSourceFromFile(Environment.CurrentDirectory + "\\Test.vbx").Execute(containerModule); @@ -339,13 +335,13 @@ [Ignore] // Enable when Ruby can execute modules [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieExecuteRubyInitFile() { - _localScriptInteractiveWindow.Initialize(_localRubyProvider); + _localScriptInteractiveWindow.Initialize(_ruby); File.WriteAllText(Environment.CurrentDirectory + "\\Test.rb", _rubyFunction + Environment.NewLine + Environment.NewLine + " puts fact(5)"); // Use Python here because that is what we use in initialization to create the container module - ScriptEngine engine = _localPythonProvider; - ScriptScope containerModule = _localEnvironment.CreateScope(); + ScriptEngine engine = _python; + ScriptScope containerModule = _runtime.CreateScope(); engine.CreateScriptSourceFromFile(Environment.CurrentDirectory + "\\Test.rb").Execute(containerModule); @@ -361,13 +357,13 @@ public void NessiePythonReloadModule() { File.WriteAllText(Environment.CurrentDirectory + "\\PythonTest.py", _pythonFunction + Environment.NewLine + "testNum = 5;"); - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); - ScriptEngine engine = _localPythonProvider; - ScriptSource scriptSource = engine.CreateScriptSourceFromString(_pythonFunction + Environment.NewLine + "testNum = 5", Environment.CurrentDirectory + "\\PythonTest.py", SourceCodeKind.File); - ScriptScope scope = _localEnvironment.ExecuteSourceUnit(scriptSource); + ScriptScope scope = _runtime.CreateScope(); + ScriptSource scriptSource = _python.CreateScriptSourceFromString(_pythonFunction + Environment.NewLine + "testNum = 5", Environment.CurrentDirectory + "\\PythonTest.py", SourceCodeKind.File); + scriptSource.Execute(scope); - _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(engine, scope, "PythonTest")); + _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(_python, scope, "PythonTest")); _localScriptInteractiveWindow.ExecuteScriptCommand("testNum = 7"); @@ -389,13 +385,13 @@ public void NessieJSReloadModule() { File.WriteAllText(Environment.CurrentDirectory + "\\JSTest.jsx", _jsFunction + Environment.NewLine + "testNum = 5;"); - _localScriptInteractiveWindow.Initialize(_localJSProvider); + _localScriptInteractiveWindow.Initialize(_js); - ScriptEngine engine = _localJSProvider; - ScriptSource sourceCode = engine.CreateScriptSourceFromString(_jsFunction + Environment.NewLine + "testNum = 5", Environment.CurrentDirectory + "\\JSTest.jsx", SourceCodeKind.File); - ScriptScope scope = _localEnvironment.ExecuteSourceUnit(sourceCode); + ScriptScope scope = _runtime.CreateScope(); + ScriptSource sourceCode = _js.CreateScriptSourceFromString(_jsFunction + Environment.NewLine + "testNum = 5", Environment.CurrentDirectory + "\\JSTest.jsx", SourceCodeKind.File); + sourceCode.Execute(scope); - _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(engine, scope, "JSTest")); + _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(_js, scope, "JSTest")); _localScriptInteractiveWindow.ExecuteScriptCommand("testNum = 7"); @@ -417,13 +413,13 @@ public void NessieVBReloadModule() { File.WriteAllText(Environment.CurrentDirectory + "\\VBTest.vbx", _vbFunction + Environment.NewLine + "testNum = 5"); - _localScriptInteractiveWindow.Initialize(_localVBProvider); + _localScriptInteractiveWindow.Initialize(_vb); - ScriptEngine engine = _localVBProvider; - ScriptSource sourceCode = engine.CreateScriptSourceFromString(_vbFunction + Environment.NewLine + "testNum = 5", Environment.CurrentDirectory + "\\VBTest.vbx", SourceCodeKind.File); - ScriptScope scope = _localEnvironment.ExecuteSourceUnit(sourceCode); + ScriptScope scope = _runtime.CreateScope(); + ScriptSource sourceCode = _vb.CreateScriptSourceFromString(_vbFunction + Environment.NewLine + "testNum = 5", Environment.CurrentDirectory + "\\VBTest.vbx", SourceCodeKind.File); + sourceCode.Execute(scope); - _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(engine, scope, "VBTest")); + _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(_vb, scope, "VBTest")); _localScriptInteractiveWindow.ExecuteScriptCommand("testNum = 7"); @@ -444,13 +440,13 @@ public void NessieRubyReloadModule() { File.WriteAllText(Environment.CurrentDirectory + "\\RubyTest.rb", _rubyFunction + Environment.NewLine + "testNum = 5;"); - _localScriptInteractiveWindow.Initialize(_localRubyProvider); + _localScriptInteractiveWindow.Initialize(_ruby); - ScriptEngine engine = _localRubyProvider; - ScriptSource sourceCode = engine.CreateScriptSourceFromString(_rubyFunction + Environment.NewLine + "testNum = 5", Environment.CurrentDirectory + "\\RubyTest.rb", SourceCodeKind.File); - ScriptScope scope = _localEnvironment.ExecuteSourceUnit(sourceCode); + ScriptScope scope = _runtime.CreateScope(); + ScriptSource sourceCode = _ruby.CreateScriptSourceFromString(_rubyFunction + Environment.NewLine + "testNum = 5", Environment.CurrentDirectory + "\\RubyTest.rb", SourceCodeKind.File); + sourceCode.Execute(scope); - _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(engine, scope, "RubyTest")); + _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(_ruby, scope, "RubyTest")); _localScriptInteractiveWindow.ExecuteScriptCommand("testNum = 7"); @@ -472,19 +468,19 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void GetPythonScanner() { - CheckKeyword(_localPythonProvider, "print"); + CheckKeyword(_python, "print"); } [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void GetJSScanner() { - CheckKeyword(_localJSProvider, "function"); + CheckKeyword(_js, "function"); } [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void GetVBScanner() { - CheckKeyword(_localVBProvider, "Return "); + CheckKeyword(_vb, "Return "); } private void CheckKeyword(ScriptEngine provider, string code) { @@ -507,7 +503,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void EnteringNewLineInMiddleOfPreviousOutputDoesntCommit() { // Bug 183466 - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); TextBuffer buffer = _localScriptInteractiveWindow.ConsoleBuffer.TextBuffer; string command = "if (True):" + Environment.NewLine + " print \"success\"" + Environment.NewLine; @@ -539,33 +535,33 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void ModuleResetBanner() { // Bug 183602 - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); - ScriptRuntime env = _localEnvironment; - ScriptEngine pyEngine = _localPythonProvider; - ScriptEngine jsEngine = _localJSProvider; - ScriptEngine vbEngine = _localVBProvider; + ScriptRuntime env = _runtime; + ScriptEngine pyEngine = _python; + ScriptEngine jsEngine = _js; + ScriptEngine vbEngine = _vb; ScriptScope pythonModule = env.CreateScope(); ScriptScope jsModule = env.CreateScope(); ScriptScope vbModule = env.CreateScope(); _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(pyEngine, pythonModule, "PythonModule")); - VerifyLastOutput("***** Reset - Module: PythonModule - Language: " + _localPythonProvider.LanguageDisplayName + " *****", _localScriptInteractiveWindow); + VerifyLastOutput("***** Reset - Module: PythonModule - Language: " + _python.LanguageDisplayName + " *****", _localScriptInteractiveWindow); _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(jsEngine, jsModule, "JavaScriptScope")); - VerifyLastOutput("***** Reset - Module: JavaScriptScope - Language: " + _localJSProvider.LanguageDisplayName + " *****", _localScriptInteractiveWindow); + VerifyLastOutput("***** Reset - Module: JavaScriptScope - Language: " + _js.LanguageDisplayName + " *****", _localScriptInteractiveWindow); _localScriptInteractiveWindow.SwitchScope(new BufferLanguageInfo(vbEngine, vbModule, "VisualBasicModule")); - VerifyLastOutput("***** Reset - Module: VisualBasicModule - Language: " + _localVBProvider.LanguageDisplayName + " *****", _localScriptInteractiveWindow); + VerifyLastOutput("***** Reset - Module: VisualBasicModule - Language: " + _vb.LanguageDisplayName + " *****", _localScriptInteractiveWindow); } [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void DeleteNewLineAndEnterNewLine() { // Bug 183606 - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); TextBuffer buffer = _localScriptInteractiveWindow.ConsoleBuffer.TextBuffer; buffer.Insert(buffer.Length, "def fact(x):"); @@ -579,7 +575,7 @@ [TestMethod] [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] public void NessieGetPreviousCommand() { // Bug 183645 - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); TextBuffer buffer = _localScriptInteractiveWindow.ConsoleBuffer.TextBuffer; @@ -610,7 +606,7 @@ [DeploymentItem(@"..\..\Tools\Nessie\Tests\TestFiles")] [Description("Simulates what the colorizer would do to check for bound names rather than actually using the colorizer")] public void NessieBoundNameCheck() { - _localScriptInteractiveWindow.Initialize(_localPythonProvider); + _localScriptInteractiveWindow.Initialize(_python); // Add the function _localScriptInteractiveWindow.ExecuteScriptCommand(_pythonFunction); @@ -639,9 +635,9 @@ File.WriteAllText(full_path_a, "import NessieTest"); File.WriteAllText(full_path_test, ""); - ScriptEngine engine = _localPythonProvider; - ScriptSource sourceCode = engine.CreateScriptSourceFromFile(full_path_a); - ScriptScope scope = _localEnvironment.ExecuteSourceUnit(sourceCode); + ScriptScope scope = _runtime.CreateScope(); + ScriptSource sourceCode = _python.CreateScriptSourceFromFile(full_path_a); + sourceCode.Execute(scope); // TODO: #if TODO IDictionary modules = _localEnvironment.GetPublishedModules(); =================================================================== edit: $/Dev10/feature/vs_langs01/Merlin/Main/VSIntegration/LanguageService/Common/VsScanner.cs;C413883 File: VsScanner.cs =================================================================== --- $/Dev10/feature/vs_langs01/Merlin/Main/VSIntegration/LanguageService/Common/VsScanner.cs;C413883 (server) 4/30/2008 9:20 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/Merlin/Main/VSIntegration/LanguageService/Common/VsScanner.cs;HostingSeparation1 @@ -17,13 +17,17 @@ using System.Collections.Generic; using System.Diagnostics; -using MSH = Microsoft.Scripting.Hosting; - using Microsoft.VisualStudio.Package; using Microsoft.Scripting.Utils; using System.IO; using System.Threading; +using MSH = Microsoft.Scripting.Hosting; +using DlrTokenInfo = Microsoft.Scripting.TokenInfo; +using DlrTokenTriggers = Microsoft.Scripting.TokenTriggers; +using VsTokenInfo = Microsoft.VisualStudio.Package.TokenInfo; +using VsTokenTriggers = Microsoft.VisualStudio.Package.TokenTriggers; + namespace Microsoft.Scripting.VSLanguageService.Common { public class VsScanner : IScanner, IDisposable { private MSH.TokenCategorizer _tokenizer; @@ -68,92 +72,92 @@ GC.SuppressFinalize(this); } - public static TokenTriggers GetTokenTrigger(MSH.TokenTriggers trigger) { + public static VsTokenTriggers GetTokenTrigger(DlrTokenTriggers trigger) { return - ((trigger & MSH.TokenTriggers.MemberSelect) != 0 ? TokenTriggers.MemberSelect : 0) | - ((trigger & MSH.TokenTriggers.MatchBraces) != 0 ? TokenTriggers.MatchBraces : 0) | - ((trigger & MSH.TokenTriggers.ParameterStart) != 0 ? TokenTriggers.ParameterStart : 0) | - ((trigger & MSH.TokenTriggers.ParameterNext) != 0 ? TokenTriggers.ParameterNext : 0) | - ((trigger & MSH.TokenTriggers.ParameterEnd) != 0 ? TokenTriggers.ParameterEnd : 0) | - ((trigger & MSH.TokenTriggers.Parameter) != 0 ? TokenTriggers.Parameter : 0) | - ((trigger & MSH.TokenTriggers.MethodTip) != 0 ? TokenTriggers.MethodTip : 0); + ((trigger & DlrTokenTriggers.MemberSelect) != 0 ? VsTokenTriggers.MemberSelect : 0) | + ((trigger & DlrTokenTriggers.MatchBraces) != 0 ? VsTokenTriggers.MatchBraces : 0) | + ((trigger & DlrTokenTriggers.ParameterStart) != 0 ? VsTokenTriggers.ParameterStart : 0) | + ((trigger & DlrTokenTriggers.ParameterNext) != 0 ? VsTokenTriggers.ParameterNext : 0) | + ((trigger & DlrTokenTriggers.ParameterEnd) != 0 ? VsTokenTriggers.ParameterEnd : 0) | + ((trigger & DlrTokenTriggers.Parameter) != 0 ? VsTokenTriggers.Parameter : 0) | + ((trigger & DlrTokenTriggers.MethodTip) != 0 ? VsTokenTriggers.MethodTip : 0); } - public static TokenColor GetTokenColor(MSH.TokenCategory category) { + public static TokenColor GetTokenColor(TokenCategory category) { switch (category) { - case MSH.TokenCategory.DocComment: - case MSH.TokenCategory.Comment: - case MSH.TokenCategory.LineComment: + case TokenCategory.DocComment: + case TokenCategory.Comment: + case TokenCategory.LineComment: return TokenColor.Comment; - case MSH.TokenCategory.NumericLiteral: + case TokenCategory.NumericLiteral: return TokenColor.Number; - case MSH.TokenCategory.CharacterLiteral: - case MSH.TokenCategory.StringLiteral: + case TokenCategory.CharacterLiteral: + case TokenCategory.StringLiteral: return TokenColor.String; - case MSH.TokenCategory.Keyword: - case MSH.TokenCategory.Directive: + case TokenCategory.Keyword: + case TokenCategory.Directive: return TokenColor.Keyword; - case MSH.TokenCategory.Identifier: + case TokenCategory.Identifier: return TokenColor.Identifier; - case MSH.TokenCategory.None: - case MSH.TokenCategory.EndOfStream: - case MSH.TokenCategory.Error: - case MSH.TokenCategory.RegularExpressionLiteral: - case MSH.TokenCategory.Operator: - case MSH.TokenCategory.Delimiter: - case MSH.TokenCategory.Grouping: - case MSH.TokenCategory.LanguageDefined: - case MSH.TokenCategory.WhiteSpace: + case TokenCategory.None: + case TokenCategory.EndOfStream: + case TokenCategory.Error: + case TokenCategory.RegularExpressionLiteral: + case TokenCategory.Operator: + case TokenCategory.Delimiter: + case TokenCategory.Grouping: + case TokenCategory.LanguageDefined: + case TokenCategory.WhiteSpace: default: return TokenColor.Text; } } - public static TokenType GetTokenType(MSH.TokenCategory category) { + public static TokenType GetTokenType(TokenCategory category) { switch (category) { - case MSH.TokenCategory.None: - case MSH.TokenCategory.EndOfStream: - case MSH.TokenCategory.Error: + case TokenCategory.None: + case TokenCategory.EndOfStream: + case TokenCategory.Error: return TokenType.Text; - case MSH.TokenCategory.WhiteSpace: + case TokenCategory.WhiteSpace: return TokenType.WhiteSpace; - case MSH.TokenCategory.DocComment: - case MSH.TokenCategory.Comment: + case TokenCategory.DocComment: + case TokenCategory.Comment: return TokenType.Comment; - case MSH.TokenCategory.LineComment: + case TokenCategory.LineComment: return TokenType.LineComment; - case MSH.TokenCategory.NumericLiteral: - case MSH.TokenCategory.RegularExpressionLiteral: + case TokenCategory.NumericLiteral: + case TokenCategory.RegularExpressionLiteral: return TokenType.Literal; - case MSH.TokenCategory.CharacterLiteral: - case MSH.TokenCategory.StringLiteral: + case TokenCategory.CharacterLiteral: + case TokenCategory.StringLiteral: return TokenType.String; - case MSH.TokenCategory.Keyword: - case MSH.TokenCategory.Directive: + case TokenCategory.Keyword: + case TokenCategory.Directive: return TokenType.Keyword; - case MSH.TokenCategory.Operator: + case TokenCategory.Operator: return TokenType.Operator; - case MSH.TokenCategory.Delimiter: - case MSH.TokenCategory.Grouping: + case TokenCategory.Delimiter: + case TokenCategory.Grouping: return TokenType.Delimiter; - case MSH.TokenCategory.Identifier: + case TokenCategory.Identifier: return TokenType.Identifier; - case MSH.TokenCategory.LanguageDefined: + case TokenCategory.LanguageDefined: default: return TokenType.Unknown; } @@ -161,7 +165,7 @@ #region IScanner Members - public bool ScanTokenAndProvideInfoAboutIt(TokenInfo/*!*/ vsToken, ref int state) { + public bool ScanTokenAndProvideInfoAboutIt(VsTokenInfo/*!*/ vsToken, ref int state) { Assert.NotNull(vsToken); if (_tokenizer == null) { @@ -172,8 +176,8 @@ return false; } - MSH.TokenInfo token = _tokenizer.ReadToken(); - _eofReached = (token.Category == MSH.TokenCategory.EndOfStream); + DlrTokenInfo token = _tokenizer.ReadToken(); + _eofReached = (token.Category == TokenCategory.EndOfStream); if (_eofReached) { return false; } =================================================================== rename, edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/LanguageBoundTextContentProvider.cs;C412993 File: LanguageBoundTextContentProvider.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/LanguageBoundTextContentProvider.cs;C412993 (server) 4/30/2008 8:22 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/LanguageBoundTextContentProvider.cs;HostingSeparation1 @@ -18,17 +18,17 @@ using Microsoft.Scripting.Runtime; -namespace Microsoft.Scripting.Hosting { +namespace Microsoft.Scripting { /// /// Internal class which binds a LanguageContext, StreamContentProvider, and Encoding together to produce /// a TextContentProvider which reads binary data with the correct language semantics. /// - internal sealed class EngineTextContentProvider : TextContentProvider { + internal sealed class LanguageBoundTextContentProvider : TextContentProvider { private readonly LanguageContext _context; private readonly StreamContentProvider _stream; private readonly Encoding _encoding; - public EngineTextContentProvider(LanguageContext context, StreamContentProvider stream, Encoding encoding) { + public LanguageBoundTextContentProvider(LanguageContext context, StreamContentProvider stream, Encoding encoding) { _context = context; _stream = stream; _encoding = encoding; =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Microsoft.Scripting.Core.csproj;C423375 File: Microsoft.Scripting.Core.csproj =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Microsoft.Scripting.Core.csproj;C423375 (server) 4/17/2008 6:41 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Microsoft.Scripting.Core.csproj;HostingSeparation1 @@ -237,6 +237,7 @@ + @@ -251,6 +252,7 @@ + @@ -357,7 +359,6 @@ - @@ -425,11 +426,7 @@ - - - - @@ -471,6 +468,9 @@ + + + =================================================================== rename, edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenCategory.cs;C403416 File: TokenCategory.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenCategory.cs;C403416 (server) 4/17/2008 6:48 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenCategory.cs;HostingSeparation1 @@ -15,7 +15,7 @@ // http://merd.sourceforge.net/pixel/language-study/syntax-across-languages/ -namespace Microsoft.Scripting.Hosting { +namespace Microsoft.Scripting { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1027:MarkEnumsWithFlags")] public enum TokenCategory { =================================================================== rename, edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenInfo.cs;C412993 File: TokenInfo.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenInfo.cs;C412993 (server) 4/17/2008 6:47 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenInfo.cs;HostingSeparation1 @@ -16,9 +16,10 @@ using System; using Microsoft.Contracts; -namespace Microsoft.Scripting.Hosting { +namespace Microsoft.Scripting { - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes"), Serializable] // TODO: fix + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes")] // TODO: fix + [Serializable] public struct TokenInfo : IEquatable { private TokenCategory _category; private TokenTriggers _trigger; =================================================================== rename, edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenTriggers.cs;C403416 File: TokenTriggers.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenTriggers.cs;C403416 (server) 4/17/2008 6:48 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/TokenTriggers.cs;HostingSeparation1 @@ -15,7 +15,7 @@ using System; -namespace Microsoft.Scripting.Hosting { +namespace Microsoft.Scripting { /// /// See also Microsoft.VisualStudio.Package.TokenTriggers. =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Compilers/SourceUnit.cs;C418157 File: SourceUnit.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Compilers/SourceUnit.cs;C418157 (server) 4/28/2008 11:07 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Compilers/SourceUnit.cs;HostingSeparation1 @@ -23,6 +23,7 @@ using Microsoft.Scripting.Utils; namespace Microsoft.Scripting { + [DebuggerDisplay("{_path ?? \"\"}")] public sealed class SourceUnit { private readonly SourceCodeKind _kind; private readonly string _path; @@ -137,11 +138,6 @@ } } - [Confined] - public override string/*!*/ ToString() { - return _path ?? String.Empty; - } - #region Line/File mapping public SourceSpan MapLine(SourceSpan span) { @@ -263,16 +259,14 @@ /// Executes in an optimized scope. /// public object Execute() { - ScriptCode compiledCode = Compile(); - return compiledCode.Run(compiledCode.MakeOptimizedScope()); + return Compile().Run(); } /// /// Executes in an optimized scope. /// public object Execute(CompilerOptions/*!*/ options, ErrorSink/*!*/ errorSink) { - ScriptCode compiledCode = Compile(options, errorSink); - return compiledCode.Run(compiledCode.MakeOptimizedScope()); + return Compile(options, errorSink).Run(); } public int ExecuteProgram() { =================================================================== branch, edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Compilers/TokenizerService.cs File: TokenizerService.cs =================================================================== --- TokenCategorizer.cs (server) 4/17/2008 6:38 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Compilers/TokenizerService.cs;HostingSeparation1 @@ -16,15 +16,11 @@ using System; using System.Collections.Generic; -namespace Microsoft.Scripting.Hosting { - public abstract class TokenCategorizer -#if !SILVERLIGHT - : MarshalByRefObject -#endif - { +namespace Microsoft.Scripting { + public abstract class TokenizerService { // static contract: - protected TokenCategorizer() { + protected TokenizerService() { } public abstract void Initialize(object state, SourceUnitReader sourceReader, SourceLocation initialLocation); @@ -68,7 +64,7 @@ /// /// The mininum number of characters to process while getting tokens. /// A enumeration of tokens. - public virtual IEnumerable ReadTokens(int countOfChars) { + public virtual IEnumerable/*!*/ ReadTokens(int countOfChars) { List tokens = new List(); int start_index = CurrentPosition.Index; =================================================================== delete: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/CodeSenseProvider.cs;C413883 File: CodeSenseProvider.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/CodeSenseProvider.cs;C413883 (server) 4/30/2008 8:51 PM +++ [no target file] @@ -1,41 +1,0 @@ -/* **************************************************************************** - * - * Copyright (c) Microsoft Corporation. - * - * This source code is subject to terms and conditions of the Microsoft Public License. A - * copy of the license can be found in the License.html file at the root of this distribution. If - * you cannot locate the Microsoft Public License, please send an email to - * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound - * by the terms of the Microsoft Public License. - * - * You must not remove this notice, or any other, from this software. - * - * - * ***************************************************************************/ - -using System; -using Microsoft.Scripting.Utils; - -namespace Microsoft.Scripting.Hosting { - public abstract class CodeSenseProvider -#if !SILVERLIGHT - : MarshalByRefObject -#endif - { - private readonly ScriptEngine _engine; - private readonly ScriptScope _module; - - protected ScriptEngine Engine { get { return _engine; } } - protected ScriptScope Module { get { return _module; } } - - protected CodeSenseProvider(ScriptEngine engine, ScriptScope module) { - ContractUtils.RequiresNotNull(engine, "engine"); - _engine = engine; - _module = module; - } - - public abstract string GetFunctionSignature(string name); - public abstract string[] GetMemberNames(string name); - public abstract string GetFunctionDoc(string name); - } -} =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/CompiledCode.cs;C413883 File: CompiledCode.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/CompiledCode.cs;C413883 (server) 4/17/2008 6:18 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/CompiledCode.cs;HostingSeparation1 @@ -18,6 +18,7 @@ using System.Security.Permissions; using Microsoft.Scripting.Utils; +using Microsoft.Scripting.Runtime; namespace Microsoft.Scripting.Hosting { @@ -32,6 +33,8 @@ private readonly ScriptEngine/*!*/ _engine; private readonly ScriptCode/*!*/ _code; + internal ScriptCode/*!*/ ScriptCode { get { return _code; } } + internal CompiledCode(ScriptEngine/*!*/ engine, ScriptCode/*!*/ code) { Assert.NotNull(engine); Assert.NotNull(code); @@ -40,30 +43,31 @@ _code = code; } - public ScriptScope/*!*/ MakeOptimizedScope() { - return new ScriptScope(_engine, _code.MakeOptimizedScope()); + /// + /// Engine that compiled this code. + /// + public ScriptEngine/*!*/ Engine { + get { return _engine; } } /// - /// Execute code within a given module context. - /// The module must be local with respect to the compiled code object. + /// TODO: Executes code in an optimized scope. /// - public void Execute(ScriptScope/*!*/ scope) { - Evaluate(scope); + public object Execute() { + return _code.Run(); } /// - /// Execute code within a given module context and returns the result. - /// The module must be local with respect to the compiled code object. + /// Execute code within a given scope and returns the result. /// - public object Evaluate(ScriptScope/*!*/ scope) { + public object Execute(ScriptScope/*!*/ scope) { ContractUtils.RequiresNotNull(scope, "scope"); return _code.Run(scope.Scope); } #if !SILVERLIGHT - public ObjectHandle EvaluateAndWrap(ScriptScope module) { - return new ObjectHandle(Evaluate(module)); + public ObjectHandle/*!*/ ExecuteAndWrap(ScriptScope/*!*/ scope) { + return new ObjectHandle(Execute(scope)); } // TODO: Figure out what is the right lifetime =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/HostingHelpers.cs;C415429 File: HostingHelpers.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/HostingHelpers.cs;C415429 (server) 4/14/2008 11:59 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/HostingHelpers.cs;HostingSeparation1 @@ -32,7 +32,7 @@ public static class HostingHelpers { public static ScriptDomainManager/*!*/ GetDomainManager(ScriptRuntime/*!*/ runtime) { ContractUtils.RequiresNotNull(runtime, "runtime"); - return runtime.DomainManager; + return runtime.Manager; } public static LanguageContext/*!*/ GetLanguageContext(ScriptEngine/*!*/ engine) { @@ -40,6 +40,21 @@ return engine.LanguageContext; } + public static SourceUnit/*!*/ GetSourceUnit(ScriptSource/*!*/ scriptSource) { + ContractUtils.RequiresNotNull(scriptSource, "scriptSource"); + return scriptSource.SourceUnit; + } + + public static ScriptCode/*!*/ GetScriptCode(CompiledCode/*!*/ compiledCode) { + ContractUtils.RequiresNotNull(compiledCode, "compiledCode"); + return compiledCode.ScriptCode; + } + + public static SharedIO/*!*/ GetSharedIO(ScriptIO/*!*/ io) { + ContractUtils.RequiresNotNull(io, "io"); + return io.SharedIO; + } + public static Scope/*!*/ GetScope(ScriptScope/*!*/ scriptScope) { ContractUtils.RequiresNotNull(scriptScope, "scriptScope"); return scriptScope.Scope; =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptEngine.cs;C418157 File: ScriptEngine.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptEngine.cs;C418157 (server) 4/17/2008 6:44 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptEngine.cs;HostingSeparation1 @@ -18,9 +18,9 @@ using System.Diagnostics; using System.Runtime.Remoting; using System.Security.Permissions; +using System.Threading; using System.Text; -using System.Threading; using Microsoft.Scripting.Runtime; using Microsoft.Scripting.Utils; @@ -342,7 +342,7 @@ ContractUtils.RequiresNotNull(encoding, "encoding"); ContractUtils.Requires(EnumBounds.IsValid(kind), "kind"); - return CreateScriptSource(new EngineTextContentProvider(_language, content, encoding), id, kind); + return CreateScriptSource(new LanguageBoundTextContentProvider(_language, content, encoding), id, kind); } /// @@ -567,7 +567,11 @@ /// to offer more functionality than the standard engine members discussed here. /// public TService GetService(params object[] args) where TService : class { - return _language.GetService(ArrayUtils.Insert((object)this, args)); + if (typeof(TService) == typeof(TokenCategorizer)) { + TokenizerService service = _language.GetService(ArrayUtils.Insert((object)_language, args)); + return (service != null) ? (TService)(object)new TokenCategorizer(service) : null; + } + return null; } #endregion =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptHost.cs;C413883 File: ScriptHost.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptHost.cs;C413883 (server) 4/14/2008 11:58 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptHost.cs;HostingSeparation1 @@ -117,7 +117,7 @@ string[] result = new string[list.Count]; for (int i = 0; i < list.Count; i++) { try { - result[i] = _runtime.Platform.GetFullPath(list[i]); + result[i] = _runtime.Manager.Platform.GetFullPath(list[i]); } catch (Exception e) { throw new InvalidImplementationException(String.Format("Invalid host implementation: {0}", e.Message), e); } =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptIO.cs;C413883 File: ScriptIO.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptIO.cs;C413883 (server) 4/17/2008 6:16 PM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptIO.cs;HostingSeparation1 @@ -45,6 +45,8 @@ public Encoding/*!*/ OutputEncoding { get { return _io.OutputEncoding; } } public Encoding/*!*/ ErrorEncoding { get { return _io.ErrorEncoding; } } + internal SharedIO/*!*/ SharedIO { get { return _io; } } + internal ScriptIO(SharedIO/*!*/ io) { Assert.NotNull(io); _io = io; =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptRuntime.cs;C418157 File: ScriptRuntime.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptRuntime.cs;C418157 (server) 4/14/2008 11:58 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptRuntime.cs;HostingSeparation1 @@ -39,6 +39,7 @@ private readonly ScriptIO/*!*/ _io; private readonly ScriptHost/*!*/ _host; private ScriptScope _globals; + private ScriptEngine _invariantEngine; internal ScriptDomainManager/*!*/ Manager { get { return _manager; } @@ -306,21 +307,21 @@ public ScriptScope/*!*/ CreateScope() { return InvariantEngine.CreateScope(); } + + public ScriptScope/*!*/ CreateScope(string/*!*/ languageId) { + return GetEngine(languageId).CreateScope(); + } public ScriptScope/*!*/ CreateScope(IAttributesCollection/*!*/ dictionary) { - ContractUtils.RequiresNotNull(dictionary, "dictionary"); return InvariantEngine.CreateScope(dictionary); } - public ScriptScope/*!*/ ExecuteSourceUnit(ScriptSource/*!*/ source) { - Scope scope = _manager.ExecuteSourceUnit(source.SourceUnit); - return new ScriptScope(source.Engine, scope); + public ScriptScope/*!*/ CreateScope(string/*!*/ languageId, IAttributesCollection/*!*/ dictionary) { + return GetEngine(languageId).CreateScope(dictionary); } #endregion - #region TODO: New API - // TODO: file IO exceptions, parse exceptions, execution exceptions, etc. /// /// path is empty, contains one or more of the invalid characters defined in GetInvalidPathChars or doesn't have an extension. @@ -367,27 +368,26 @@ /// it merges names together objects representing the namespaces. /// /// - public void LoadAssembly(Assembly assembly) { + public void LoadAssembly(Assembly/*!*/ assembly) { _manager.LoadAssembly(assembly); } - #endregion - - internal ScriptEngine/*!*/ InvariantEngine { + public ObjectOperations/*!*/ Operations { get { - return GetEngine(_manager.InvariantContext); + return InvariantEngine.Operations; } } - internal ScriptDomainManager/*!*/ DomainManager { - get { - return _manager; - } + public ObjectOperations/*!*/ CreateOperations() { + return InvariantEngine.CreateOperations(); } - - public PlatformAdaptationLayer/*!*/ Platform { + + internal ScriptEngine/*!*/ InvariantEngine { get { - return _manager.Platform; + if (_invariantEngine == null) { + _invariantEngine = GetEngine(_manager.InvariantContext); + } + return _invariantEngine; } } } =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptSource.cs;C413883 File: ScriptSource.cs =================================================================== --- $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptSource.cs;C413883 (server) 4/28/2008 11:06 AM +++ Shelved Change: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/ScriptSource.cs;HostingSeparation1 @@ -14,6 +14,7 @@ * ***************************************************************************/ using System; +using System.Diagnostics; using System.Runtime.Remoting; using System.Security.Permissions; @@ -24,6 +25,7 @@ /// /// Hosting counterpart for . /// + [DebuggerDisplay("{Path ?? \"\"}")] public sealed class ScriptSource #if !SILVERLIGHT : MarshalByRefObject @@ -71,11 +73,6 @@ _engine = engine; } - [Confined] - public override string/*!*/ ToString() { - return _unit.ToString(); - } - #region Compilation and Execution /// =================================================================== edit: $/Dev10/feature/vs_langs01/ndp/fx/src/Core/Microsoft/Scripting/Hosting/TokenCategorizer.cs;C412993 File: TokenCategorize