Example #1
0
        public static ValueList From(Value value)
        {
            if (value.IsString())
            {
                var s    = value.AsString().GetValue();
                var list = new ValueList();
                for (int i = 0; i < s.Length; i++)
                {
                    list.AddItem(new ValueString(s.Substring(i, 1)));
                }

                return(list);
            }

            if (value.IsObject())
            {
                var list = new ValueList();
                foreach (var member in value.AsObject().value.Keys)
                {
                    list.AddItem(new ValueString(member));
                }
                return(list);
            }

            return(value.AsList());
        }
Example #2
0
        public TestCaseInterpreter WithList(string varname, params int[] values)
        {
            var list = new ValueList();

            foreach (var value in values)
            {
                list.AddItem(new ValueInt(value));
            }

            With(varname, list);
            return(this);
        }
Example #3
0
        static void Main(string[] args)
        {
            try
            {
                if (args.Length == 0)
                {
                    Console.Error.WriteLine("Syntax: ckl-run-dotnet [--secure] [--legacy] scriptname [scriptargs...]");
                    System.Environment.Exit(1);
                }

                var    secure     = false;
                var    legacy     = false;
                string scriptname = null;
                var    scriptargs = new ValueList();

                var in_options = true;
                foreach (var arg in args)
                {
                    if (in_options)
                    {
                        if (arg == "--secure")
                        {
                            secure = true;
                        }
                        else if (arg == "--legacy")
                        {
                            legacy = true;
                        }
                        else if (arg.StartsWith("--"))
                        {
                            Console.Error.WriteLine("Unknown option " + arg);
                            System.Environment.Exit(1);
                        }
                        else
                        {
                            in_options = false;
                            scriptname = arg;
                        }
                    }
                    else
                    {
                        scriptargs.AddItem(new ValueString(arg));
                    }
                }

                if (scriptname == null)
                {
                    Console.Error.WriteLine("Syntax: ckl-run-dotnet [--secure] [--legacy] scriptname [scriptargs...]");
                    System.Environment.Exit(1);
                }

                if (!File.Exists(scriptname))
                {
                    Console.Error.WriteLine("File not found " + scriptname);
                    System.Environment.Exit(1);
                }

                var interpreter = new Interpreter(secure, legacy);
                interpreter.SetStandardInput(Console.In);
                interpreter.SetStandardOutput(Console.Out);
                interpreter.GetEnvironment().Put("scriptname", new ValueString(scriptname));
                interpreter.GetEnvironment().Put("args", scriptargs);
                var value = interpreter.Interpret(File.ReadAllText(scriptname, Encoding.UTF8), scriptname);
                if (value.IsReturn())
                {
                    value = value.AsReturn().value;
                }
                if (value != ValueNull.NULL)
                {
                    Console.Out.WriteLine(value);
                }
            } catch (ControlErrorException e) {
                Console.Out.WriteLine("ERR: " + e.GetErrorValue().AsString().GetValue() + " (Line " + e.GetPos() + ")");
                Console.Out.WriteLine(e.GetStacktrace().ToString());
            } catch (SyntaxError e) {
                Console.Out.WriteLine(e.Message + (e.GetPos() != null ? " (Line " + e.GetPos() + ")" : ""));
            } catch (Exception e) {
                Console.Out.WriteLine(e.Message);
            }
        }
Example #4
0
        static void Main(string[] args)
        {
            var secure = false;
            var legacy = false;

            foreach (var arg in args)
            {
                if (arg == "--secure")
                {
                    secure = true;
                }
                if (arg == "--legacy")
                {
                    legacy = true;
                }
            }
            var interpreter = new Interpreter(secure, legacy);

            interpreter.SetStandardInput(Console.In);
            interpreter.SetStandardOutput(Console.Out);
            var modulepath = new ValueList();

            foreach (var arg in args)
            {
                if (arg.StartsWith("-I"))
                {
                    modulepath.AddItem(new ValueString(arg.Substring(2)));
                }
            }
            modulepath.MakeReadonly();
            interpreter.GetEnvironment().Put("checkerlang_module_path", modulepath);
            foreach (var arg in args)
            {
                if (arg.StartsWith("--"))
                {
                    continue;
                }
                if (arg.StartsWith("-I"))
                {
                    continue;
                }
                interpreter.Interpret(File.ReadAllText(arg, Encoding.UTF8), arg);
            }
            Console.Write("> ");
            var line = Console.ReadLine();

            while (line != "exit")
            {
                try
                {
                    Parser.Parse(line, "{stdin}");
                }
                catch (SyntaxError e)
                {
                    if (e.Message.StartsWith("Unexpected end of input"))
                    {
                        Console.Write("+ ");
                        line += "\n" + Console.ReadLine();
                        continue;
                    }
                }
                catch (Exception)
                {
                    Console.Write("+ ");
                    line += "\n" + Console.ReadLine();
                    continue;
                }

                if (!line.Equals(";"))
                {
                    try
                    {
                        var value = interpreter.Interpret(line, "{stdin}");
                        if (value.IsReturn())
                        {
                            value = value.AsReturn().value;
                        }
                        if (value != ValueNull.NULL)
                        {
                            Console.WriteLine(value);
                        }
                    }
                    catch (ControlErrorException e)
                    {
                        Console.WriteLine("ERR: " + e.GetErrorValue().AsString().GetValue() + " (Line " + e.GetPos() + ")");
                        Console.WriteLine(e.GetStacktrace().ToString());
                    }
                    catch (SyntaxError e)
                    {
                        Console.WriteLine(e.Message + (e.GetPos() != null ? " (Line " + e.GetPos() + ")" : ""));
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }

                Console.Write("> ");
                line = Console.ReadLine();
            }
        }
Example #5
0
        public static ValueList From(Value value, string what)
        {
            if (value.IsString())
            {
                var s    = value.AsString().GetValue();
                var list = new ValueList();
                for (int i = 0; i < s.Length; i++)
                {
                    list.AddItem(new ValueString(s.Substring(i, 1)));
                }

                return(list);
            }

            if (value.IsMap() && what == "keys")
            {
                var list = new ValueList();
                foreach (var member in value.AsMap().GetValue().Keys)
                {
                    list.AddItem(member);
                }
                return(list);
            }

            if (value.IsMap() && what == "entries")
            {
                var list = new ValueList();
                foreach (var entry in value.AsMap().GetValue())
                {
                    var element = new ValueList();
                    element.AddItem(entry.Key);
                    element.AddItem(entry.Value);
                    list.AddItem(element);
                }
                return(list);
            }

            if (value.IsObject() && what == "keys")
            {
                var list = new ValueList();
                foreach (var member in value.AsObject().value.Keys)
                {
                    list.AddItem(new ValueString(member));
                }
                return(list);
            }

            if (value.IsObject() && what == "values")
            {
                var list = new ValueList();
                foreach (var member in value.AsObject().value.Values)
                {
                    list.AddItem(member);
                }
                return(list);
            }

            if (value.IsObject() && what == "entries")
            {
                var list = new ValueList();
                foreach (var member in value.AsObject().value)
                {
                    var element = new ValueList();
                    element.AddItem(new ValueString(member.Key));
                    element.AddItem(member.Value);
                    list.AddItem(element);
                }
                return(list);
            }

            if (value.IsObject())
            {
                var list = new ValueList();
                foreach (var member in value.AsObject().value.Keys)
                {
                    list.AddItem(new ValueString(member));
                }
                return(list);
            }

            return(value.AsList());
        }