Пример #1
0
        public EvaluatorState Evaluate(
            AST syntaxTree,
            ResolvedContext resolved,
            IPrinter printer, EvaluatorContext context)
        {
            this.context = context;
            this.printer = printer;

            foreach (var resolvedVariable in resolved.ResolvedVariables)
            {
                if (enviroment.Variables.TryGetValue(resolvedVariable.Key, out var varialbe) == false)
                {
                    enviroment.Variables.Add(resolvedVariable.Key, resolvedVariable.Value);
                }
            }

            EvaluatorState result = null;

            foreach (var stmt in syntaxTree.Statements)
            {
                result = Visit(stmt);

                if (context.IsExplainAll)
                {
                    context.IsExplain = true;
                }

                if (result.Type == LiteralType.Number && result.Value != null)
                {
                    printer.Print(new Run()
                    {
                        Text = "=", Color = Colors.Red
                    });
                    PrintAsBitSet((int)long.Parse(result.Value));
                }
                else if (result.Type == LiteralType.Text && result.Value != null)
                {
                    printer.Print(new Run()
                    {
                        Text = "=", Color = Colors.Red
                    });
                    PrintAsText(result.Value);

                    var resultAsNumber = ConvertToNumber(result);

                    PrintAsBitSet((int)long.Parse(resultAsNumber.Value));
                }

                enviroment.Variables["res"] = result;
                enviroment.StatementIndex++;
            }

            return(result);
        }
Пример #2
0
 /// <summary>
 /// Cursor position changed and word at this position was resolved
 /// </summary>
 private void OnResolvedContextChanged(ResolvedContext resolved)
 {
     this.UpdateMenuItems();
 }
Пример #3
0
 /// <summary>
 /// Updates the state of the menu items
 /// </summary>
 private void UpdateMenuItems()
 {
     try
     {
         ResolvedContext resolved = ASComplete.CurrentResolvedContext;
         Boolean         isValid  = this.GetLanguageIsValid() && resolved != null && resolved.Position >= 0;
         this.refactorMainMenu.DelegateMenuItem.Enabled    = false;
         this.refactorContextMenu.DelegateMenuItem.Enabled = false;
         ASResult result = isValid ? resolved.Result : null;
         if (result != null && !result.IsNull())
         {
             Boolean isVoid        = result.Type.IsVoid();
             Boolean isClass       = !isVoid && result.IsStatic && result.Member == null;
             Boolean isVariable    = !isVoid && !isClass && RefactoringHelper.CheckFlag(result.Member.Flags, FlagType.Variable);
             Boolean isConstructor = !isVoid && !isClass && RefactoringHelper.CheckFlag(result.Member.Flags, FlagType.Constructor);
             this.refactorContextMenu.RenameMenuItem.Enabled = !(isClass || isConstructor || isVoid);
             this.refactorMainMenu.RenameMenuItem.Enabled    = !(isClass || isConstructor || isVoid);
             this.editorReferencesItem.Enabled = this.viewReferencesItem.Enabled = true;
             if (result.Member != null && result.Type != null && result.InClass != null && result.InFile != null)
             {
                 FlagType flags = result.Member.Flags;
                 if ((flags & FlagType.Variable) > 0 && (flags & FlagType.LocalVar) == 0 && (flags & FlagType.ParameterVar) == 0)
                 {
                     this.refactorContextMenu.DelegateMenuItem.Enabled = true;
                     this.refactorMainMenu.DelegateMenuItem.Enabled    = true;
                 }
             }
         }
         else
         {
             this.refactorMainMenu.RenameMenuItem.Enabled    = false;
             this.refactorContextMenu.RenameMenuItem.Enabled = false;
             this.editorReferencesItem.Enabled = false;
             this.viewReferencesItem.Enabled   = false;
         }
         IASContext context = ASContext.Context;
         if (context != null && context.CurrentModel != null)
         {
             Boolean truncate = (this.GetLanguageIsValid() && context.CurrentModel.Imports.Count > 0);
             Boolean organize = (this.GetLanguageIsValid() && context.CurrentModel.Imports.Count > 1);
             this.refactorContextMenu.OrganizeMenuItem.Enabled = organize;
             this.refactorContextMenu.TruncateMenuItem.Enabled = truncate && !this.LanguageIsHaxe();
             this.refactorMainMenu.OrganizeMenuItem.Enabled    = organize;
             this.refactorMainMenu.TruncateMenuItem.Enabled    = truncate && !this.LanguageIsHaxe();
         }
         this.surroundContextMenu.Enabled                              = false;
         this.refactorMainMenu.SurroundMenu.Enabled                    = false;
         this.refactorContextMenu.ExtractMethodMenuItem.Enabled        = false;
         this.refactorContextMenu.ExtractLocalVariableMenuItem.Enabled = false;
         this.refactorMainMenu.ExtractMethodMenuItem.Enabled           = false;
         this.refactorMainMenu.ExtractLocalVariableMenuItem.Enabled    = false;
         ITabbedDocument document = PluginBase.MainForm.CurrentDocument;
         if (document != null && document.IsEditable && this.GetLanguageIsValid() && document.SciControl.SelTextSize > 1)
         {
             Int32 selEnd   = document.SciControl.SelectionEnd;
             Int32 selStart = document.SciControl.SelectionStart;
             if (!document.SciControl.PositionIsOnComment(selEnd) || !document.SciControl.PositionIsOnComment(selStart))
             {
                 this.surroundContextMenu.Enabled                              = true;
                 this.refactorMainMenu.SurroundMenu.Enabled                    = true;
                 this.refactorContextMenu.ExtractMethodMenuItem.Enabled        = true;
                 this.refactorMainMenu.ExtractMethodMenuItem.Enabled           = true;
                 this.refactorContextMenu.ExtractLocalVariableMenuItem.Enabled = true;
                 this.refactorMainMenu.ExtractLocalVariableMenuItem.Enabled    = true;
             }
         }
         this.refactorContextMenu.CodeGeneratorMenuItem.Enabled = isValid;
         this.refactorMainMenu.CodeGeneratorMenuItem.Enabled    = isValid;
     }
     catch {}
 }
