Skip to content

Commit

Permalink
changed macro API to final version (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
Unknown6656 committed Mar 17, 2021
1 parent 093175a commit 3e47ace
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 33 deletions.
16 changes: 8 additions & 8 deletions new/AutoItInterpreter/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@

//////////////////////////////////////////////////////////////////////////
// Auto-generated 2021-03-17 11:58:15.340 //
// Auto-generated 2021-03-17 16:45:30.620 //
// ANY CHANGES TO THIS DOCUMENT WILL BE LOST UPON RE-GENERATION //
//////////////////////////////////////////////////////////////////////////

using System.Reflection;
using System;

[assembly: AssemblyVersion("0.8.1827.7552")]
[assembly: AssemblyFileVersion("0.8.1827.7552")]
[assembly: AssemblyInformationalVersion("v.0.8.1827.7552, commit: 251c9289c29fb2c652e005f83a6637a7c92f1696")]
[assembly: AssemblyVersion("0.8.1832.7552")]
[assembly: AssemblyFileVersion("0.8.1832.7552")]
[assembly: AssemblyInformationalVersion("v.0.8.1832.7552, commit: 093175aa78cffb8d1dcad6b44e2a9cfef2ca5cfa")]
[assembly: AssemblyCompany("Unknown6656")]
[assembly: AssemblyCopyright("Copyright © 2018 - 2021, Unknown6656")]
[assembly: AssemblyProduct("AutoIt-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.8.1827.7552");
public static Version? InterpreterVersion { get; } = Version.Parse("0.8.1832.7552");
/// <summary>
/// The Git hash associated with the current build.
/// </summary>
public const string GitHash = "251c9289c29fb2c652e005f83a6637a7c92f1696";
public const string GitHash = "093175aa78cffb8d1dcad6b44e2a9cfef2ca5cfa";
/// <summary>
/// The name of the GitHub repository associated with <see cref="RepositoryURL"/>.
/// </summary>
Expand All @@ -49,7 +49,7 @@ public static class __module__
/// </summary>
public const string RepositoryURL = "https://github.com/Unknown6656/AutoIt-Interpreter";
/// <summary>
/// The date and time of the current build (2021-03-17 11:58:15.340).
/// The date and time of the current build (2021-03-17 16:45:30.620).
/// </summary>
public static DateTime DateBuilt { get; } = DateTime.FromFileTimeUtc(0x01d71b1c6e3f7721L);
public static DateTime DateBuilt { get; } = DateTime.FromFileTimeUtc(0x01d71b448f4672d3L);
}
28 changes: 14 additions & 14 deletions new/AutoItInterpreter/Extensibility/AbstractPlugins.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,35 +146,35 @@ protected AbstractMacroProvider(Interpreter interpreter)
{
}

public abstract bool ProvideMacroValue(CallFrame frame, string name, out Variant? value);
public abstract bool ProvideMacroValue(CallFrame frame, string name, out (Variant value, Metadata metadata)? macro);
}

public abstract class AbstractKnownMacroProvider
: AbstractMacroProvider
{
public abstract Dictionary<string, Func<CallFrame, Variant>> KnownMacros { get; }
internal readonly Dictionary<string, (Func<CallFrame, Variant> function, Metadata metadata)> _known_macros;


public AbstractKnownMacroProvider(Interpreter interpreter)
: base(interpreter)
{
}
: base(interpreter) => _known_macros = new();

internal void RegisterAllMacros()
{
foreach ((string name, Func<CallFrame, Variant> provider) in KnownMacros)
Interpreter.MacroResolver.AddKnownMacro(new KnownMacro(Interpreter, name, provider));
}
protected void RegisterMacro(string name, Variant value) => RegisterMacro(name, _ => value);

protected void RegisterMacro(string name, Variant value, Metadata metadata) => RegisterMacro(name, _ => value, metadata);

protected void RegisterMacro(string name, Func<CallFrame, Variant> provider) => RegisterMacro(name, provider, Metadata.Default);

protected void RegisterMacro(string name, Func<CallFrame, Variant> provider, Metadata metadata) => _known_macros[name] = (provider, metadata);

public override bool ProvideMacroValue(CallFrame frame, string name, out Variant? value)
public override bool ProvideMacroValue(CallFrame frame, string name, out (Variant value, Metadata metadata)? macro)
{
value = null;
macro = null;
name = name.TrimStart('@');

foreach ((string key, Func<CallFrame, Variant> provider) in KnownMacros)
foreach ((string key, (Func<CallFrame, Variant> provider, Metadata metadata)) in _known_macros)
if (key.Equals(name, StringComparison.InvariantCultureIgnoreCase))
{
value = provider(frame);
macro = (provider(frame), metadata);

return true;
}
Expand Down
4 changes: 3 additions & 1 deletion new/AutoItInterpreter/Extensibility/PluginLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,11 @@ public void LoadPlugins()
TryRegister(type, location, _macro_providers);
});


