From c91a1df8d6d46ac73eac45a5cd3b19d9bc52d58c Mon Sep 17 00:00:00 2001 From: "Leino, Rustan" Date: Fri, 13 Dec 2019 17:51:22 -0800 Subject: [PATCH] Remove Util/VS2010, which is out-dated --- Util/VS2010/Boogie/BoogieLanguageService.sln | 20 - .../BoogieLanguageService.csproj | 179 -------- .../BoogieLanguageService/Configuration.cs | 24 -- .../GlobalSuppressions.cs | 11 - .../Boogie/BoogieLanguageService/Grammar.cs | 397 ------------------ .../Boogie/BoogieLanguageService/Guids.cs | 13 - .../Integration/AuthoringScope.cs | 66 --- .../Integration/Configuration.cs | 116 ----- .../Integration/Declaration.cs | 30 -- .../Integration/Declarations.cs | 56 --- .../Integration/IASTResolver.cs | 13 - .../Integration/IronyLanguageService.cs | 343 --------------- .../Integration/IronyViewFilter.cs | 42 -- .../Integration/LineScanner.cs | 58 --- .../Integration/Method.cs | 20 - .../Integration/Methods.cs | 50 --- .../Integration/Package.cs | 130 ------ .../Integration/Resolver.cs | 50 --- .../Integration/Source.cs | 41 -- .../IronyLanguageServicePackage.cs | 90 ---- .../Boogie/BoogieLanguageService/Key.snk | Bin 596 -> 0 bytes .../Properties/AssemblyInfo.cs | 36 -- .../Resources.Designer.cs | 63 --- .../BoogieLanguageService/Resources.resx | 130 ------ .../BoogieLanguageService/Resources/Irony.dll | Bin 236032 -> 0 bytes .../BoogieLanguageService/VSPackage.resx | 129 ------ .../source.extension.vsixmanifest | 27 -- 27 files changed, 2134 deletions(-) delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService.sln delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Guids.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Key.snk delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Properties/AssemblyInfo.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Resources.Designer.cs delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Resources.resx delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/Resources/Irony.dll delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/VSPackage.resx delete mode 100644 Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest diff --git a/Util/VS2010/Boogie/BoogieLanguageService.sln b/Util/VS2010/Boogie/BoogieLanguageService.sln deleted file mode 100644 index d54efb50d..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BoogieLanguageService", "BoogieLanguageService\BoogieLanguageService.csproj", "{66E611EE-84D8-4EB9-9A33-164A53E00553}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {66E611EE-84D8-4EB9-9A33-164A53E00553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {66E611EE-84D8-4EB9-9A33-164A53E00553}.Debug|Any CPU.Build.0 = Debug|Any CPU - {66E611EE-84D8-4EB9-9A33-164A53E00553}.Release|Any CPU.ActiveCfg = Release|Any CPU - {66E611EE-84D8-4EB9-9A33-164A53E00553}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj b/Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj deleted file mode 100644 index a7a0fd0c6..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/BoogieLanguageService.csproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - Library - Properties - Demo.BoogieLanguageService - BoogieLanguageService - True - Key.snk - v4.0 - {66E611EE-84D8-4EB9-9A33-164A53E00553} - - - 4.0 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - true - AllRules.ruleset - - - - False - Resources\Irony.dll - - - - False - C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Package.LanguageService.10.0.dll - - - C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.10.0.dll - - - False - C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.Immutable.10.0.dll - - - - False - True - C:\Program Files\Microsoft Visual Studio 2010 Beta2 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.Shell.Interop.10.0.dll - - - - - - False - ..\..\..\..\..\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\Assemblies\Microsoft.VisualStudio.TextManager.Interop.8.0.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - true - Designer - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Microsoft Visual Basic PowerPacks 10.0 - true - - - False - Windows Installer 3.1 - true - - - - - true - true - - - - - \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs b/Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs deleted file mode 100644 index 3a3fed647..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Configuration.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.VisualStudio.Package; -using Microsoft.VisualStudio.TextManager.Interop; - -namespace Demo -{ - public static partial class Configuration - { - public const string Name = "Boogie"; - public const string FormatList = "Boogie File (*.bpl)\n*.bpl"; - - static Configuration() - { - // default colors - currently, these need to be declared - CreateColor("Keyword", COLORINDEX.CI_BLUE, COLORINDEX.CI_USERTEXT_BK); - CreateColor("Comment", COLORINDEX.CI_DARKGREEN, COLORINDEX.CI_USERTEXT_BK); - CreateColor("Identifier", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK); - CreateColor("String", COLORINDEX.CI_MAROON, COLORINDEX.CI_USERTEXT_BK); - CreateColor("Number", COLORINDEX.CI_RED, COLORINDEX.CI_USERTEXT_BK); - CreateColor("Text", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK); - } - } -} diff --git a/Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs b/Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs deleted file mode 100644 index 746e3daee..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/GlobalSuppressions.cs +++ /dev/null @@ -1,11 +0,0 @@ -// This file is used by Code Analysis to maintain SuppressMessage -// attributes that are applied to this project. Project-level -// suppressions either have no target or are given a specific target -// and scoped to a namespace, type, member, etc. -// -// To add a suppression to this file, right-click the message in the -// Error List, point to "Suppress Message(s)", and click "In Project -// Suppression File". You do not need to add suppressions to this -// file manually. - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1017:MarkAssembliesWithComVisible")] diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs b/Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs deleted file mode 100644 index bedb0cfa8..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Grammar.cs +++ /dev/null @@ -1,397 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Irony.Parsing; - -namespace Demo -{ - [Language("Boogie", "1.0", "Microsoft Research Boogie, intermediate verification language")] - public class Grammar : Irony.Parsing.Grammar - { - public Grammar() { - #region 1. Terminals - NumberLiteral n = TerminalFactory.CreateCSharpNumber("number"); - StringLiteral stringLiteral = TerminalFactory.CreateCSharpString("String"); - - IdentifierTerminal ident = new IdentifierTerminal("Identifier"); - this.MarkReservedWords( - "assert", "assume", "axiom", - "bool", "break", - "bv0", "bv1", "bv2", "bv3", "bv4", "bv5", "bv6", "bv7", "bv8", "bv9", - "bv10", "bv11", "bv12", "bv13", "bv14", "bv15", "bv16", "bv17", "bv18", "bv19", - "bv20", "bv21", "bv22", "bv23", "bv24", "bv25", "bv26", "bv27", "bv28", "bv29", - "bv30", "bv31", "bv32", - "bv64", - "call", "complete", "const", - "div", - "else", "ensures", "exists", "extends", - "false", "forall", "free", "function", - "goto", - "havoc", - "if", "implementation", "int", "invariant", - "lambda", - "mod", "modifies", - "old", - "procedure", - "real", "requires", "return", "returns", - "then", "true", "type", - "unique", - "var", - "where", "while" - ); - - StringLiteral s = new StringLiteral("String", "'", StringFlags.AllowsDoubledQuote); - - Terminal dot = ToTerm(".", "dot"); - Terminal less = ToTerm("<"); - Terminal greater = ToTerm(">"); - Terminal iff = ToTerm("<==>"); - Terminal implication = ToTerm("==>"); - Terminal explication = ToTerm("<=="); - Terminal LBracket = ToTerm("["); - Terminal RBracket = ToTerm("]"); - Terminal LParen = ToTerm("("); - Terminal RParen = ToTerm(")"); - Terminal RCurly = ToTerm("}"); - Terminal LCurly = ToTerm("{"); - Terminal LDoubleCurly = ToTerm("{{"); - Terminal RDoubleCurly = ToTerm("}}"); - Terminal comma = ToTerm(","); - Terminal semicolon = ToTerm(";"); - Terminal colon = ToTerm(":"); - Terminal doubleColon = ToTerm("::"); - - #endregion - - #region 2. Non-terminals - #region 2.1 Expressions - NonTerminal expression = new NonTerminal("Expr"); - NonTerminal BinOp = new NonTerminal("BinOp"); - NonTerminal LUnOp = new NonTerminal("LUnOp"); - NonTerminal RUnOp = new NonTerminal("RUnOp"); - - NonTerminal ArrayConstructor = new NonTerminal("ArrayConstructor"); - #endregion - - #region 2.2 QualifiedName - //Expression List: expr1, expr2, expr3, .. - NonTerminal expressionList = new NonTerminal("ExprList"); - NonTerminal identList = new NonTerminal("identList"); - //A name in form: a.b.c().d[1,2].e .... - NonTerminal NewStmt = new NonTerminal("NewStmt"); - NonTerminal NewArrStmt = new NonTerminal("NewArrStmt"); - NonTerminal QualifiedName = new NonTerminal("QualifiedName"); - NonTerminal GenericsPostfix = new NonTerminal("GenericsPostfix"); - NonTerminal ArrayExpression = new NonTerminal("ArrayExpression"); - NonTerminal FunctionExpression = new NonTerminal("FunctionExpression"); - NonTerminal selectExpr = new NonTerminal("selectExpr"); - #endregion - - #region 2.3 Statement - NonTerminal Condition = new NonTerminal("Condition"); - - NonTerminal Statement = new NonTerminal("Statement"); - NonTerminal Statements = new NonTerminal("Statements"); - - //Block - NonTerminal blockStatement = new NonTerminal("CompoundStatement"); - #endregion - - #region 2.4 Program and Functions - NonTerminal Prog = new NonTerminal("Prog"); - NonTerminal anything = new NonTerminal("anything"); // temporary hack - NonTerminal declaration = new NonTerminal("declaration"); - NonTerminal classDecl = new NonTerminal("class decl"); - NonTerminal memberDecl = new NonTerminal("member decl"); - NonTerminal fieldDecl = new NonTerminal("field declaration"); - NonTerminal idType = new NonTerminal("identifier type"); - NonTerminal typeDecl = new NonTerminal("type reference"); - NonTerminal methodDecl = new NonTerminal("method declaration"); - NonTerminal formalParameters = new NonTerminal("formals"); - NonTerminal methodSpec = new NonTerminal("method spec"); - NonTerminal formalsList = new NonTerminal("ParamaterListOpt"); - NonTerminal functionDecl = new NonTerminal("function declaration"); - NonTerminal predicateDecl = new NonTerminal("predicate declaration"); - NonTerminal invariantDecl = new NonTerminal("invariant declaration"); - NonTerminal Semi = new NonTerminal("semi"); - NonTerminal Rhs = new NonTerminal("right-hand side"); - NonTerminal FieldInit = new NonTerminal("field init"); - NonTerminal FieldInits = new NonTerminal("field inits"); - NonTerminal installBounds = new NonTerminal("installBounds"); - NonTerminal localVarStmt = new NonTerminal("localVarStmt"); - NonTerminal evalstate = new NonTerminal("evalstate"); - NonTerminal channelDecl = new NonTerminal("channel declaration"); - NonTerminal loopSpec = new NonTerminal("loop specification"); - NonTerminal rdPermArg = new NonTerminal("rdPermArg"); - #endregion - - #endregion - - #region 3. BNF rules - - Semi.Rule = semicolon; - - #region 3.1 Expressions - selectExpr.Rule = (ToTerm("this") + ".").Q() + QualifiedName; - evalstate.Rule = - ident + ToTerm(".") + - (ToTerm("acquire") - | "release" - | "fork" + FunctionExpression - ) - ; - rdPermArg.Rule = ToTerm("*") | expression; - - expression.Rule = ToTerm("true") - | "false" - | "null" - | "maxlock" - | "lockbottom" - | "this" - | "result" - | s - | n - | QualifiedName - // The following is needed: to parse "A=" | "<=" | "is" - | "=" | "+=" | "-=" - | "." - | "==>" | "<==>" | "<<" - ; - - LUnOp.Rule = ToTerm("-") | "~" | "!"; - RUnOp.Rule = ToTerm("++") | "--"; - - ArrayConstructor.Rule = LBracket + expressionList + RBracket; - #endregion - - #region 3.2 QualifiedName - ArrayExpression.Rule = QualifiedName + LBracket + expressionList + RBracket; - FunctionExpression.Rule = QualifiedName + LParen + expressionList.Q() + RParen; - - QualifiedName.Rule = ident | QualifiedName + dot + ident; - - - GenericsPostfix.Rule = less + QualifiedName + greater; - - //ExprList.Rule = Expr.Plus(comma); - #endregion - - #region 3.3 Statement - Condition.Rule = LParen + expression + RParen; - installBounds.Rule - = "installBounds" - //= ToTerm("between") + expressionList + "and" + expressionList - //| "below" + expressionList - //| "below" + expressionList + "above" + expressionList - //| "above" + expressionList - //| "above" + expressionList + "below" + expressionList - ; - FieldInit.Rule - = ident + ":=" + expression - ; - FieldInits.Rule = MakeStarRule(FieldInits, ToTerm(","), FieldInit); - Rhs.Rule - = ToTerm("new") + ident - | ToTerm("new") + ident + "{" + FieldInits + "}" - | ToTerm("new") + ident + installBounds - | ToTerm("new") + ident + "{" + FieldInits + "}" + installBounds - | expression - ; - localVarStmt.Rule - = idType + ":=" + Rhs + Semi - | idType + Semi - ; - loopSpec.Rule - = ToTerm("invariant") + expression + Semi - | "lockchange" + expressionList + Semi - ; - - - - Statement.Rule = Semi - | "if" + Condition + Statement - ; - Statements.Rule = MakeStarRule(Statements, null, Statement); - blockStatement.Rule = LCurly + Statements + RCurly; - - - #endregion - - #region 3.4 Prog - Prog.Rule = anything.Star() + Eof; - - anything.Rule - = ToTerm("assert") - | "assume" | "axiom" | - "bool" | "break" | - "bv0" | "bv1" | "bv2" | "bv3" | "bv4" | "bv5" | "bv6" | "bv7" | "bv8" | "bv9" | - "bv10" | "bv11" | "bv12" | "bv13" | "bv14" | "bv15" | "bv16" | "bv17" | "bv18" | "bv19" | - "bv20" | "bv21" | "bv22" | "bv23" | "bv24" | "bv25" | "bv26" | "bv27" | "bv28" | "bv29" | - "bv30" | "bv31" | "bv32" | - "bv64" | - "call" | "complete" | "const" | - "else" | "ensures" | "exists" | "extends" | - "false" | "forall" | "free" | "function" | - "goto" | - "havoc" | - "if" | "implementation" | "int" | "invariant" | - "lambda" | - "modifies" | - "old" | - "procedure" | - "real" | "requires" | "return" | "returns" | - "then" | "true" | "type" | - "unique" | - "var" | - "where" | "while" - | ident - | "}" - | "{" - | "(" - | ")" - | "[" - | "]" - | "," - | ":" - | ";" - | "." - | "`" - | "==" - | "=" - | "!=" - | "<" - | "<=" - | ">=" - | ">" - | "=>" - | ":=" - | "+" - | "-" - | "*" - | "/" - | "%" - | "!!" - | "|" - | "!" - | "&&" - | "||" - | "==>" - | "<==>" - | "#" - | "$" - | "^" - | n - | stringLiteral - ; - - idType.Rule - = ident + ":" + typeDecl - | ident - ; - - typeDecl.Rule - = (ToTerm("int") | "bool" | "real" | ident) - ; - - fieldDecl.Rule - = ToTerm("var") + idType + Semi - | ToTerm("ghost") + "var" + idType + Semi - ; - - methodSpec.Rule = (ToTerm("requires") | "ensures" | "lockchange") + expression + Semi; - - formalsList.Rule = MakeStarRule(formalsList, comma, idType); - formalParameters.Rule = LParen + formalsList + RParen; - methodDecl.Rule = "method" + ident + formalParameters - + (("returns" + formalParameters) | Empty) - + methodSpec.Star() - + blockStatement; - functionDecl.Rule - = ToTerm("function") + ident + formalParameters + ":" + typeDecl + methodSpec.Star() + "{" + expression + "}"; - predicateDecl.Rule - = ToTerm("predicate") + ident + "{" + expression + "}"; - invariantDecl.Rule - = ToTerm("invariant") + expression + Semi; - - memberDecl.Rule - = fieldDecl - | invariantDecl - | methodDecl - //| conditionDecl - | predicateDecl - | functionDecl - ; - classDecl.Rule - = (ToTerm("external") | Empty) + "class" + ident + ("module" + ident | Empty) + "{" + memberDecl.Star() + "}"; - channelDecl.Rule - = ToTerm("channel") + ident + formalParameters + "where" + expression + Semi - | ToTerm("channel") + ident + formalParameters + Semi; - declaration.Rule = classDecl | channelDecl - ; - - - Terminal Comment = new CommentTerminal("Comment", "/*", "*/"); - NonGrammarTerminals.Add(Comment); - Terminal LineComment = new CommentTerminal("LineComment", "//", "\n"); - NonGrammarTerminals.Add(LineComment); - #endregion - #endregion - - #region 4. Set starting symbol - this.Root = Prog; // Set grammar root - #endregion - - #region 5. Operators precedence - RegisterOperators(1, "<==>"); - RegisterOperators(2, "+", "-"); - RegisterOperators(3, "*", "div", "mod", "!!"); - RegisterOperators(4, Associativity.Right, "^"); - RegisterOperators(5, "||"); - RegisterOperators(6, "&&"); - RegisterOperators(7, "==", "=", "!=", ">", "<", ">=", "<="); - RegisterOperators(8, "in"); - RegisterOperators(9, "-", "!", "++", "--"); - RegisterOperators(10, "==>"); - RegisterOperators(11, "."); - - //RegisterOperators(10, Associativity.Right, ".",",", ")", "(", "]", "[", "{", "}"); - //RegisterOperators(11, Associativity.Right, "else"); - #endregion - - #region 6. Punctuation symbols - RegisterPunctuation("(", ")", "[", "]", "{", "}", ",", ";"); - #endregion - } - } -} diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Guids.cs b/Util/VS2010/Boogie/BoogieLanguageService/Guids.cs deleted file mode 100644 index 73d0cbb0c..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Guids.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -namespace Demo -{ - static class GuidList - { - public const string guidIronyLanguageServiceString = "0A949930-AB4A-4A00-ABD0-191E81249240"; - public const string guidIronyLanguageServicePkgString = "FC7F6CE7-49C7-40C9-8636-EB37A936D77F"; - public const string guidIronyLanguageServiceCmdSetString = "72B8E853-2250-426B-9566-6D318ADE7C2D"; - - public static readonly Guid guidIronyLanguageServiceCmdSet = new Guid(guidIronyLanguageServiceCmdSetString); - }; -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs deleted file mode 100644 index b5bc4a0e2..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/AuthoringScope.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.VisualStudio; -using Microsoft.VisualStudio.TextManager.Interop; -using Microsoft.VisualStudio.Package; - -namespace Demo -{ - public class AuthoringScope : Microsoft.VisualStudio.Package.AuthoringScope - { - public AuthoringScope(object parseResult) - { - this.parseResult = parseResult; - - // how should this be set? - this.resolver = new Resolver(); - } - - object parseResult; - IASTResolver resolver; - - // ParseReason.QuickInfo - public override string GetDataTipText(int line, int col, out TextSpan span) - { - span = new TextSpan(); - return null; - } - - // ParseReason.CompleteWord - // ParseReason.DisplayMemberList - // ParseReason.MemberSelect - // ParseReason.MemberSelectAndHilightBraces - public override Microsoft.VisualStudio.Package.Declarations GetDeclarations(IVsTextView view, int line, int col, TokenInfo info, ParseReason reason) - { - IList declarations; - switch (reason) - { - case ParseReason.CompleteWord: - declarations = resolver.FindCompletions(parseResult, line, col); - break; - case ParseReason.DisplayMemberList: - case ParseReason.MemberSelect: - case ParseReason.MemberSelectAndHighlightBraces: - declarations = resolver.FindMembers(parseResult, line, col); - break; - default: - throw new ArgumentException("reason"); - } - - return new Declarations(declarations); - } - - // ParseReason.GetMethods - public override Microsoft.VisualStudio.Package.Methods GetMethods(int line, int col, string name) - { - return new Methods(resolver.FindMethods(parseResult, line, col, name)); - } - - // ParseReason.Goto - public override string Goto(VSConstants.VSStd97CmdID cmd, IVsTextView textView, int line, int col, out TextSpan span) - { - span = new TextSpan(); - return null; - } - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs deleted file mode 100644 index 706471da0..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Configuration.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.VisualStudio.Package; -using Microsoft.VisualStudio.TextManager.Interop; - -namespace Demo -{ - public static partial class Configuration - { - public static Grammar Grammar = new Grammar(); - static List colorableItems = new List(); - - public static IList ColorableItems - { - get { return colorableItems; } - } - - public static TokenColor CreateColor(string name, COLORINDEX foreground, COLORINDEX background) - { - return CreateColor(name, foreground, background, false, false); - } - - public static TokenColor CreateColor(string name, COLORINDEX foreground, COLORINDEX background, bool bold, bool strikethrough) - { - colorableItems.Add(new ColorableItem(name, foreground, background, bold, strikethrough)); - return (TokenColor)colorableItems.Count; - } - - public static void ColorToken(string tokenName, TokenType type, TokenColor color, TokenTriggers trigger) - { - definitions[tokenName] = new TokenDefinition(type, color, trigger); - } - - public static TokenDefinition GetDefinition(string tokenName) - { - TokenDefinition result; - return definitions.TryGetValue(tokenName, out result) ? result : defaultDefinition; - } - - private static TokenDefinition defaultDefinition = new TokenDefinition(TokenType.Text, TokenColor.Text, TokenTriggers.None); - private static Dictionary definitions = new Dictionary(); - - public struct TokenDefinition - { - public TokenDefinition(TokenType type, TokenColor color, TokenTriggers triggers) - { - this.TokenType = type; - this.TokenColor = color; - this.TokenTriggers = triggers; - } - - public TokenType TokenType; - public TokenColor TokenColor; - public TokenTriggers TokenTriggers; - } - } - - public class ColorableItem : Microsoft.VisualStudio.TextManager.Interop.IVsColorableItem - { - private string displayName; - private COLORINDEX background; - private COLORINDEX foreground; - private uint fontFlags = (uint)FONTFLAGS.FF_DEFAULT; - - public ColorableItem(string displayName, COLORINDEX foreground, COLORINDEX background, bool bold, bool strikethrough) - { - this.displayName = displayName; - this.background = background; - this.foreground = foreground; - - if (bold) - this.fontFlags = this.fontFlags | (uint)FONTFLAGS.FF_BOLD; - if (strikethrough) - this.fontFlags = this.fontFlags | (uint)FONTFLAGS.FF_STRIKETHROUGH; - } - - #region IVsColorableItem Members - public int GetDefaultColors(COLORINDEX[] piForeground, COLORINDEX[] piBackground) - { - if (null == piForeground) - { - throw new ArgumentNullException("piForeground"); - } - if (0 == piForeground.Length) - { - throw new ArgumentOutOfRangeException("piForeground"); - } - piForeground[0] = foreground; - - if (null == piBackground) - { - throw new ArgumentNullException("piBackground"); - } - if (0 == piBackground.Length) - { - throw new ArgumentOutOfRangeException("piBackground"); - } - piBackground[0] = background; - - return Microsoft.VisualStudio.VSConstants.S_OK; - } - - public int GetDefaultFontFlags(out uint pdwFontFlags) - { - pdwFontFlags = this.fontFlags; - return Microsoft.VisualStudio.VSConstants.S_OK; - } - - public int GetDisplayName(out string pbstrName) - { - pbstrName = displayName; - return Microsoft.VisualStudio.VSConstants.S_OK; - } - #endregion - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs deleted file mode 100644 index fa1ac730e..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declaration.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Demo -{ - public struct Declaration : IComparable - { - public Declaration(string description, string displayText, int glyph, string name) - { - this.Description = description; - this.DisplayText = displayText; - this.Glyph = glyph; - this.Name = name; - } - - public string Description; - public string DisplayText; - public int Glyph; - public string Name; - - #region IComparable Members - - public int CompareTo(Declaration other) - { - return DisplayText.CompareTo(other.DisplayText); - } - - #endregion - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs deleted file mode 100644 index ddda87835..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Declarations.cs +++ /dev/null @@ -1,56 +0,0 @@ -/*************************************************************************** - -Copyright (c) Microsoft Corporation. All rights reserved. -This code is licensed under the Visual Studio SDK license terms. -THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF -ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY -IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR -PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. - -***************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Text; -using Microsoft.VisualStudio.TextManager.Interop; -using Microsoft.VisualStudio.Package; - -namespace Demo -{ - public class Declarations : Microsoft.VisualStudio.Package.Declarations - { - IList declarations; - public Declarations(IList declarations) - { - this.declarations = declarations; - } - - public override int GetCount() - { - return declarations.Count; - } - - public override string GetDescription(int index) - { - return declarations[index].Description; - } - - public override string GetDisplayText(int index) - { - return declarations[index].DisplayText; - } - - public override int GetGlyph(int index) - { - return declarations[index].Glyph; - } - - public override string GetName(int index) - { - if (index >= 0) - return declarations[index].Name; - - return null; - } - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs deleted file mode 100644 index f3ff41f44..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IASTResolver.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Demo -{ - interface IASTResolver - { - IList FindCompletions(object result, int line, int col); - IList FindMembers(object result, int line, int col); - string FindQuickInfo(object result, int line, int col); - IList FindMethods(object result, int line, int col, string name); - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs deleted file mode 100644 index 302790786..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyLanguageService.cs +++ /dev/null @@ -1,343 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using Microsoft.VisualStudio; -using Microsoft.VisualStudio.TextManager.Interop; -using Microsoft.VisualStudio.Package; - -using Irony.Parsing; -using Irony.Ast; - -using System.IO; - -namespace Demo -{ - public class IronyLanguageService : Microsoft.VisualStudio.Package.LanguageService - { - private Grammar grammar; - private Parser parser; - private ParsingContext context; - - public IronyLanguageService() - { - grammar = new Grammar(); - parser = new Parser(Configuration.Grammar); - context = new ParsingContext(parser); - } - - - #region Custom Colors - public override int GetColorableItem(int index, out IVsColorableItem item) - { - if (index <= Configuration.ColorableItems.Count) - { - item = Configuration.ColorableItems[index - 1]; - return Microsoft.VisualStudio.VSConstants.S_OK; - } - else - { - throw new ArgumentNullException("index"); - } - } - - public override int GetItemCount(out int count) - { - count = Configuration.ColorableItems.Count; - return Microsoft.VisualStudio.VSConstants.S_OK; - } - #endregion - - #region MPF Accessor and Factory specialisation - private LanguagePreferences preferences; - public override LanguagePreferences GetLanguagePreferences() - { - if (this.preferences == null) - { - this.preferences = new LanguagePreferences(this.Site, - typeof(IronyLanguageService).GUID, - this.Name); - this.preferences.Init(); - } - - return this.preferences; - } - - public override Microsoft.VisualStudio.Package.Source CreateSource(IVsTextLines buffer) - { - return new Source(this, buffer, this.GetColorizer(buffer)); - } - - private IScanner scanner; - public override IScanner GetScanner(IVsTextLines buffer) - { - if (scanner == null) - this.scanner = new LineScanner(grammar); - - return this.scanner; - } - #endregion - - public override void OnIdle(bool periodic) - { - // from IronPythonLanguage sample - // this appears to be necessary to get a parse request with ParseReason = Check? - Source src = (Source)GetSource(this.LastActiveTextView); - if (src != null && src.LastParseTime >= Int32.MaxValue >> 12) - { - src.LastParseTime = 0; - } - base.OnIdle(periodic); - } - - public override Microsoft.VisualStudio.Package.AuthoringScope ParseSource(ParseRequest req) - { - Debug.Print("ParseSource at ({0}:{1}), reason {2}", req.Line, req.Col, req.Reason); - Source source = (Source)this.GetSource(req.FileName); - switch (req.Reason) - { - case ParseReason.Check: - // This is where you perform your syntax highlighting. - // Parse entire source as given in req.Text. - // Store results in the AuthoringScope object. - var parsed = parser.Parse(req.Text, req.FileName); - var root = parsed.Root; - if (root != null) { - - AstNode node = (AstNode)root.AstNode; - source.ParseResult = node; - } - - // Used for brace matching. - TokenStack braces = parser.Context.OpenBraces; - foreach (Token brace in braces) { - if (brace.OtherBrace == null) continue; - TextSpan openBrace = new TextSpan(); - openBrace.iStartLine = brace.Location.Line; - openBrace.iStartIndex = brace.Location.Column; - openBrace.iEndLine = brace.Location.Line; - openBrace.iEndIndex = openBrace.iStartIndex + brace.Length; - - TextSpan closeBrace = new TextSpan(); - closeBrace.iStartLine = brace.OtherBrace.Location.Line; - closeBrace.iStartIndex = brace.OtherBrace.Location.Column; - closeBrace.iEndLine = brace.OtherBrace.Location.Line; - closeBrace.iEndIndex = closeBrace.iStartIndex + brace.OtherBrace.Length; - - if (source.Braces == null) { - source.Braces = new List(); - } - source.Braces.Add(new TextSpan[2] { openBrace, closeBrace }); - } - - if (parser.Context.CurrentParseTree.ParserMessages.Count > 0) { - foreach (ParserMessage error in parser.Context.CurrentParseTree.ParserMessages) { - TextSpan span = new TextSpan(); - span.iStartLine = span.iEndLine = error.Location.Line - 1; - span.iStartIndex = error.Location.Column; - span.iEndIndex = error.Location.Position; - req.Sink.AddError(req.FileName, error.Message, span, Severity.Error); - } - } else { // parse looks okay, send it to Boogie. - if (!File.Exists(@"C:\tmp\StartBoogie.bat")) { - AddErrorBecauseOfToolProblems(req, @"Can't find C:\tmp\StartBoogie.bat"); - } else { - - // From: http://dotnetperls.com/process-redirect-standard-output - // (Also, see: http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx) - // - // Setup the process with the ProcessStartInfo class. - // - ProcessStartInfo start = new ProcessStartInfo(); - start.FileName = @"cmd.exe"; - start.Arguments = @"/c C:\tmp\StartBoogie.bat"; // Specify exe name. - start.UseShellExecute = false; - start.RedirectStandardInput = true; - start.RedirectStandardOutput = true; - start.CreateNoWindow = true; - //start.WindowStyle = ProcessWindowStyle.Minimized; // need this or else you see the window pop up - // - // Start the process. - // - using (Process process = Process.Start(start)) { - // - // Push the file contents to the new process - // - StreamWriter myStreamWriter = process.StandardInput; - myStreamWriter.WriteLine(req.Text); - myStreamWriter.Close(); - // - // Read in all the text from the process with the StreamReader. - // - using (StreamReader reader = process.StandardOutput) { - //string result = reader.ReadToEnd(); - //Console.Write(result); - - for (string line = reader.ReadLine(); !String.IsNullOrEmpty(line); line = reader.ReadLine()) { - // the lines of interest have the form "filename(line,col): some_error_label: error_message" - // where "some_error_label" is "Error" or "syntax error" or "Error BP5003" or "Related location" - string message; - int n = line.IndexOf("): ", 2); // we start at 2, to avoid problems with "C:\..." - if (n == -1) { - continue; - } else { - int m = line.IndexOf(": ", n + 3); - if (m == -1) { - continue; - } - message = line.Substring(m + 2); - } - line = line.Substring(0, n); // line now has the form "filename(line,col" - - n = line.LastIndexOf(','); - if (n == -1) { continue; } - var colString = line.Substring(n + 1); - line = line.Substring(0, n); // line now has the form "filename(line" - - n = line.LastIndexOf('('); - if (n == -1) { continue; } - var lineString = line.Substring(n + 1); - - try { - TextSpan span = new TextSpan(); - span.iStartLine = span.iEndLine = Int32.Parse(lineString) - 1; - span.iStartIndex = Int32.Parse(colString) - 1; - span.iEndIndex = span.iStartIndex + 5; // hack - req.Sink.AddError(req.FileName, message, span, Severity.Error); - } catch (System.FormatException) { - continue; - } catch (System.OverflowException) { - continue; - } - } - } - } - } - } - - break; - - case ParseReason.DisplayMemberList: - // Parse the line specified in req.Line for the two - // tokens just before req.Col to obtain the identifier - // and the member connector symbol. - // Examine existing parse tree for members of the identifer - // and return a list of members in your version of the - // Declarations class as stored in the AuthoringScope - // object. - break; - - case ParseReason.MethodTip: - // Parse the line specified in req.Line for the token - // just before req.Col to obtain the name of the method - // being entered. - // Examine the existing parse tree for all method signatures - // with the same name and return a list of those signatures - // in your version of the Methods class as stored in the - // AuthoringScope object. - break; - - case ParseReason.HighlightBraces: - case ParseReason.MemberSelectAndHighlightBraces: - if (source.Braces != null) - { - foreach (TextSpan[] brace in source.Braces) - { - if (brace.Length == 2) - req.Sink.MatchPair(brace[0], brace[1], 1); - else if (brace.Length >= 3) - req.Sink.MatchTriple(brace[0], brace[1], brace[2], 1); - } - } - break; - } - - return new AuthoringScope(source.ParseResult); - } - - private static void AddErrorBecauseOfToolProblems(ParseRequest req, string msg) { - TextSpan span = new TextSpan(); - span.iStartLine = span.iEndLine = 1; - span.iStartIndex = 1; - span.iEndIndex = 2; - req.Sink.AddError(req.FileName, msg, span, Severity.Error); - } - - /// - /// Called to determine if the given location can have a breakpoint applied to it. - /// - /// The IVsTextBuffer object containing the source file. - /// The line number where the breakpoint is to be set. - /// The offset into the line where the breakpoint is to be set. - /// - /// Returns the TextSpan giving the extent of the code affected by the breakpoint if the - /// breakpoint can be set. - /// - /// - /// If successful, returns S_OK; otherwise returns S_FALSE if there is no code at the given - /// position or returns an error code (the validation is deferred until the debug engine is loaded). - /// - /// - /// - /// CAUTION: Even if you do not intend to support the ValidateBreakpointLocation but your language - /// does support breakpoints, you must override the ValidateBreakpointLocation method and return a - /// span that contains the specified line and column; otherwise, breakpoints cannot be set anywhere - /// except line 1. You can return E_NOTIMPL to indicate that you do not otherwise support this - /// method but the span must always be set. The example shows how this can be done. - /// - /// - /// Since the language service parses the code, it generally knows what is considered code and what - /// is not. Normally, the debug engine is loaded and the pending breakpoints are bound to the source. It is at this time the breakpoint location is validated. This method is a fast way to determine if a breakpoint can be set at a particular location without loading the debug engine. - /// - /// - /// You can implement this method to call the ParseSource method with the parse reason of CodeSpan. - /// The parser examines the specified location and returns a span identifying the code at that - /// location. If there is code at the location, the span identifying that code should be passed to - /// your implementation of the CodeSpan method in your version of the AuthoringSink class. Then your - /// implementation of the ValidateBreakpointLocation method retrieves that span from your version of - /// the AuthoringSink class and returns that span in the pCodeSpan argument. - /// - /// - /// The base method returns E_NOTIMPL. - /// - /// - public override int ValidateBreakpointLocation(IVsTextBuffer buffer, int line, int col, TextSpan[] pCodeSpan) - { - // TODO: Add code to not allow breakpoints to be placed on non-code lines. - // TODO: Refactor to allow breakpoint locations to span multiple lines. - if (pCodeSpan != null) - { - pCodeSpan[0].iStartLine = line; - pCodeSpan[0].iStartIndex = col; - pCodeSpan[0].iEndLine = line; - pCodeSpan[0].iEndIndex = col; - if (buffer != null) - { - int length; - buffer.GetLengthOfLine(line, out length); - pCodeSpan[0].iStartIndex = 0; - pCodeSpan[0].iEndIndex = length; - } - return VSConstants.S_OK; - } - else - { - return VSConstants.S_FALSE; - } - } - - public override ViewFilter CreateViewFilter(CodeWindowManager mgr, IVsTextView newView) - { - return new IronyViewFilter(mgr, newView); - } - - public override string Name - { - get { return Configuration.Name; } - } - - public override string GetFormatFilterList() - { - return Configuration.FormatList; - } - } -} diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs deleted file mode 100644 index 7c673629a..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/IronyViewFilter.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Microsoft.VisualStudio.Package; -using Microsoft.VisualStudio.TextManager.Interop; - -using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID; - -namespace Demo -{ - public class IronyViewFilter : ViewFilter - { - public IronyViewFilter(CodeWindowManager mgr, IVsTextView view) - : base(mgr, view) - { - - } - - public override void HandlePostExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut, bool bufferWasChanged) - { - if (guidCmdGroup == typeof(VsCommands2K).GUID) - { - VsCommands2K cmd = (VsCommands2K)nCmdId; - switch (cmd) - { - case VsCommands2K.UP: - case VsCommands2K.UP_EXT: - case VsCommands2K.UP_EXT_COL: - case VsCommands2K.DOWN: - case VsCommands2K.DOWN_EXT: - case VsCommands2K.DOWN_EXT_COL: - Source.OnCommand(TextView, cmd, '\0'); - return; - } - } - - - base.HandlePostExec(ref guidCmdGroup, nCmdId, nCmdexecopt, pvaIn, pvaOut, bufferWasChanged); - } - } -} diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs deleted file mode 100644 index b5fdeb8b2..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/LineScanner.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using Microsoft.VisualStudio.Package; -using Irony.Parsing; - -namespace Demo -{ - public class LineScanner : IScanner - { - private Parser parser; - - public LineScanner(Grammar grammar) - { - this.parser = new Parser(grammar); - this.parser.Context.Mode = ParseMode.VsLineScan; - } - - public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo, ref int state) - { - // Reads each token in a source line and performs syntax coloring. It will continue to - // be called for the source until false is returned. - Token token = parser.Scanner.VsReadToken(ref state); - - // !EOL and !EOF - if (token != null && token.Terminal != Grammar.CurrentGrammar.Eof && token.Category != TokenCategory.Error) - { - tokenInfo.StartIndex = token.Location.Position; - tokenInfo.EndIndex = tokenInfo.StartIndex + token.Length - 1; - if (token.EditorInfo != null) { - tokenInfo.Color = (Microsoft.VisualStudio.Package.TokenColor)token.EditorInfo.Color; - tokenInfo.Type = (Microsoft.VisualStudio.Package.TokenType)token.EditorInfo.Type; - } - - if (token.KeyTerm != null && token.KeyTerm.EditorInfo != null) - { - tokenInfo.Trigger = - (Microsoft.VisualStudio.Package.TokenTriggers)token.KeyTerm.EditorInfo.Triggers; - } - else - { - if (token.EditorInfo != null) { - tokenInfo.Trigger = - (Microsoft.VisualStudio.Package.TokenTriggers)token.EditorInfo.Triggers; - } - } - - return true; - } - - return false; - } - - public void SetSource(string source, int offset) - { - // Stores line of source to be used by ScanTokenAndProvideInfoAboutIt. - parser.Scanner.VsSetSource(source, offset); - } - } -} diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs deleted file mode 100644 index 6b6ba00ea..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Method.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Demo -{ - public struct Method - { - public string Name; - public string Description; - public string Type; - public IList Parameters; - } - - public struct Parameter - { - public string Name; - public string Display; - public string Description; - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs deleted file mode 100644 index 7ce0bb2b2..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Methods.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Microsoft.VisualStudio.TextManager.Interop; -using Microsoft.VisualStudio.Package; - -namespace Demo -{ - public class Methods : Microsoft.VisualStudio.Package.Methods - { - IList methods; - public Methods(IList methods) - { - this.methods = methods; - } - - public override int GetCount() - { - return methods.Count; - } - - public override string GetName(int index) - { - return methods[index].Name; - } - - public override string GetDescription(int index) - { - return methods[index].Description; - } - - public override string GetType(int index) - { - return methods[index].Type; - } - - public override int GetParameterCount(int index) - { - return (methods[index].Parameters == null) ? 0 : methods[index].Parameters.Count; - } - - public override void GetParameterInfo(int index, int paramIndex, out string name, out string display, out string description) - { - Parameter parameter = methods[index].Parameters[paramIndex]; - name = parameter.Name; - display = parameter.Display; - description = parameter.Description; - } - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs deleted file mode 100644 index 28762c41f..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Package.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Runtime.InteropServices; -using Microsoft.VisualStudio.OLE.Interop; -using MPF = Microsoft.VisualStudio.Package; -using System.ComponentModel.Design; - -namespace Demo -{ - public class IronyPackage : Microsoft.VisualStudio.Shell.Package, IOleComponent - { - uint componentID = 0; - public IronyPackage() - { - ServiceCreatorCallback callback = new ServiceCreatorCallback( - delegate(IServiceContainer container, Type serviceType) - { - if (typeof(IronyLanguageService) == serviceType) - { - IronyLanguageService language = new IronyLanguageService(); - language.SetSite(this); - - // register for idle time callbacks - IOleComponentManager mgr = GetService(typeof(SOleComponentManager)) as IOleComponentManager; - if (componentID == 0 && mgr != null) - { - OLECRINFO[] crinfo = new OLECRINFO[1]; - crinfo[0].cbSize = (uint)Marshal.SizeOf(typeof(OLECRINFO)); - crinfo[0].grfcrf = (uint)_OLECRF.olecrfNeedIdleTime | - (uint)_OLECRF.olecrfNeedPeriodicIdleTime; - crinfo[0].grfcadvf = (uint)_OLECADVF.olecadvfModal | - (uint)_OLECADVF.olecadvfRedrawOff | - (uint)_OLECADVF.olecadvfWarningsOff; - crinfo[0].uIdleTimeInterval = 300; - int hr = mgr.FRegisterComponent(this, crinfo, out componentID); - } - - return language; - } - else - { - return null; - } - }); - - // proffer the LanguageService - (this as IServiceContainer).AddService(typeof(IronyLanguageService), callback, true); - } - - protected override void Dispose(bool disposing) - { - try - { - if (componentID != 0) - { - IOleComponentManager mgr = GetService(typeof(SOleComponentManager)) as IOleComponentManager; - if (mgr != null) - { - mgr.FRevokeComponent(componentID); - } - componentID = 0; - } - } - finally - { - base.Dispose(disposing); - } - } - - #region IOleComponent Members - public int FContinueMessageLoop(uint uReason, IntPtr pvLoopData, MSG[] pMsgPeeked) - { - return 1; - } - - public int FDoIdle(uint grfidlef) - { - IronyLanguageService ls = GetService(typeof(IronyLanguageService)) as IronyLanguageService; - - if (ls != null) - { - ls.OnIdle((grfidlef & (uint)_OLEIDLEF.oleidlefPeriodic) != 0); - } - - return 0; - } - - public int FPreTranslateMessage(MSG[] pMsg) - { - return 0; - } - - public int FQueryTerminate(int fPromptUser) - { - return 1; - } - - public int FReserved1(uint dwReserved, uint message, IntPtr wParam, IntPtr lParam) - { - return 1; - } - - public IntPtr HwndGetWindow(uint dwWhich, uint dwReserved) - { - return IntPtr.Zero; - } - - public void OnActivationChange(IOleComponent pic, int fSameComponent, OLECRINFO[] pcrinfo, int fHostIsActivating, OLECHOSTINFO[] pchostinfo, uint dwReserved) - { - } - - public void OnAppActivate(int fActive, uint dwOtherThreadID) - { - } - - public void OnEnterState(uint uStateID, int fEnter) - { - } - - public void OnLoseActivation() - { - } - - public void Terminate() - { - } - #endregion - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs deleted file mode 100644 index 579a8a37a..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Resolver.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Irony.Parsing; - -namespace Demo -{ - public class Resolver : Demo.IASTResolver - { - #region IASTResolver Members - - - public IList FindCompletions(object result, int line, int col) - { - // Used for intellisense. - List declarations = new List(); - - // Add keywords defined by grammar - foreach (KeyTerm key in Configuration.Grammar.KeyTerms.Values) - { - if(key.OptionIsSet(TermOptions.IsKeyword)) - { - declarations.Add(new Declaration("", key.Name, 206, key.Name)); - } - } - - declarations.Sort(); - return declarations; - } - - public IList FindMembers(object result, int line, int col) - { - List members = new List(); - - return members; - } - - public string FindQuickInfo(object result, int line, int col) - { - return "unknown"; - } - - public IList FindMethods(object result, int line, int col, string name) - { - return new List(); - } - - #endregion - } -} diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs b/Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs deleted file mode 100644 index 92b5a884e..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Integration/Source.cs +++ /dev/null @@ -1,41 +0,0 @@ -/*************************************************************************** - -Copyright (c) Microsoft Corporation. All rights reserved. -This code is licensed under the Visual Studio SDK license terms. -THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF -ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY -IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR -PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. - -***************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Text; -using Microsoft.VisualStudio.TextManager.Interop; -using Microsoft.VisualStudio.Package; - -namespace Demo -{ - public class Source : Microsoft.VisualStudio.Package.Source - { - public Source(LanguageService service, IVsTextLines textLines, Colorizer colorizer) - : base(service, textLines, colorizer) - { - } - - private object parseResult; - public object ParseResult - { - get { return parseResult; } - set { parseResult = value; } - } - - private IList braces; - public IList Braces - { - get { return braces; } - set { braces = value; } - } - } -} \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs b/Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs deleted file mode 100644 index 0b5ed7a2c..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/IronyLanguageServicePackage.cs +++ /dev/null @@ -1,90 +0,0 @@ -// VsPkg.cs : Implementation of IronyLanguageService -// - -using System; -using System.Diagnostics; -using System.Globalization; -using System.Runtime.InteropServices; -using System.ComponentModel.Design; -using Microsoft.Win32; -using Microsoft.VisualStudio.Shell.Interop; -using Microsoft.VisualStudio.OLE.Interop; -using Microsoft.VisualStudio.Shell; - -namespace Demo -{ - /// - /// This is the class that implements the package exposed by this assembly. - /// - /// The minimum requirement for a class to be considered a valid package for Visual Studio - /// is to implement the IVsPackage interface and register itself with the shell. - /// This package uses the helper classes defined inside the Managed Package Framework (MPF) - /// to do it: it derives from the Package class that provides the implementation of the - /// IVsPackage interface and uses the registration attributes defined in the framework to - /// register itself and its components with the shell. - /// - // This attribute tells the registration utility (regpkg.exe) that this class needs - // to be registered as package. - [PackageRegistration(UseManagedResourcesOnly = true)] - // A Visual Studio component can be registered under different regitry roots; for instance - // when you debug your package you want to register it in the experimental hive. This - // attribute specifies the registry root to use if no one is provided to regpkg.exe with - // the /root switch. - [DefaultRegistryRoot("Software\\Microsoft\\VisualStudio\\10.0Exp")] - // This attribute is used to register the informations needed to show the this package - // in the Help/About dialog of Visual Studio. - [InstalledProductRegistration(/*false,*/ "#110", "#112", "1.0", IconResourceID = 400)] - // This attribute will make your language service accessible by other packages installed. - [ProvideService(typeof(IronyLanguageService))] - // This attribute(s) associates file extensions with your language service. - [ProvideLanguageExtension(typeof(IronyLanguageService), ".bpl")] - - // This attributes informs Visual Studio that this package provides a langauge service and - // which features are implemented. - [ProvideLanguageService(typeof(IronyLanguageService), Configuration.Name, 0, - CodeSense = true, - EnableCommenting = true, - MatchBraces = true, - MatchBracesAtCaret = true, - ShowMatchingBrace = true, - AutoOutlining = true)] - // In order be loaded inside Visual Studio in a machine that has not the VS SDK installed, - // package needs to have a valid load key (it can be requested at - // http://msdn.microsoft.com/vstudio/extend/). This attributes tells the shell that this - // package has a load key embedded in its resources. - [ProvideLoadKey("Standard", "1.0", "Boogie", "Demo", 104)] - [Guid(GuidList.guidIronyLanguageServicePkgString)] - public sealed class BoogieLanguageService : IronyPackage - { - /// - /// Default constructor of the package. - /// Inside this method you can place any initialization code that does not require - /// any Visual Studio service because at this point the package object is created but - /// not sited yet inside Visual Studio environment. The place to do all the other - /// initialization is the Initialize method. - /// - public BoogieLanguageService() - { - Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering constructor for: {0}", this.ToString())); - } - - - - ///////////////////////////////////////////////////////////////////////////// - // Overriden Package Implementation - #region Package Members - - /// - /// Initialization of the package; this method is called right after the package is sited, so this is the place - /// where you can put all the initilaization code that rely on services provided by VisualStudio. - /// - protected override void Initialize() - { - Trace.WriteLine(string.Format(CultureInfo.CurrentCulture, "Entering Initialize() of: {0}", this.ToString())); - base.Initialize(); - - } - #endregion - - } -} diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Key.snk b/Util/VS2010/Boogie/BoogieLanguageService/Key.snk deleted file mode 100644 index f80a4cebe1ce9e7116744b0be60c463c75e3d265..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097H`6%IMfQH9-vaXOn$U*Bj_|G8>OonX+ zFq@>6H3{r>?Ef-o?UM)le0YBSjoijhxA#|#eKwU~Jg`i`R0&-0oKv3@!<*jy1kM?W zH>nB(9tSmYu7k1FtEw-{u+m&LaC4i`rqN(`5LMac@x)%AiAk+Zu1-gD(B_Ei-#E1` z6fd3JwWkWbJyr~WceLy><5DZ2&LZ24{=yqZn~k&1L_~108FJd=x!O*-#ZjPjPU@Ip zM@$uaBM!r)G;!q_r7L{9=h^P8f4Afh0CyMiymSQ2v;pHZ?Lt3OXY);}28vT1> z!E;YA$g!#tzwLlpu+Cv(#Kj8`(lW|LSW*n9cCOxwX7VBvTvo~9c29d{6kX*?XhYIz@5705qs1Hmk*c>fPb{lQeJezOS~;PN*eCn3fJeAK>(Io;E4 zZ+!^?g=r5&hKc4Zdoiw1)2J+OBf1^2hDflzn4-mYZVv(b?XE!+txE;lDRaI8Oj53; zvMl6swDms~3Jh(nB?bFhm~*G2^(2gm_g5zFhJ{{j+vH4jxLA8_48nRC$NHu%Tos6T z$Gm?)kD%V+|IpO#=h0KU)Q!ynL5T!1$#qrEQOSAiXu%m~$R*~F!+AEKU9LL+EZRoW z;8a!Hk63Y1tDS8dM6vcg)c8qp_H+@pQZxpO@UW5jNX-64>F)0cM$iwv@9#CFuj-hY iVbkf75a}^ttZF1-x4m; -// This code was generated by a tool. -// Runtime Version:4.0.21006.1 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace Demo { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Demo.BoogieLanguageService.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Resources.resx b/Util/VS2010/Boogie/BoogieLanguageService/Resources.resx deleted file mode 100644 index 7ad9af7ae..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/Resources.resx +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/Resources/Irony.dll b/Util/VS2010/Boogie/BoogieLanguageService/Resources/Irony.dll deleted file mode 100644 index e2021a72640c9b317eb5153481622ed841cab8a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236032 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 z 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

K@1!H=`A*>N@){=S7j z4s7s~karUDPD0*E$U6ynUqId$koN`TeF1r2K;C%x)rAV4T{wO&p$BO{&lq+fw9^}7O^<8=eHh~FXI&ReAS^8cK* zfcLt%!1uZK@Z$6=NaLq~+(ZbxC&oo_dbHsqu+$M&DPxNN5%zRO2T`7K+!*FprL>LG z5yAq$De6YQFa0`eQTOhp>K8evVAVR#I z(J~;Jp;e*|GZTKo`0 zKDyvh^VJ($59C%L%!LJSF_!0;yNitdE%oj0R}lVOcY#yo$UfjI=P$Z*@q0>7cIPdu zM#!`CUuMY5{OUEjtDKA7RSWMy>=zci%=9-oZ*;F)c)*eK2UU*Ka|bxY_w_9-VG2u> zq`5>%noF4XE97&9-3nhF%j9|0q%FSh^@VS#!#%GoxJv#rRZmZTQP{bwr@$#!_W}>I z#16A04>ONBsLjay9M*Lq(|ITBu7YW+Cf-Oqh2IuAj4KqskaraLP|r}&i1US>nw$?g z-|e}@`4G#njv+6qUoQM`(M1)le6Xm>IlA|YMTIPfCg<6nuN0kBFZ3KPil|q6eq1!i zc}MWoqC%#jkZCxH9R04Sgp?9es+@o8sVEk#DvrQ+TX6+^n~STR*}akZ)z0<3ouEit zs&YzuKUVxLr2nzvdA?n}+h@=7MS8zp`~qs{4U}I%f&Sl~&q`XFaop=QpWNJ4twVRlRcIGt57Sc|v zCYG?YYZ>w|%ej`}tI45}^g^`l) z@<~g0i*5ce>4zC6NIXT#DYY=XdNF>XvS-8M2?Uvx^&j(&`SW=J1~`PNFskuS+@-GU-T| zCny@G$JVkC*PW7lriA}`P-d9Qc9i8Ul6!5Bcxe z8ZRy6w-rp!X{M);-=1cw3f0k3>^5fZPWrm{Mi!i8U7YkKMkDi2`VQ@l;Fkd7`>K`{ zvfK)N9~|AgWS_P3!Y*L9B>{SeSOJOER&~L4nuzFr%#jeG^NVZq@O2__+J>^uyn-# z_oFug>sCI$aK!(waNm!w%BGF@uRpUL^eYQ*T>1mG;>^yasD(2X#UuXBXGDrV+w=9A zKHv5;rSpWtP1iq1o)-;D+j|;mZZ1C0ws)Rw?`fw0B1`@v<=AtMwDypnBKRNB?Afp?zyEpT+}?}+}g2ax7<&KV$d0QJI|JIZEaTn+$# zab~FOE1-{*ode!qR_t5*@IL|HvGuoQKk(N+{9k1+`1e1&viv3ZRymi*;Z^?!9)4eW zF-Lj9N6Lkc^ZL#M4}Yut1!rj4ua~~+JpAxqmA^&$tIl`e_T@;Jik&HE`i_k)n{F{+~a5?hUuOS0Pdw=p zX>*=^r<(4IbkAXbyuw^uVJ@nW-@)rdR`*ucQjXQK=hiZoMxwOL`o+z3&mo_COiHAV z?qScphw`(Uc#0Cch9!BU@LzFb&f-VkyW&7j?W6BsaVVz|`|In-t8_ z-$K8P)H%e<{HlcX5>n={d`g(|LYBZ)rvEBSbq-78Dob^aE+2BJAcsv1Q$arM)G>mT zFzv)fwvAeTo5NUgD3Pl9Z8g8DAibL5H=##BlKa*)%&ls2`X4K)D)b$D?81U(%E@NN zTgz{2`E8J~A141setVdsfb@mI>kcz~Gs8=Z`tPb{e$~tvn|&u98@#UB_ufA`qyOJ*uLUt7o&7Ai?Yp^`L|gL0tYH@MUDpI49MTzzcanjl-k zhrqcC<5%_Q`8CkB{_ro?L|6;=vvu7=&L@edh@y{OU2~c(A<1-}W;#!Eq_~HraSzjc znl)bKyzLMBtDj>{$+yR=Pcz=rt`rBf`K(=3_OhAy>s zne}p+ZK;H1-cB8+g#0hF?oQENP4|OL?aQpeT(w?RIJv4*Jr4}33&39WQ^&8KQ1|$A z)zkDnt3Cktd36f-thyigocaXtN9r@cR~Y6shIyS~t}x7-40DxXI(-sL&?kI)eZnW= z6At~pALrz%r0-|ILEkTd_xLUYhkdUCPx}4^_(9)qfv0?L0`K$v4tUzOmiFS5TwAdB8_~3xJRN76Z>R#`BEvS;qLBPf~u7^q-RcGU;QaUuJq<@kx%>JCfQ> zj-+;*BdM)*B(=SyM@a7{J?RL~LHgd~$hX7Jk8|=>iGN^5zAE$o0$AbyEpU}TCpTYJ z`)hKitLEwV_@}G=)0fYjuG*)s0Ny^m3V3*W^-Pq~bcwxpy2KutF0uDdmspb1KY_2V zPX8go%$*@&3TH@|q8SpVWQL@$Y=)HQDf-?=-_!K{CMi#oa+Z|Kq`X4PYoyH0y__>! z73Ln94W7A2fhD>9z_Q!{;GSHGv6;9(SK@8Ym3VK@m3R;5N)2}AN(~0V2kFn18jR#h z-Sy{6-6eCS?gn%3&qpoiejgj?&ynYkz!T}u zll1&FPjWQIFqawT6^3~&Piph^JgLnqdD4E~%o7Q4H7{6*y3S`h^O??krZZo77Um1j zqI}_5k}suHmLEp=ihQZ5Rryi4tMe0u>(o(Ic*8oCfTUWd?pDtiuft)7Z?9XYzNkh( zZ&UvQ_mlK(P``lt!)g)eA5$xVpHVU3BWe(M3%^>f?n9V0bZ=DOgZn1%e8f5G|A7Ao z{$I`dVA-q0@|?wxHp_E_J~~a@XNmq?p^V`-Oh14FWrAhIa^enR9kF4igzTg{KpZAM zGxOe=OO^&^$+wqhU5}IpXAAynwuFCVj?f>O^9)+!BXhnpYf;%VbACPRlVuHg;yau# zzN5rv@`duN>jclw6Au0Y@%0zTSN;OwFtb2%R8b(lRdhd6z^@9P1f}76ar+A;JvoIE zrlC+MjdVX!cy#V3S6^Nr^u~pPV+)U>tjdZ68;T@kC*8xudyC1rm}yuf*g)(eo*|wi zULyJyOPF$E9Wg*0A)XlCc!{W1$X7mM8L^zWgIGuGBnF7X#1Y~s z@eJ`S@f>lCc!{W1l0UJGSWetQtRr?31H@tC2yv8nhIp2Ej(C10dkWo`h-wvMA(j!# zi93jO#7<&>I7}QNjuOuh&l1lO$B37Rs*3!HWyEsg4q_d#lNcZl6Gw=n#52UR#B;c%oe_|Q2oVbHnN9-g9h{MDY z;wbS9@htHiag2D0sH(}ISVk--?jY6?JBb0}FmZ%9N<2e6OFTy$BVHn^wd7AMBbF0) z5bKDY!~k)aI6@pHo*|wko+FMCFA>!`@+X!N%ZWRPb;M3$fH+JXA&wHy5YH0N5yyy^ zi0TINCzcV*i93jO#7<&>I7}QNjuOuh&l1lO$B37RYCZWA%ZTN~9mG0fCow=ACXNtC ziD!ssiRXx8#7jg~L;l1vVmWaKv5weD3=oHjBg9eS8RA*uIpP@c5>ag+e_|Q2oVbJ7 zNgO7Q63-IHh-#yJTSnYL>?95oM~P>NV??!y;fXtloy1|{DDfKq zC7vaY5!DukC+;A25{HSS#IwXPqT0&v#2v&=;xKWPc$PRuRNEMyxP#b9943wu&l1Oo z>PChq?jUv&hl!)av&1o?dK<$NcMv;?!^BbIS>hN`-Nf+39mG!JFmaT4mN-UKwG2<( zLF^iDN|dc7`YJAa)YZ+${8SErOSbzWw69+%BVo?^bb-+#z^|c#gQ^uxM7D z#L;(&dyJ@lPux3*V?@9tB)=4^Xlz5g{77+R{aU|%U2VE|7$LyMAs#~y( zc&?kN3JabMOZdx2CAB*u;yz0pBdR{3j7FDZZZbx^bfL}KYsVh{t$g))!5zd-;wbSfag3rU=ZO`6ER;rKka$wNzbf=ciRX!zi9U5&DfI&WaN`dSmn(I`@d593 zVpLkm8!;Oh(idcnUe`0oYpSa@V%a^bxTPcM96;X?}_S@`*dUtjq2!eQ@WixwA^7p*ATQq)k?Qq)}(FB&O2UG!+tcZ*t_9~R{o-%uPX9xOgt{E^}Zik~R{ zYVltb|E%~Qihoo5AH@q6ty|Qv=+L6bqW`n#6N?^O^qocL7F}5M%A)CumoL6?@!rMn zT>PHJk1hV*;$JNO`^Epc`1+DXCFLbIlDA=$ArSD(* z;L`6b{oc|aFP&XhSQaizls#Yeld@lysq#7HrRC-2Ys+scuPfhG-dx^VetY@vl?Th; zUEW`Qto-is`^q0E|7`ga<$qCrq5N;l|FQhHsXdtcF(f+ zE&J@U$CrI&+1HnSciE4Zy|V1TmX$4Ex%`IZTbI`^-?{vq%R83`m;e6q$Cp2~{5#9f zFaOcuHv66{FSpS z3o6SiS5{V6Zm8T*xxeyVm0gw5%4FqTmG7_oc;#s26O~`9{6XbUD}Pb>>&h#YS1V_% zShQm8iY+T@SKPAVwiTT#!Yh7%#TQq6XT=LE{&B^>t?;ePUs=4ea^=RAZ(G^7a&+al zR{mt=FIUc3Rj_K+sy(aTwd&)mez};)u*eTsruWhoYl)#uUp-<`a`Q9UwwA< zv#Xz9{qxm-xB8XU|GxU_>KSY1ty#2Y#hOiPwy$YibMu-5YwlPRSo7{R-(B;gH9uQ3 zw&ow!{QDZGddNSgy1IIM^)1z{)rYD(tM944ulm92Z&trh{k!VCwF}nXuy)tl&b9q( z-?#R2Yrnhpg|)GD?_Kx)b)YtN#2flUPi@>5KKLOrS_ab)X z>TuT~+&nc4`*CKgVwI;BseH9WU8h!oTBQnAjamR+i_|W)ST(5q@X5jtq%b~T=r{Y`j+;h*vf%fC(~87Bx9H2jO^XC?TJ$LHLfS#xxcC*g-?8{# zfL~c0o1xUlOC-!g#K(#LrNW`0R5)L(*fvY47;u}Q&X5n8*tRU79 z>xqYn3F1lO$B2&;zfHVA{0HKH66bCao-2quh;789#P<=;5Ua|UQ;rMo;pV)rpI;B2Be2A2ZVKm(xvZj9PT%{W8-wwR3Uiw9EeLdW_7VZJM+v>ty zlG-ZbO~n1g05L&)Kk)(L7m42`zDRt9_$D!Lw{R;Zt|QhFbx)~kl3w%vy^^ovmH#?V zsZ)EUH{C~U+9$rZ5`T}Vb2`1{Z3Rk|w8&QokMzH{^&QtM^7Z8z+>kePEK+vJp65oF?AwF%NQS8W73YAwz( z;CwJJSC#vw!*?0br}j|R?gqlj46E>5bqVM|QqF|$%|Hh>+}Ut96Zb*FI%+Sm1ya^g zw?oeQaMjm5xZepW?1QEFdbq=CJ}{vcf-(Tf?5HI1gOI}xWUZw1ezg?%F;x!ymRb({ zwyFevN38^oL4G^x670qfe&TX1@GW%%@IN8bvHur2b5yZ!GjNu(6-a|rk`=MLa$=Uu>$I~~AJI04`%oi5;~oDlE&_YAH=IX+-*g@We#`kI;J2O61Ha>Z5%{$8CE%Yre**lj^A+HqIZp!5I$r~x zbG`xmbLU&YXPoZ<&pUq#{GRh?z`t0>`4#Y|&ff!H za{dwcGv`&{&z)ZbUv~Z(__xl#0)OHB2KYwY}cH-IQH|1{vY{4;>x_0I(Uxqmi%p8=vA{CRMH4~TN` zUkCU1i9hhq1Laxb5B=A}{g-}hwN*dyFGQHXA-?1<2IZ$fpZd9fG2A~RzU(iB`)~bA zLH`91eLtrhSd5>n^QlEZM=j2&1eWBi1eW3l+#IzeXAN*^&RSqu&JDowoEqS=oQ=Tc zIh%nMIa`61IX41VYne%qws+@NKt8(gqt8*HFYjSo1tMLO+j@q5mgn0J=9W|VD z3veW7FYrW83-E*ZIUDqgoHpPCIR}BC&bbYECg%{odKicnn{x;7D>?51ej}#?_zyV& z;6LVc0bk1r0bkGQLHOSQ9rbTHVc@^#90k6a(+7MjCkFhVoI4RlO%r_kv;-)%#G9uL zz`b|cabWATA>hGjcLU!!?LEMEO?$7eTfI2l554XWW^DxCH>(Etky$qYPtV#6{KTxS zz)#J(5%}p@H$nS*7$IL&qX_w;dI%w3RF5L$i|P*%@y`C zU%zkAH|+bM@B2=`eb0sjs%~1nd-Z|UcdTAiy}bJK)vs3nw))t* z+i&ox2mG%CKkd&MmRMYUs{vj?MeL>*Oq_&cwjK`B3jn{A&#%|jAlSI3JO z!!BUO^A5FO!5!*}1s_*8Vej=#3-3^`FTUhoRmC`K_r`()k$Kt$aZJ{qJmxGNmDeOG#`MXn(E`RKcWPG5D<*@TuATkgTrzwV;2m1Qkhx$V*?Sl`Jp+Si{5$@?j zyi7W4D$tXPbQfy59l>mN?0a(-E zT0^X_KN1?;vPta?cg16gSa))rt|YX*b$bKJUfsl4rJ=?^GN9VyfoLMktfrk(j_Eg+ zaQd}f>QObfHYG!S=D`q}BA+(5t~Z{18eh7_yDb?*BB-MdLa5TqaM+f?~rzA2OinIPTW7KX}XlFEuB5)Dh?sT~#8-0OjusIwJ zAw7X0%4r~yL=mMr?aoA3pg)yqbf!QwnXqM`UsIXY(Yb_`ChQF*5~wGW0`taV-xrJ8 zkH^1DBXN0)D1dAZDUnLIhSAC)HJTa%kw|+W-XrbQv<4}N`hjpH2yrcLQ>v^`cc%!Q$6@rS9kPSC@wLfyLI*MK}kj6r3H;mxY{?+cO(?o6{+2} zCS5+M27rQ%MIjta8R`;p)t*QuTU2zjV019POToBarE8h@I(9zF79BtnGJVEtJCt24cxjkOgToYs*8@XWeAc)W$M~qzDE2RK^RF zX=Ny1SjXw?VW^T9h!`uEZ%vpM&%)Rn=+CHm)zT07iyCVTC;Fw%ZV3&!t1`1$(ncLP&CjN?vj>j(}YB@FLYe`sV!TGl0Hd7>fMa}Y)iH`=<3B-7V8Qlt;fPiBNRkU z**TaDVZ4CARnpzjOW~F(qp;aE5M>K#4C%qEWgrBuYWovrybUmIZ;nAB6npcpb8OfXxjP$hPH@ewKyJdR-C{|HuG3lU1|WGo-j$ zL;bOMa(6riAu6N)INJDk#)O6>!E~jX7q^FL*v+vn-6l*s?+-*xHg&dkg$F~y=1{aJ z*=swFY2az0YzDNnDqw2XD4ZPBsFm6wOnWdjr0b~YRC^)M!`itArOx~se)7(bT<u*^^MbUj0nW=X`&I`bsZFqfe0oSslK1kI*IM#O}k?8zCbd`A)`q&9%yQ!FT%}% zF)S~svVlS*1Di;2D8M`Kgr+T_k;`;fWXlAlNy-b7TKm_BdctOkg$ANpjCu~uG1>z~ z5AUI*?oX-iwN7+Ac2ta5p{@`#uP&rTx?5`qV_PUajzJZLIv@=rp>~Dii6q}uQ-X?$ z$X!%VdrY@Ign$+(N?lzvxH|;tin)N$(qHP%bPZZ-s0(7tl^o8Tz(nd>NjZsFVbafZxR0^dP2nIXGk>a7g*s;)f zYD;unu#Wx+I($bW8HlR`YQMaoaN;V~-%%GtZ$i5lcYQc{Je&x%#F6|ChLUF(ov1l> z9C|jSdkot9klGXO>2<$jNDIY}g@U)m;=x2JR7!}YC{h|2TKWglV_RY($<@Ev+hlNR ziUvc2sM-C2a2$sE>|lVVCRlh_nJhK7W{B-aJ38v26o}9aha%_*6B)2UKrM;3 z2YOUPBnATn9D9;|k)2vYVRA%y3ZQ)A<2~d{p{2e~z1S}@LRcarvO)L7^c+Fyhs^h+ z5ykq&l~Bh-+wSN<&(Qsi68W}3JStrs38Q+cJB2n>ph$E`ZSb(O2Q)#2KXl9XURWR$ z>U3{lP=}GJ%TQ_(55Bhr&|ITEdokN;ilQMwN}&V>HD5cvicv+?9pONd(jt|ePFhLX z3$-;UX+^Yfv9F>9ABFO$3DPz*2-1F=1Ma!J1j(dG7?C{aW8!I?tx!FYx70X-;a5~8 z4o*yag3ah0owh3IbkGWf>eEkQNcKTj zm<&QkzZku&cT=K%ATcCWqnj#PWGE2V?)ri5Zs>gQBZIi9SD1pN1|Y?d99^O!bdr$T zp{}DC>&cOypz3YnZC&fRw2dCTA=0Q@bYl*zS@2U+2;`}1-L*BLlhtNa)I@L1Y69KO z6OGAT`zCT*Go~n+E}L>G=+xMj8c|c)hI_n}5_FAdsjon06RC@K^`c$dlA=O{xG*v+ zt(3V#wZhcGHc*!^BX9xU5fYnF!|oFM*0YNEv16zjS~`LR=TsR|fRrNiP; zYdKCRHtV69L)}RXD5@2M250_IGZJ>brJd1wv24Ii@nc`?(`uRU7MmZ;6fzLVBu1P3 z@CIcp+$R<~xZQ&hUiXG%65j@G4eDM~0+t6m9ycYlxlA%I9+(Pi-BaFRnb8_iLNZR> zD1phrag1=nRCI3{m*A#0t49p6VW6=i1!8NVTU6I05cP_xkO{Uk8Z<6x9w=v1mr3c^ zqV{xSGLg_a8!Iub$*GP|N~?2C?o>TQ*in(Xkd6al@<|SW)$UjlN;0KcQ&8!Kpw> zm7PzGBa223(^|%?R?MknW^6L;v3@-NF1f>QNP=JjJAgXLrv@0?I>!MZ) zgo2KPB*nU^_^;j=%;RJ*t}e0{1dWL98P;+>&*j81w;tx0$(k9QAno&*I`3NhS;MF+TL8W9m?Qs~i;eZzz? z31Pq>)-CEOdt85n!Bg%=*gc?pgM+xl$e|#yt&H}wa;C=#kh z(!pVSgWjB`G$op%fuNKIrY?w2tjZWjgF%Ub#hW(qLlr<#nRNlJKOn6^8I(fk1gazM zenbCYvUP&fF@mm1<2~FFW$@h}a4D*^>Se1w$Q{!W}PK7(oJvuxBD}3nzQ6EN`bN z-s)NznHdR-jH}% zOR_DaLfrH9SJKfGM+E z0vyyfKs}#MY2MVbY`&x~rWU0*!OkF<$zcYqC7SUn6=zdoG=VT}aR_D0&N%C$L#YX& zA?am__Lz*xSQ3=v$VUu0kp}&@J?2`;khrg1K3Zf5&$KOjLeV$0VH(%38;R1jp-G(R zX~L~XGW_=s!GdnuRmLZJLBx=5J(BUNKguArb@d`;86+KbdZEqm(jQMCx7``pIhb^j zIi@C3qh~-YP4T33e=~?u!?PNk%$1`E}=p~M=OW{(8P=+^=@0%jVz#rP^TB!gf~@1niwU!4XLxY%u?+P}@&FD5O>In^7JuT(B&5^0lYrIrbUmZ@FR zWspeiEqWSDg%d$tW;#X^_J$L%VR!XXx7WTf4P(hyS|93D>-?A*zu zF`hwzf$;@eoL+-tj-e&EeQXn>=+lZqT{i}6Q!U(jV8&XsSq$rX>j6575d&tLVEZ;V zCZv6>37b`*+jvmR76w$9X>ewnR&1p|Q%^;CY6ss^0rc($t;);fIpv`+`><~^8LErN z14EcXqL?w$go-GJzMb6o&>l`=+O-=ETAC!JE?O;m86Rn*AT33Zu2LEuUCDT)0rDjQ zbCwtZ<HX>XuvwtCb4)E0IYr4N?Zq4)ve`^Ubuid3#!*bf zsbD%qHaW(W0_6>=Z zX2lf*!=4OSBPkZGR)I-TP?nP5KsZXfu%)+62&@5rlD_TX zNCaZ_TAbSku$+~^bVq9y)&gWT0$UkY8yGj{LlYQBffgW?aT)+fcJ$Xy*T}C4sZn3Q z+7Tab6UTIkVItLx^x}7oQC^eBjqrvzadd~r#F1TynWH)=6Gn8F&{&G%fiuM_%!`#;B{wGRvAU;=*gfXlrSyk=9K} zjj|w)A7S03^yq4+NU2O=x66*SjqDsSms9cCm2ar`Js5=KlJL9JUXOBmqz zI&tI#dBUivX|53ygv`-0JyNSAKZ)S9KQS`{@BG^%pBs(IS7c(02En_4k zB|Qq-S1wHRB|ZA-S3C0Y%{}Uo;2QDFyB_T(jC2#mvD7Fx!AFm9AZLzlAh<_1yiOd| zKpZ!sfpYE9%zC&+GD~ugVwRRUf{mk^$;WtVdgL1CBO}u|QfkB+M|X`@*YdF=)p$QM zN?}W0Vm}Un$hr@gr0q&jTUS8lZn9Z&Zy<3rMTYs7??+@8qMWBuL0Qk|N+woDjBUsU z*XyHVi{5EYFJMU*wptwP;2Q0qS+CuVYi)H}o9aevvG32*nI_7q_#JSKbB(!DBjIr-ahj6{xK!|pq7%{LBH>5kV zth=X3O5W@ubXzjiPXbgdXc^cbXFi0XD4KF3G*+n(VljY+p707wwF-uhDcFreT6vKg z>%$s*`|%hyzu5I0oMz!hP1q_W@vb-HY>BJevCja0Fm7QP92E?bY{bz?XMxxk?#oHh zU2llo9VtEIR(e|m{hh*O1Z_>Y+8mu_3Q1~t zx-Eoy3&<81Ga*7^v{AvlvuCq#WgAn>bzG_gli2ZG^#Za4mj;kf%tflCz#Fn8lh&wf zHWh~PiBQ2p4%SZbi5vlA0)(h*1N9uiIJqRo29c_}7e zr^yIevGj5=Q5-3Yb`M^lWgH8Kj;D5WNPzJ)S2zj|dEW;)Y{HSIt(edbVJYJR-d

    K)s4(}zGiU>r-Dvtp^tK)+_LJ1A~C zB39dzwdIWXSw1#_XrU%O=HtMTjzAozA+bz1Ox;Lq=BZ9*sP{xpX3 z#?X<09&8%xk%P)Oy1|7x>_ZDghVIf*UG|=-ThUaaA*eL^NR@;)af{PvZsOEU6Q&I7 z07qG1mTg~hx=!x{*LsRsano_?rXpo<4YE{r23cDmCxq5y&5&+z#X{it&v~Y5{Kq7s z+vu&XMw8+a2P_fXLz(VDmcT~Ff`|>k#3O6QL_MR!$_*Cz#rjGjHX@m$H;}(LJfZ`o zJZ*Ig7c9f05<@}B2}(7+(v_|UU0!+*xV>7ybX3Ns`+`1`l0h(AW-@3k(TrDF?RTxv zre0m=0oYowHEaCgpxTUTVj?Frz05GIr>Vn8)l3L6F(O+}uKLd)v4-1pmD;-0`y7~i zv-1IZp*|eq+OmzMy!15?7?cvU&tUnR`(slCjNI5j5@r0@P;CScEKfBQ(r|2`1JYO@ zO45}iiignceiC^{*wm}G`_C??#c-ii_Qi1TM&|iqDjHg+kOFRr%D%{M?DbW;^z?}xC^{%*NMOB(S)_+nIBrAa zyRe%~blC~i)TopZ*3P3Q1c$yck%w&mn@H8l?*tBQIBReX9x|1i$m8I(SszR@(X$t9 zRXi5H3oW~TD79bMYB5GdB6GcT1e;8%+>QAf>ug;9vkUE#Y_u&qm(crng-FHAHILi4 zg^WqIlfezfQ2(D8+N z&4L_Xh!YC%8ihBm;C4gp;D7|j!Du%x(MgRpqTXm<8Pc`uV6-1&C3kLXf)P%#5tan# z6y_k2?oL0ZmDir@tJ_qAiJ?NGu$0u#|o=1aCe=kFBm1_sqH;_3xgR9WfOyS ziUMMI%MKLrvXh$*Oj?cGZqy4?VL?K<+e2ps8!I?Nw>$QD;Dc#~S}jxeWJtf&4ee@;TDXrJq^#≤oEw{$q+6<=nBCAkUIIIkDE>AS38NvgmG_@ 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 QqrVjn - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Paste PLK Here - - - Boogie - - - Microsoft Research Boogie, intermediate verification language - - \ No newline at end of file diff --git a/Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest b/Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest deleted file mode 100644 index 4a64ecc25..000000000 --- a/Util/VS2010/Boogie/BoogieLanguageService/source.extension.vsixmanifest +++ /dev/null @@ -1,27 +0,0 @@ - - - - - BoogieService - Microsoft Research - 1.0 - Information about my package - 1033 - - - - Pro - VST_All - - - - - - - - - - BoogieService.pkgdef - - -