Пример #4
0
 /// <summary>
 /// Cursor position changed and word at this position was resolved
 /// </summary>
 private void OnResolvedContextChanged(ResolvedContext resolved)
 {
     this.UpdateMenuItems();
 }
Пример #5
0
 /// <summary>
 /// Cursor position changed and word at this position was resolved
 /// </summary>
 void OnResolvedContextChanged(ResolvedContext resolved) => UpdateMenuItems();
Пример #6
0
 private void UpdateMenuItems(ResolvedContext resolved)
 {
     try
     {
         var document    = PluginBase.MainForm.CurrentDocument;
         var curFileName = document != null ? document.FileName : string.Empty;
         this.refactorMainMenu.DelegateMenuItem.Enabled    = false;
         this.refactorContextMenu.DelegateMenuItem.Enabled = false;
         bool     langIsValid = RefactoringHelper.GetLanguageIsValid();
         bool     isValid     = langIsValid && resolved != null && resolved.Position >= 0;
         ASResult result      = isValid ? resolved.Result : null;
         if (result != null && !result.IsNull())
         {
             var validator = CommandFactoryProvider.GetFactory(result)?.GetValidator(typeof(Rename))
                             ?? CommandFactoryProvider.DefaultFactory.GetValidator(typeof(Rename));
             var isRenameable = validator(result);
             this.refactorContextMenu.RenameMenuItem.Enabled = isRenameable;
             this.refactorMainMenu.RenameMenuItem.Enabled    = isRenameable;
             var enabled = !result.IsPackage && (File.Exists(curFileName) || curFileName.Contains("[model]"));
             this.editorReferencesItem.Enabled = enabled;
             this.viewReferencesItem.Enabled   = enabled;
             if (result.InFile != null && result.InClass != null && (result.InClass.Flags & FlagType.Interface) == 0 && result.Member != null && result.Type != null)
             {
                 FlagType flags = result.Member.Flags;
                 if ((flags & FlagType.Variable) > 0 && (flags & FlagType.LocalVar) == 0 && (flags & FlagType.ParameterVar) == 0)
                 {
                     this.refactorContextMenu.DelegateMenuItem.Enabled = true;
                     this.refactorMainMenu.DelegateMenuItem.Enabled    = true;
                 }
             }
         }
         else
         {
             this.refactorMainMenu.RenameMenuItem.Enabled    = false;
             this.refactorContextMenu.RenameMenuItem.Enabled = false;
             this.editorReferencesItem.Enabled = false;
             this.viewReferencesItem.Enabled   = false;
         }
         IASContext context = ASContext.Context;
         if (context != null && context.CurrentModel != null)
         {
             bool enabled = langIsValid && context.CurrentModel.Imports.Count > 0;
             this.refactorContextMenu.OrganizeMenuItem.Enabled = enabled;
             this.refactorContextMenu.TruncateMenuItem.Enabled = enabled;
             this.refactorMainMenu.OrganizeMenuItem.Enabled    = enabled;
             this.refactorMainMenu.TruncateMenuItem.Enabled    = enabled;
         }
         refactorMainMenu.MoveMenuItem.Enabled                         = false;
         refactorContextMenu.MoveMenuItem.Enabled                      = false;
         this.surroundContextMenu.Enabled                              = false;
         this.refactorMainMenu.SurroundMenu.Enabled                    = false;
         this.refactorMainMenu.ExtractMethodMenuItem.Enabled           = false;
         this.refactorContextMenu.ExtractMethodMenuItem.Enabled        = false;
         this.refactorMainMenu.ExtractLocalVariableMenuItem.Enabled    = false;
         this.refactorContextMenu.ExtractLocalVariableMenuItem.Enabled = false;
         if (document != null && document.IsEditable && langIsValid)
         {
             bool isValidFile = IsValidFile(curFileName);
             refactorMainMenu.MoveMenuItem.Enabled    = isValidFile;
             refactorContextMenu.MoveMenuItem.Enabled = isValidFile;
             var sci = document.SciControl;
             if (sci.SelTextSize > 0)
             {
                 if (!sci.PositionIsOnComment(sci.SelectionStart) || !sci.PositionIsOnComment(sci.SelectionEnd))
                 {
                     this.surroundContextMenu.Enabled                       = true;
                     this.refactorMainMenu.SurroundMenu.Enabled             = true;
                     this.refactorMainMenu.ExtractMethodMenuItem.Enabled    = true;
                     this.refactorContextMenu.ExtractMethodMenuItem.Enabled = true;
                 }
                 if (context != null)
                 {
                     var declAtSelStart = context.GetDeclarationAtLine(sci.LineFromPosition(sci.SelectionStart));
                     var declAtSelEnd   = context.GetDeclarationAtLine(sci.LineFromPosition(sci.SelectionEnd));
                     if (declAtSelStart != null && declAtSelStart.Member != null && (declAtSelStart.Member.Flags & FlagType.Function) > 0 &&
                         declAtSelEnd != null && declAtSelStart.Member.Equals(declAtSelEnd.Member))
                     {
                         this.refactorMainMenu.ExtractLocalVariableMenuItem.Enabled    = true;
                         this.refactorContextMenu.ExtractLocalVariableMenuItem.Enabled = true;
                     }
                 }
             }
         }
         this.refactorMainMenu.CodeGeneratorMenuItem.Enabled    = isValid;
         this.refactorContextMenu.CodeGeneratorMenuItem.Enabled = isValid;
     }
     catch { }
 }
