예제 #1
0
 public static void Setup(TestContext context)
 {
     TypeInfoProvider.GetGlobal().AddFunction("print", (a) => {
         context.WriteLine((string)a[0]);
         return(null);
     }, null, new Type[] { typeof(string) });
 }
예제 #2
0
        public void Parsing()
        {
            Enviroment enviroment = new Enviroment(TypeInfoProvider.GetGlobal());
            var        block      = TokenParser.Parse("\"Comment\" .\nprint IN string 25 . .\nprint IN add \"Hello\" \"world\" . .\n  mul 5 10 , string , add \" = 25\" , print .", enviroment, CodePosition.GetExternal());
            var        statements = block.GetSyntaxNodes();

            Assert.AreEqual(statements.Count, 4);
        }
예제 #3
0
        public void VariableTypeSafetyInCode()
        {
            Enviroment enviroment = new Enviroment(TypeInfoProvider.GetGlobal());

            enviroment.StartBlock(CodePosition.GetExternal());
            enviroment.DefineVariable("x", typeof(string), CodePosition.GetExternal());
            TokenParser.Parse("x= 0 .", enviroment, CodePosition.GetExternal());
            enviroment.EndBlock();
        }
예제 #4
0
        public void VariableRedefinitionFail()
        {
            Enviroment enviroment = new Enviroment(TypeInfoProvider.GetGlobal());

            enviroment.StartBlock(CodePosition.GetExternal());
            enviroment.DefineVariable("x", typeof(int), CodePosition.GetExternal());
            enviroment.DefineVariable("x", typeof(int), CodePosition.GetExternal());
            enviroment.EndBlock();
        }
예제 #5
0
        public void RunTheExampleFile()
        {
            var        text       = System.IO.File.ReadAllText("../../../Examples/example.ws");
            Enviroment enviroment = new Enviroment(TypeInfoProvider.GetGlobal());
            var        block      = TokenParser.Parse(text, enviroment, CodePosition.GetExternal());

            block.Validate(enviroment);
            Assert.AreEqual(typeof(string), block.ReturnType);
            Assert.AreEqual("aaaab", block.Evaluate());
        }
예제 #6
0
        public void VariableDefinition()
        {
            Enviroment enviroment = new Enviroment(TypeInfoProvider.GetGlobal());

            enviroment.StartBlock(CodePosition.GetExternal());
            Assert.IsNull(enviroment.GetVariable("y"));
            enviroment.DefineVariable("x", typeof(int), CodePosition.GetExternal());
            Assert.IsNotNull(enviroment.GetVariable("x"));
            enviroment.EndBlock();
        }
예제 #7
0
        public void VariablesInCode()
        {
            Enviroment enviroment = new Enviroment(TypeInfoProvider.GetGlobal());

            enviroment.StartBlock(CodePosition.GetExternal());
            enviroment.DefineVariable("x", typeof(int), CodePosition.GetExternal());
            TokenParser.Parse("DEFINE:y:int . &y . y= 0 . &x . x= &y .", enviroment, CodePosition.GetExternal(), true);

            Assert.IsNotNull(enviroment.GetVariable("y"));
            Assert.AreEqual(enviroment.GetVariable("y").Type, typeof(int));
            enviroment.EndBlock();
        }
예제 #8
0
        public void VariableInheritance()
        {
            Enviroment enviroment = new Enviroment(TypeInfoProvider.GetGlobal());

            enviroment.StartBlock(CodePosition.GetExternal());
            var xOut = enviroment.DefineVariable("x", typeof(string), CodePosition.GetExternal());
            var yOut = enviroment.DefineVariable("y", typeof(int), CodePosition.GetExternal());

            enviroment.StartBlock(CodePosition.GetExternal());
            Assert.AreEqual(yOut, enviroment.GetVariable("y"));
            Assert.AreEqual(xOut, enviroment.GetVariable("x"));
            var yInner = enviroment.DefineVariable("y", typeof(string), CodePosition.GetExternal());
            var zInner = enviroment.DefineVariable("z", typeof(string), CodePosition.GetExternal());

            Assert.AreNotEqual(yOut, enviroment.GetVariable("y"));
            enviroment.EndBlock();
            Assert.AreEqual(yOut, enviroment.GetVariable("y"));
            Assert.IsNull(enviroment.GetVariable("z"));

            enviroment.EndBlock();
        }
예제 #9
0
 static void Main(string[] args)
 {
     enviroment = new Enviroment(TypeInfoProvider.GetGlobal());
     enviroment.provider.MapType(typeof(Console));
     if (args.Length == 0 || args[0][0] == '#')
     {
         Console.WriteLine("WordScript REPL\nCopyright (C) Branislav Trstenský 2019\n");
         while (true)
         {
             Console.Write("> ");
             var input = Console.ReadLine();
             Run(input);
         }
     }
     else
     {
         file = Path.GetFileName(args[0]);
         Run(File.ReadAllText(args[0]));
         Console.Read();
     }
 }