Skip to content

Commit

Permalink
Added OnAutoItExitRegister/Unregister functions (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
Unknown6656 committed Jul 22, 2020
1 parent ac2e92e commit a52df02
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 14 deletions.
12 changes: 6 additions & 6 deletions new/AutoItInterpreter/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@

//////////////////////////////////////////////////////////////////////////
// Auto-generated 2020-07-22 18:43:38.353 //
// Auto-generated 2020-07-22 19:11:54.040 //
// ANY CHANGES TO THIS DOCUMENT WILL BE LOST UPON RE-GENERATION //
//////////////////////////////////////////////////////////////////////////

using System.Reflection;
using System;

[assembly: AssemblyVersion("0.6.1210.7324")]
[assembly: AssemblyFileVersion("0.6.1210.7324")]
[assembly: AssemblyInformationalVersion("81dea96d7ef5ab47e64484df7b78269616e64bf7")]
[assembly: AssemblyVersion("0.6.1212.7324")]
[assembly: AssemblyFileVersion("0.6.1212.7324")]
[assembly: AssemblyInformationalVersion("ac2e92e91367c892f8971012422cc9691e1ebdcd")]
[assembly: AssemblyCompany("Unknown6656")]
[assembly: AssemblyCopyright("Copyright © 2018 - 2020, Unknown6656")]
[assembly: AssemblyProduct("AutoIt3 Interpreter by Unknown6656")]
Expand All @@ -35,11 +35,11 @@ public static class __module__
/// <summary>
/// The interpreter's current version.
/// </summary>
public static Version? InterpreterVersion { get; } = Version.Parse("0.6.1210.7324");
public static Version? InterpreterVersion { get; } = Version.Parse("0.6.1212.7324");
/// <summary>
/// The Git hash associated with the current build.
/// </summary>
public static string GitHash { get; } = "81dea96d7ef5ab47e64484df7b78269616e64bf7";
public static string GitHash { get; } = "ac2e92e91367c892f8971012422cc9691e1ebdcd";
/// <summary>
/// The URL of this project's Git(Hub) repository.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,8 @@ public sealed class FrameworkFunctions
//ProvidedNativeFunction.Create(nameof(ObjEvent), , ObjEvent),
ProvidedNativeFunction.Create(nameof(ObjGet), 1, 3, ObjGet, Variant.Default, Variant.Default),
ProvidedNativeFunction.Create(nameof(ObjName), 1, 2, ObjName, 1),
ProvidedNativeFunction.Create(nameof(OnAutoItExitRegister), 1, OnAutoItExitRegister),
ProvidedNativeFunction.Create(nameof(OnAutoItExitUnRegister), 1, OnAutoItExitUnRegister),
ProvidedNativeFunction.Create(nameof(Ping), 1, 2, Ping, 4_000),
ProvidedNativeFunction.Create(nameof(ProcessClose), 1, ProcessClose),
ProvidedNativeFunction.Create(nameof(ProcessExists), 1, ProcessExists),
Expand Down Expand Up @@ -1933,6 +1935,34 @@ internal static FunctionReturnValue ObjName(CallFrame frame, Variant[] args)
return FunctionReturnValue.Error(Variant.EmptyString, 1, Variant.Null);
}

internal static FunctionReturnValue OnAutoItExitRegister(CallFrame frame, Variant[] args)
{
Union<InterpreterError, AU3CallFrame> caller = GetAu3Caller(frame, nameof(OnAutoItExitRegister));

if (caller.Is(out AU3CallFrame? au3fame))
{
string func = args[0].IsFunction(out ScriptFunction? f) ? f.Name : args[0].ToString();

return (Variant)au3fame.CurrentFunction.Script.AddExitFunction(func, au3fame.CurrentLocation);
}
else
return Variant.False;
}

internal static FunctionReturnValue OnAutoItExitUnRegister(CallFrame frame, Variant[] args)
{
Union<InterpreterError, AU3CallFrame> caller = GetAu3Caller(frame, nameof(OnAutoItExitUnRegister));

if (caller.Is(out AU3CallFrame? au3fame))
{
string func = args[0].IsFunction(out ScriptFunction? f) ? f.Name : args[0].ToString();

return (Variant)au3fame.CurrentFunction.Script.RemoveExitFunction(func);
}
else
return Variant.False;
}

internal static unsafe FunctionReturnValue Ping(CallFrame frame, Variant[] args)
{
int err = 4;
Expand Down
2 changes: 1 addition & 1 deletion new/AutoItInterpreter/Runtime/Interpreter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ public void Dispose()
}

GlobalObjectStorage.Dispose();
GUIConnector.Dispose();
// GUIConnector.Dispose();
COMConnector?.Dispose();
}

Expand Down
23 changes: 18 additions & 5 deletions new/AutoItInterpreter/Runtime/ScriptScanner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -414,30 +414,43 @@ public sealed class ScannedScript

public ScannedScript(FileInfo location) => Location = location;

internal AU3Function GetOrCreateAU3Function(string name, IEnumerable<PARAMETER_DECLARATION>? @params)
public AU3Function GetOrCreateAU3Function(string name, IEnumerable<PARAMETER_DECLARATION>? @params)
{
_functions.TryGetValue(name.ToUpperInvariant(), out ScriptFunction? func);

return func as AU3Function ?? AddFunction(new AU3Function(this, name, @params));
}

internal T AddFunction<T>(T function) where T : ScriptFunction
public T AddFunction<T>(T function)
where T : ScriptFunction
{
_functions[function.Name.ToUpperInvariant()] = function;

return function;
}

public void AddStartupFunction(string name, SourceLocation decl) => AddFunction(name, decl, in _startup);
public bool AddStartupFunction(string name, SourceLocation decl) => AddFunction(name, decl, in _startup);

public void AddExitFunction(string name, SourceLocation decl) => AddFunction(name, decl, in _startup);
public bool AddExitFunction(string name, SourceLocation decl) => AddFunction(name, decl, in _startup);

private void AddFunction(string name, SourceLocation decl, in List<(string, SourceLocation)> list)
public bool RemoveStartupFunction(string name) => RemoveFunction(name, in _startup);

public bool RemoveExitFunction(string name) => RemoveFunction(name, in _startup);

private bool AddFunction(string name, SourceLocation decl, in List<(string, SourceLocation)> list)
{
if (!list.Any(t => string.Equals(t.Item1, name, StringComparison.InvariantCultureIgnoreCase)))
{
list.Add((name.ToUpperInvariant(), decl));

return true;
}
else
return false;
}

private bool RemoveFunction(string name, in List<(string, SourceLocation)> list) => list.RemoveAll(t => string.Equals(t.Item1, name, StringComparison.InvariantCultureIgnoreCase)) != 0;

public InterpreterError? LoadScript(CallFrame frame) => HandleLoading(frame, false);

public InterpreterError? UnLoadScript(CallFrame frame) => HandleLoading(frame, true);
Expand Down
4 changes: 2 additions & 2 deletions new/AutoItInterpreter/version.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
0.6.1210.7324
81dea96d7ef5ab47e64484df7b78269616e64bf7
0.6.1212.7324
ac2e92e91367c892f8971012422cc9691e1ebdcd

0 comments on commit a52df02

Please sign in to comment.