foreach (AbstractMacroProvider plugin in _macro_providers)
if (plugin is AbstractKnownMacroProvider provider)
provider.RegisterAllMacros();
foreach ((string name, (Func<CallFrame, Variant> func, Metadata meta)) in provider._known_macros)
Interpreter.MacroResolver.AddKnownMacro(new KnownMacro(Interpreter, name, func) { Metadata = meta });
}

private void TryRegister<T>(Type type, FileInfo location, List<T> plugin_list)
Expand Down
2 changes: 1 addition & 1 deletion new/AutoItInterpreter/Runtime/CallFrame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1666,7 +1666,7 @@ Union<Variant[], InterpreterError> ProcessRawArguments(FSharpList<EXPRESSION> ra

private FunctionReturnValue ProcessMacro(MACRO macro)
{
if (Interpreter.MacroResolver.GetTryValue(this, macro.Name, out Variant value))
if (Interpreter.MacroResolver.GetTryValue(this, macro.Name, out Variant value, out _))
return value;
else
return WellKnownError("error.unknown_macro", macro.Name);
Expand Down
18 changes: 11 additions & 7 deletions new/AutoItInterpreter/Runtime/Macro.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System;

using Unknown6656.AutoIt3.Extensibility;
using System.Diagnostics.CodeAnalysis;

namespace Unknown6656.AutoIt3.Runtime
{
Expand Down Expand Up @@ -34,7 +35,7 @@ internal Macro(Interpreter interpreter, string name)

public virtual Variant GetValue(CallFrame frame)
{
Interpreter.MacroResolver.GetTryValue(frame, this, out Variant value);
Interpreter.MacroResolver.GetTryValue(frame, this, out Variant value, out _);

return value;
}
Expand Down Expand Up @@ -78,29 +79,32 @@ public sealed class MacroResolver

internal void AddKnownMacro(KnownMacro macro) => _macros.Add(macro);

public bool HasMacro(CallFrame frame, string macro_name) => GetTryValue(frame, macro_name, out _);
public bool HasMacro(CallFrame frame, string macro_name) => GetTryValue(frame, macro_name, out _, out _);

public bool HasMacro(CallFrame frame, Macro macro) => GetTryValue(frame, macro, out _);
public bool HasMacro(CallFrame frame, Macro macro) => GetTryValue(frame, macro, out _, out _);

public bool GetTryValue(CallFrame frame, Macro macro, out Variant value) => GetTryValue(frame, macro.Name, out value);
public bool GetTryValue(CallFrame frame, Macro macro, out Variant value, [NotNullWhen(true)] out Metadata? metadata) =>
GetTryValue(frame, macro.Name, out value, out metadata);

public bool GetTryValue(CallFrame frame, string macro_name, out Variant value)
public bool GetTryValue(CallFrame frame, string macro_name, out Variant value, [NotNullWhen(true)] out Metadata? metadata)
{
value = Variant.Null;
metadata = null;
macro_name = macro_name.TrimStart('@');

foreach (KnownMacro macro in _macros)
if (macro.Name.Equals(macro_name, StringComparison.InvariantCultureIgnoreCase))
{
value = macro.GetValue(frame);
metadata = macro.Metadata;

return true;
}

foreach (AbstractMacroProvider provider in Interpreter.PluginLoader.MacroProviders)
if (provider.ProvideMacroValue(frame, macro_name, out Variant? v) && v.HasValue)
if (provider.ProvideMacroValue(frame, macro_name, out (Variant value, Metadata meta)? v) && v.HasValue)
{
value = v.Value;
(value, metadata) = v.Value;

return true;
}
Expand Down
8 changes: 8 additions & 0 deletions new/AutoItInterpreter/Runtime/Metadata.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ public record Metadata(OS SupportedPlatforms, bool IsDeprecated)
{
public static Metadata Default { get; } = new();

public static Metadata Deprecated { get; } = new(OS.Any, true);

public static Metadata WindowsOnly { get; } = new(OS.Windows, false);

public static Metadata MacOSOnly { get; } = new(OS.MacOS, false);
Expand All @@ -21,5 +23,11 @@ public Metadata()
}

public bool SupportsPlatfrom(OS platform) => SupportedPlatforms.HasFlag(platform);

public static Metadata operator +(Metadata m1, Metadata m2) => m1 | m2;

public static Metadata operator |(Metadata m1, Metadata m2) => new(m1.SupportedPlatforms | m2.SupportedPlatforms, m1.IsDeprecated | m2.IsDeprecated);

public static Metadata operator &(Metadata m1, Metadata m2) => new(m1.SupportedPlatforms & m2.SupportedPlatforms, m1.IsDeprecated & m2.IsDeprecated);
}
}
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.8.1827.7552
251c9289c29fb2c652e005f83a6637a7c92f1696
0.8.1832.7552
093175aa78cffb8d1dcad6b44e2a9cfef2ca5cfa

0 comments on commit 3e47ace

Please sign in to comment.