diff --git a/StepLang/Framework/Pure/ContainsKeyFunction.cs b/StepLang/Framework/Pure/ContainsKeyFunction.cs new file mode 100644 index 00000000..b1dd3343 --- /dev/null +++ b/StepLang/Framework/Pure/ContainsKeyFunction.cs @@ -0,0 +1,22 @@ +using StepLang.Expressions.Results; +using StepLang.Interpreting; +using StepLang.Tokenizing; + +namespace StepLang.Framework.Pure; + +public class ContainsKeyFunction : GenericFunction +{ + public const string Identifier = "containsKey"; + + protected override IEnumerable NativeParameters { get; } = new NativeParameter[] { + new(OnlyMap, "subject"), + new(OnlyString, "key"), + }; + + protected override IEnumerable ReturnTypes { get; } = OnlyBool; + + protected override BoolResult Invoke(TokenLocation callLocation, Interpreter interpreter, MapResult argument1, StringResult argument2) + { + return argument1.Value.ContainsKey(argument2.Value); + } +} diff --git a/StepLang/Interpreting/Scope.cs b/StepLang/Interpreting/Scope.cs index b67f2981..7c18d249 100644 --- a/StepLang/Interpreting/Scope.cs +++ b/StepLang/Interpreting/Scope.cs @@ -39,6 +39,7 @@ private Scope() CreateVariable(SubstringFunction.Identifier, new SubstringFunction().ToResult()); CreateVariable(IndexOfFunction.Identifier, new IndexOfFunction().ToResult()); CreateVariable(ContainsFunction.Identifier, new ContainsFunction().ToResult()); + CreateVariable(ContainsKeyFunction.Identifier, new ContainsKeyFunction().ToResult()); CreateVariable(StartsWithFunction.Identifier, new StartsWithFunction().ToResult()); CreateVariable(EndsWithFunction.Identifier, new EndsWithFunction().ToResult()); CreateVariable(PrintFunction.Identifier, new PrintFunction().ToResult());