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"
                       ));
        }
Esempio n. 2
0
        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);
        }