public override string Convert(LuaSkeleton.LuaSkeleton lua, string assignTo, List <IExpression> args) { var arg = args[0]; var v = lua.FreeVar("v"); var vLua = new LuaLiteral(Typs.String, v); var mappings = new List <string>(); foreach (var kv in _mapping.StringToResultFunctions) { var f = kv.Value; if (f.Types.First() is Curry) { f = f.Apply(vLua); } mappings.Add("if (" + v + " == \"" + kv.Key + "\") then\n " + assignTo + " = " + lua.ToLua(f)); } return(Utils.Lines( "local " + v, Snippets.Convert(lua, v, arg), string.Join("\nelse", mappings), "end" )); }
public void FirstOfSnippet_SimpleFirstOf_GetLua() { var gen = new FirstMatchOfSnippet(); var lua = new LuaSkeleton(new Context(), true); // FirstMatchOf: [a] -> (Tags -> [a]) -> Tags -> a // Order: [string] var order = new Constant(new List <IExpression> { new Constant("bicycle"), new Constant("access") }); // Func: (Tags -> [a]) var func = new Apply( Funcs.StringStringToTags, new Mapping( new[] { "bicycle", "access" }, new IExpression[] { Funcs.Id, Funcs.Id } ) ); var tags = new LuaLiteral(new[] { Typs.Tags }, "tags"); var code = gen.Convert(lua, "result", new List <IExpression> { order, func, tags } ); // First the more general ones! Assert.Equal( "if (tags[\"access\"] ~= nil) then\n result = tags[\"access\"]\n \nend\nif (tags[\"bicycle\"] ~= nil) then\n result = tags[\"bicycle\"]\n \nend\n", code); }