Exemplo n.º 1
0
        public void GenerateForLoop2()
        {
            string code = @"
            module bar:
            int Counter():
            int c = 0
            int i = 0
            for i in 1 to 10 step 2:
            c = c + 1
            return c
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }
            Assert.AreEqual(0, results.Errors.Count);

            var counterMethod = results.CompiledAssembly.GetType("bar").GetMethod("Counter");
            Assert.IsNotNull(counterMethod);

            int i = (int)counterMethod.Invoke(null, null);
            Assert.AreEqual(5, i);
        }
Exemplo n.º 2
0
        public void GenerateCharLiteral()
        {
            string code = @"
            module bar:
            char Get():
            char c = 'c'
            return c
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }
            Assert.AreEqual(0, results.Errors.Count);

            var counterMethod = results.CompiledAssembly.GetType("bar").GetMethod("Get");

            object o = counterMethod.Invoke(null, null);
            Assert.IsTrue(o is Char);
            Assert.AreEqual('c', (Char)o);
        }
Exemplo n.º 3
0
        public void GenerateMultipleSource2()
        {
            string code1 = @"
                                module bar:
                                    void foo():
                            ";

            string code2 = @"
                                module bar:
                                    void rawr():
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code1, code2);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }

            Assert.AreEqual(0, results.Errors.Count);
            Assert.IsTrue(results.CompiledAssembly.GetType("bar").GetMethod("foo").IsPublic);
            Assert.IsTrue(results.CompiledAssembly.GetType("bar").GetMethod("rawr").IsPublic);
        }
Exemplo n.º 4
0
        public void GenerateProperty1()
        {
            string code = @"
            module bar:

            int testproperty:
            get:
            return 1234
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.ReferencedAssemblies.Add("System.dll");
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            var assembly = results.CompiledAssembly;

            Assert.AreEqual(0, results.Errors.Count);

            Type t = assembly.GetType("bar");
            Assert.IsNotNull(t);

            var prop = t.GetProperty("testproperty");
            Assert.IsNotNull(prop);

            var method = prop.GetGetMethod();
            Assert.IsNotNull(method);
            Assert.IsTrue(method.IsPublic);
            Assert.IsTrue(method.IsStatic);

            int i = (int)method.Invoke(null, null);
            Assert.AreEqual(1234, i);
        }
Exemplo n.º 5
0
        public void ClassVariableTest1()
        {
            string code = @"
            class foo:
            int bar
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            Assert.AreEqual(0, results.Errors.Count);

            Type t = results.CompiledAssembly.GetType("foo");
            Assert.IsNotNull(t);

            var variable = t.GetField("bar", BindingFlags.NonPublic | BindingFlags.Instance);
            Assert.IsNotNull(variable);
            Assert.IsTrue(variable.IsPrivate);

            var foo = Activator.CreateInstance(t);

            Assert.IsTrue(variable.GetValue(foo) is int);
        }
Exemplo n.º 6
0
        public void ExceptionHandler1()
        {
            string code = @"
            import System

            module foo:
            int bar():
            int i = 1
            int zero = 0
            try:
            i /= zero
            catch Exception e:
            Console.WriteLine(ex)
            finally:
            i = 1234
            return i
            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            Assert.AreEqual(0, results.Errors.Count);

            Type foo = results.CompiledAssembly.GetType("foo");
            var method = foo.GetMethod("bar");
            int o = (int)method.Invoke(null, null);
            Assert.AreEqual(1234, o);
        }
Exemplo n.º 7
0
        public void GenerateDelegate5()
        {
            string code = @"
                                delegate int [] d(int [] d)
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            Assert.AreEqual(0, results.Errors.Count);
        }
Exemplo n.º 8
0
        public void GenerateThrow()
        {
            string code = @"
            import System

            module foo:
            int bar():
            throw new Exception()
            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            Assert.AreEqual(0, results.Errors.Count);
        }
Exemplo n.º 9
0
        public void SimpleInstantiation()
        {
            string code = @"
            import System

            class foo:
            void bar():
            var f = new foo()
            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            Assert.AreEqual(0, results.Errors.Count);
        }
Exemplo n.º 10
0
        public void GenerateProperty2()
        {
            string code = @"
            class bar:

            int i

            int testproperty:
            get:
            return i
            set:
            i = value
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.ReferencedAssemblies.Add("System.dll");
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            var assembly = results.CompiledAssembly;

            Assert.AreEqual(0, results.Errors.Count);

            Type t = assembly.GetType("bar");
            Assert.IsNotNull(t);

            object inst = Activator.CreateInstance(t);

            var prop = t.GetProperty("testproperty");
            Assert.IsNotNull(prop);

            var setmethod = prop.GetSetMethod();
            Assert.IsNotNull(setmethod);
            Assert.IsTrue(setmethod.IsPublic);
            Assert.IsFalse(setmethod.IsStatic);
            setmethod.Invoke(inst, new object[]{1234});

            var getmethod = prop.GetGetMethod();
            Assert.IsNotNull(getmethod);

            int i = (int)getmethod.Invoke(inst, null);
            Assert.AreEqual(1234, i);
        }
