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); }
/// <summary> /// Cursor position changed and word at this position was resolved /// </summary> private void OnResolvedContextChanged(ResolvedContext resolved) { this.UpdateMenuItems(); }
/// <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 {} }
/// <summary> /// Cursor position changed and word at this position was resolved /// </summary> void OnResolvedContextChanged(ResolvedContext resolved) => UpdateMenuItems();
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 { } }
/// <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 {} }