Пример #7
0
 /// <summary>
 /// Updates the state of the menu items
 /// </summary>
 private void UpdateMenuItems()
 {
     try
     {
         this.refactorMainMenu.DelegateMenuItem.Enabled    = false;
         this.refactorContextMenu.DelegateMenuItem.Enabled = false;
         bool            langIsValid = RefactoringHelper.GetLanguageIsValid();
         ResolvedContext resolved    = ASComplete.CurrentResolvedContext;
         bool            isValid     = langIsValid && resolved != null && resolved.Position >= 0;
         ASResult        result      = isValid ? resolved.Result : null;
         if (result != null && !result.IsNull())
         {
             bool isRenameable = (result.Member != null && RefactoringHelper.ModelFileExists(result.Member.InFile) && !RefactoringHelper.IsUnderSDKPath(result.Member.InFile)) ||
                                 (result.Type != null && RefactoringHelper.ModelFileExists(result.Type.InFile) && !RefactoringHelper.IsUnderSDKPath(result.Type.InFile)) ||
                                 (RefactoringHelper.ModelFileExists(result.InFile) && !RefactoringHelper.IsUnderSDKPath(result.InFile)) ||
                                 result.IsPackage;
             this.refactorContextMenu.RenameMenuItem.Enabled = isRenameable;
             this.refactorMainMenu.RenameMenuItem.Enabled    = isRenameable;
             bool isNotPackage = !result.IsPackage;
             this.editorReferencesItem.Enabled = isNotPackage;
             this.viewReferencesItem.Enabled   = isNotPackage;
             if (result.Member != null && result.Type != null && result.InClass != null && result.InFile != null)
             {
                 FlagType flags = result.Member.Flags;
                 if ((flags & FlagType.Variable) > 0 && (flags & FlagType.LocalVar) == 0 && (flags & FlagType.ParameterVar) == 0)
                 {
                     this.refactorContextMenu.DelegateMenuItem.Enabled = true;
                     this.refactorMainMenu.DelegateMenuItem.Enabled    = true;
                 }
             }
         }
         else
         {
             this.refactorMainMenu.RenameMenuItem.Enabled    = false;
             this.refactorContextMenu.RenameMenuItem.Enabled = false;
             this.editorReferencesItem.Enabled = false;
             this.viewReferencesItem.Enabled   = false;
         }
         IASContext context = ASContext.Context;
         if (context != null && context.CurrentModel != null)
         {
             bool truncate = langIsValid && context.CurrentModel.Imports.Count > 0;
             bool organize = (langIsValid && context.CurrentModel.Imports.Count > 1);
             this.refactorContextMenu.OrganizeMenuItem.Enabled = organize;
             this.refactorContextMenu.TruncateMenuItem.Enabled = truncate;
             this.refactorMainMenu.OrganizeMenuItem.Enabled    = organize;
             this.refactorMainMenu.TruncateMenuItem.Enabled    = truncate;
         }
         this.surroundContextMenu.Enabled                              = false;
         this.refactorMainMenu.SurroundMenu.Enabled                    = false;
         this.refactorContextMenu.ExtractMethodMenuItem.Enabled        = false;
         this.refactorContextMenu.ExtractLocalVariableMenuItem.Enabled = false;
         this.refactorMainMenu.ExtractMethodMenuItem.Enabled           = false;
         this.refactorMainMenu.ExtractLocalVariableMenuItem.Enabled    = false;
         ITabbedDocument document = PluginBase.MainForm.CurrentDocument;
         if (document != null && document.IsEditable && langIsValid && document.SciControl.SelTextSize > 1)
         {
             Int32 selEnd   = document.SciControl.SelectionEnd;
             Int32 selStart = document.SciControl.SelectionStart;
             if (!document.SciControl.PositionIsOnComment(selEnd) || !document.SciControl.PositionIsOnComment(selStart))
             {
                 this.surroundContextMenu.Enabled                              = true;
                 this.refactorMainMenu.SurroundMenu.Enabled                    = true;
                 this.refactorContextMenu.ExtractMethodMenuItem.Enabled        = true;
                 this.refactorMainMenu.ExtractMethodMenuItem.Enabled           = true;
                 this.refactorContextMenu.ExtractLocalVariableMenuItem.Enabled = true;
                 this.refactorMainMenu.ExtractLocalVariableMenuItem.Enabled    = true;
             }
         }
         this.refactorContextMenu.CodeGeneratorMenuItem.Enabled = isValid;
         this.refactorMainMenu.CodeGeneratorMenuItem.Enabled    = isValid;
     }
     catch {}
 }