Exemplo n.º 11
0
        public void GenerateClassConstructor()
        {
            string code = @"
            class bar:
            new(int i):
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }

            Assert.AreEqual(0, results.Errors.Count);
        }
Exemplo n.º 12
0
        public void GenerateClassMethodDefault2()
        {
            string code = @"
            class bar:
            void foo(ref int i):
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }

            Assert.AreEqual(0, results.Errors.Count);
            Assert.IsTrue(results.CompiledAssembly.GetType("bar").GetMethod("foo").IsPublic);
        }
Exemplo n.º 13
0
        public void GeneratePrivateConstructor()
        {
            string code = @"
class bar:
    private new(int i):

module foo:
    void test():
        bar b = new bar(99)
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();

            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }

            Assert.AreEqual(1, results.Errors.Count);
        }
Exemplo n.º 14
0
        public void GenerateProperty4()
        {
            string code = @"
            import System.Collections.Generic
            module bar:

            List{int} testproperty:
            get:
            return null
            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            var assembly = results.CompiledAssembly;

            Assert.AreEqual(0, results.Errors.Count);
        }
Exemplo n.º 15
0
        public void GenerateClassInheritance2()
        {
            string code = @"
import System

abstract class Animal:

	protected String name

	new(String name):
		this.name = name

	abstract String Speak():


class Monkey(Animal):

	new(String name): base(name):

	override String Speak():
		return ""Ook ook!""


class Human(Monkey):

	new(String name): base(name):

	override String Speak():
		return ""Hello world! My name is "" + this.name + "".""
";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();

            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }

            Assert.AreEqual(0, results.Errors.Count);

            Type monkeyType = results.CompiledAssembly.GetType("Monkey");

            Assert.IsNotNull(monkeyType);

            var monkeyMethod = monkeyType.GetMethod("Speak");

            object monkey      = Activator.CreateInstance(monkeyType, "Jibbers");
            string monkeySpeak = (string)monkeyMethod.Invoke(monkey, null);

            Assert.AreEqual("Ook ook!", monkeySpeak);

            Type humanType = results.CompiledAssembly.GetType("Human");

            Assert.IsNotNull(humanType);
            var    humanMethod = humanType.GetMethod("Speak");
            object human       = Activator.CreateInstance(humanType, "Sir Harold Von Rabberdasher");
            string humanSpeak  = (string)humanMethod.Invoke(human, null);

            Assert.AreEqual("Hello world! My name is Sir Harold Von Rabberdasher.", humanSpeak);
        }
Exemplo n.º 16
0
        public void GenerateInstantiation()
        {
            string code = @"
            class bar:
            int number

            new(int number):
            this.number = number

            int GetNumber():
            return number
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }

            Assert.AreEqual(0, results.Errors.Count);

            var assembly = results.CompiledAssembly;

            Type t = assembly.GetType("bar");
            Assert.IsNotNull(t);

            object o = Activator.CreateInstance(t, 1234);
            Assert.IsNotNull(o);

            var method = t.GetMethod("GetNumber");
            Assert.IsNotNull(method);

            int n = (int)method.Invoke(o, null);
            Assert.AreEqual(1234, n);
        }
Exemplo n.º 17
0
        public void GenerateClassMethodPrivate()
        {
            string code = @"
            class bar:
            private void foo():
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError e in results.Errors)
            {
                Console.WriteLine(e.ErrorText);
            }

            Assert.AreEqual(0, results.Errors.Count);
            Assert.IsTrue(results.CompiledAssembly.GetType("bar").GetMethod("foo", System.Reflection.BindingFlags.NonPublic | BindingFlags.Instance).IsPrivate);
        }
Exemplo n.º 18
0
        public void GenerateProperty3()
        {
            string code = @"
            module bar:

            int [] testproperty:
            get:
            return new int[2]
            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            var assembly = results.CompiledAssembly;

            Assert.AreEqual(0, results.Errors.Count);
        }
Exemplo n.º 19
0
        public void GenerateEvent()
        {
            string code = @"
            import System.Collections.Generic
            delegate int del(int d)

            class foo:
            public event del delegateEvent
            void Main():
            delegateEvent += fn
            int fn(int d):
            return 1
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError error in results.Errors)
                Console.WriteLine(error.ErrorText);
            Assert.AreEqual(0, results.Errors.Count);
        }
Exemplo n.º 20
0
        public void GenerateDelegate6()
        {
            string code = @"
            import System.Collections.Generic
            delegate List{string} d(List{string} d)
                            ";

            var provider = new PieCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            var results = provider.CompileAssemblyFromSource(parameters, code);

            foreach (CompilerError error in results.Errors)
                Console.WriteLine(error.ErrorText);
            Assert.AreEqual(0, results.Errors.Count);
        }