Beispiel #1
0
        public void TestJumpDifferentSymbolSameName()
        {
            string test = @"
                        f() {
                            @a;
                            jump a;
                        }

                        g() {
                            @a;
                            jump a;
                        }
                    
                        default
                        {
                            touch_start(integer num) {
                            }
                        }";

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar", true);
            CompiledScript    script       = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;

            Console.WriteLine(byteCode);

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(new Regex("a_usrlbl__0").Matches(byteCode).Count, 2);
            Assert.AreEqual(new Regex("a_usrlbl__1").Matches(byteCode).Count, 2);
            Assert.AreEqual(new Regex("jmp a_usrlbl__0").Matches(byteCode).Count, 1);
            Assert.AreEqual(new Regex("jmp a_usrlbl__1").Matches(byteCode).Count, 1);
        }
Beispiel #2
0
        public void TestDoGenerateBooleanEval()
        {
            string test
                = @"string strfunc() { return """"; }

                    f() { 
                        if (strfunc()) {
                        }

                        while (0.0) {
                        }

                        for (;"""";) {
                        }
                        
                        key k;
                        do {
                        } while (k);
                    }

                    default { state_entry() {} }
                    ";

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar", true);
            CompiledScript    script       = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;

            Console.WriteLine(byteCode);
            int evalCount = new Regex("booleval").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(evalCount, 4);
        }
Beispiel #3
0
        public void TestNoGenerateBooleanEval()
        {
            string test
                = @"integer intfunc() { return 0; }

                    f() { 
                        if (intfunc()) {
                        }

                        if (1) {
                        }

                        if (1 && 2 && 3) {
                        }
                        
                    }

                    default { state_entry() {} }
                    ";

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar", true);
            CompiledScript    script       = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;

            Console.WriteLine(byteCode);
            int evalCount = new Regex("booleval").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(evalCount, 0);
        }
Beispiel #4
0
        public void TestPromotionForStorage()
        {
            string test
                = @"integer g() { return 0; }
                    f() { 
                        integer i;
                        float f = 1;
                        float h = g();
                        float j = i;
                        float l = i++;
                        float k = i - 5;

                        f = 1;
                        h = g();
                        j = i;
                        l = i++;
                        k = i - 5;
                    }

                    default { state_entry() {} }
                    ";

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar", true);
            CompiledScript script = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;
            Console.WriteLine(byteCode);
            int castCount = new Regex("fcast").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(castCount, 10);
        }
Beispiel #5
0
        public void TestImplicitCastForSubscriptAssignment()
        {
            string test
                = @"g(float parm) { }
                    integer intfunc() { return 0; }

                    f() { 
                        vector v;
                        v.x = intfunc();
                        float f = (v.y = 1);
                        
                    }

                    default { state_entry() {} }
                    ";

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar", true);
            CompiledScript    script       = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;

            Console.WriteLine(byteCode);
            int castCount = new Regex("fcast").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(castCount, 2);
        }
Beispiel #6
0
        public void TestPromotionForStorage()
        {
            string test
                = @"integer g() { return 0; }
                    f() { 
                        integer i;
                        float f = 1;
                        float h = g();
                        float j = i;
                        float l = i++;
                        float k = i - 5;

                        f = 1;
                        h = g();
                        j = i;
                        l = i++;
                        k = i - 5;
                    }

                    default { state_entry() {} }
                    ";

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar", true);
            CompiledScript    script       = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;

            Console.WriteLine(byteCode);
            int castCount = new Regex("fcast").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(castCount, 10);
        }
Beispiel #7
0
        public void TestPromotionForFunctionCalls()
        {
            string test
                = @"g(float parm) { }
                    integer intfunc() { return 0; }

                    f() { 
                        integer i;
                        
                        g(1);
                        g(i);
                        g(i++);
                        g(i - 3);
                        g(intfunc());
                    }

                    default { state_entry() {} }
                    ";

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar", true);
            CompiledScript    script       = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;

            Console.WriteLine(byteCode);
            int castCount = new Regex("fcast").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(castCount, 5);
        }
        public InWorldz.Phlox.Glue.CompilerFrontend Compile(ICharStream input)
        {
            InWorldz.Phlox.Glue.CompilerFrontend frontEnd = new InWorldz.Phlox.Glue.CompilerFrontend(_listener, "..\\..\\..\\..\\grammar", true);
            frontEnd.OutputASTGraph = true;

            frontEnd.Compile(input);

            return frontEnd;
        }
Beispiel #9
0
        public InWorldz.Phlox.Glue.CompilerFrontend Compile(ICharStream input)
        {
            InWorldz.Phlox.Glue.CompilerFrontend frontEnd = new InWorldz.Phlox.Glue.CompilerFrontend(_listener, "../../../../grammar", true);
            frontEnd.OutputASTGraph = true;

            frontEnd.Compile(input);

            return frontEnd;
        }
        public void TestLauksLarrowScript()
        {
            string test;
            using (StreamReader rdr = File.OpenText("..\\..\\..\\..\\grammar\\test_files\\Lauks_Larrow_Main.lsl"))
            {
                test = rdr.ReadToEnd();
            }

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar");
            CompiledScript script = testFrontend.Compile(test);

            Assert.IsTrue(listener.HasErrors() == false);
        }
Beispiel #11
0
        public void TestLauksLarrowScript()
        {
            string test;

            using (StreamReader rdr = File.OpenText("..\\..\\..\\..\\grammar\\test_files\\Lauks_Larrow_Main.lsl"))
            {
                test = rdr.ReadToEnd();
            }

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar");
            CompiledScript    script       = testFrontend.Compile(test);

            Assert.IsTrue(listener.HasErrors() == false);
        }
Beispiel #12
0
        public void TestGeneratesFinalRetForEvent()
        {
            string test
                = @"default 
                    {
                        state_entry()
                        {
                            llSay(0, ""Script Running"");
                        }
                    }";

            MCompilerFrontend testFrontend = new MCompilerFrontend(new TestListener(), "..\\..\\..\\..\\grammar");
            CompiledScript    script       = testFrontend.Compile(test);

            Assert.Contains(93, script.ByteCode);
        }
        public void TestGeneratesFinalRetForEvent()
        {
            string test
                = @"default 
                    {
                        state_entry()
                        {
                            llSay(0, ""Script Running"");
                        }
                    }";

            MCompilerFrontend testFrontend = new MCompilerFrontend(new TestListener(), "..\\..\\..\\..\\grammar");
            CompiledScript script = testFrontend.Compile(test);

            Assert.Contains(93, script.ByteCode);
        }
Beispiel #14
0
        public void TestGoodAssignmentBeforeAndAfterShadowing()
        {
            string test
                = @"
                    func(vector v) {
                        v = <1,1,1>;
                        vector v;
                        v = <2,2,2>;
                    }
                    default { state_entry() {} }
                    ";

            InWorldz.Phlox.Glue.CompilerFrontend fe = Compiler.Compile(new ANTLRStringStream(test));
            Assert.IsTrue(Listener.ErrorCount == 0);
            Assert.IsTrue(fe.GeneratedByteCode.Contains("store 0"));
            Assert.IsTrue(fe.GeneratedByteCode.Contains("store 1"));
        }
Beispiel #15
0
        public void TestGoodAssignmentReferenceToParamFromShadow()
        {
            string test
                = @"
                    func(vector v) {
                        v = <1.0, 1.0, 1.0>;
                        vector v = v;
                        v = <1.0, 1.0, 1.0>;
                    }
                    default { state_entry() {} }
                    ";

            InWorldz.Phlox.Glue.CompilerFrontend fe = Compiler.Compile(new ANTLRStringStream(test));
            Assert.IsTrue(Listener.ErrorCount == 0);
            Console.WriteLine(fe.GeneratedByteCode);
            Assert.IsTrue(fe.GeneratedByteCode.Contains("load 0"));
            Assert.IsTrue(fe.GeneratedByteCode.Contains("store 1"));
        }
Beispiel #16
0
        public void TestMultiParamEvent()
        {
            string test
                = @"default 
                    {
                        listen(integer chan, string name, key id, string text)
                        {
                            llSay(0, ""Script Running"");
                        }

                        timer()
                        {
                        }
                    }";

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar");
            CompiledScript script = testFrontend.Compile(test);

            Assert.AreEqual(0, listener.ErrorCount);
        }
Beispiel #17
0
        public void TestMultiParamEvent()
        {
            string test
                = @"default 
                    {
                        listen(integer chan, string name, key id, string text)
                        {
                            llSay(0, ""Script Running"");
                        }

                        timer()
                        {
                        }
                    }";

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar");
            CompiledScript    script       = testFrontend.Compile(test);

            Assert.AreEqual(0, listener.ErrorCount);
        }
Beispiel #18
0
        public void TestLocalInitsMemoryAccountingBug()
        {
            string test
                = @"integer i;
                    float f;
                    vector v;
                    string s;
                    list l;
                    rotation r;

                    f() {
                      integer i;
                    }

                    g() {
                     integer i = 0;
                     for (i = 0; i < 999; i++) {
                        f();
                     }
                    }

                    integer h() {
                     g();
                     return 1;
                    }

                    integer k = h();

                    default { state_entry() {} }
                    ";

            MCompilerFrontend testFrontend = new MCompilerFrontend(new TestListener(), "../../../../grammar");
            CompiledScript    script       = testFrontend.Compile(test);

            Interpreter i = InterpRunner.Run(script);

            Assert.IsTrue(i.ScriptState.MemInfo.MemoryFree < MemoryInfo.MAX_MEMORY);
        }
Beispiel #19
0
        public void TestLauksLarrowScript()
        {
            string test;

            const string LAUKS_LARROW = "../../../../grammar/test_files/Lauks_Larrow_Main.lsl";

            // This file is not committed; skip test if not on a machine where it can be found.
            if (!File.Exists(LAUKS_LARROW))
            {
                return;
            }

            using (StreamReader rdr = File.OpenText(LAUKS_LARROW))
            {
                test = rdr.ReadToEnd();
            }

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar");
            CompiledScript    script       = testFrontend.Compile(test);

            Assert.IsTrue(listener.HasErrors() == false);
        }
Beispiel #20
0
        public void TestLocalInitsMemoryAccountingBug()
        {
            string test
                = @"integer i;
                    float f;
                    vector v;
                    string s;
                    list l;
                    rotation r;

                    f() {
                      integer i;
                    }

                    g() {
                     integer i = 0;
                     for (i = 0; i < 999; i++) {
                        f();
                     }
                    }

                    integer h() {
                     g();
                     return 1;
                    }

                    integer k = h();

                    default { state_entry() {} }
                    ";

            MCompilerFrontend testFrontend = new MCompilerFrontend(new TestListener(), "..\\..\\..\\..\\grammar");
            CompiledScript script = testFrontend.Compile(test);

            Interpreter i = InterpRunner.Run(script);
            Assert.IsTrue(i.ScriptState.MemInfo.MemoryFree < MemoryInfo.MAX_MEMORY);
        }
Beispiel #21
0
        public void TestGenerationOutputForTypePromotion()
        {
            string test
                = @"string strfunc() { return """"; }

                    f() { 
                        integer i;
                        float f;
                        
                        if (i < f) {}
                        if (i > f) {}
                        if (f > i) {}
                        if (f < i) {}
                        if (i >= f) {}
                        if (i <= f) {}
                        if (i < i) {}
                    }

                    default { state_entry() {} }
                    ";

            TestListener      listener     = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "../../../../grammar", true);
            CompiledScript    script       = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;

            Console.WriteLine(byteCode);

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(new Regex("flt(?!e)").Matches(byteCode).Count, 2);
            Assert.AreEqual(new Regex("fgt(?!e)").Matches(byteCode).Count, 2);
            Assert.AreEqual(new Regex("fgte").Matches(byteCode).Count, 1);
            Assert.AreEqual(new Regex("flte").Matches(byteCode).Count, 1);
            Assert.AreEqual(new Regex("ilt").Matches(byteCode).Count, 1);
        }
Beispiel #22
0
        public void TestPromotionForFunctionCalls()
        {
            string test
                = @"g(float parm) { }
                    integer intfunc() { return 0; }

                    f() { 
                        integer i;
                        
                        g(1);
                        g(i);
                        g(i++);
                        g(i - 3);
                        g(intfunc());
                    }

                    default { state_entry() {} }
                    ";

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar", true);
            CompiledScript script = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;
            Console.WriteLine(byteCode);
            int castCount = new Regex("fcast").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(castCount, 5);
        }
Beispiel #23
0
        public void TestJumpDifferentSymbolSameName()
        {
            string test = @"
                        f() {
                            @a;
                            jump a;
                        }

                        g() {
                            @a;
                            jump a;
                        }
                    
                        default
                        {
                            touch_start(integer num) {
                            }
                        }";

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar", true);
            CompiledScript script = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;
            Console.WriteLine(byteCode);

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(new Regex("a_usrlbl__0").Matches(byteCode).Count, 2);
            Assert.AreEqual(new Regex("a_usrlbl__1").Matches(byteCode).Count, 2);
            Assert.AreEqual(new Regex("jmp a_usrlbl__0").Matches(byteCode).Count, 1);
            Assert.AreEqual(new Regex("jmp a_usrlbl__1").Matches(byteCode).Count, 1);
        }
Beispiel #24
0
        public void TestGenerationOutputForTypePromotion()
        {
            string test
                = @"string strfunc() { return """"; }

                    f() { 
                        integer i;
                        float f;
                        
                        if (i < f) {}
                        if (i > f) {}
                        if (f > i) {}
                        if (f < i) {}
                        if (i >= f) {}
                        if (i <= f) {}
                        if (i < i) {}
                    }

                    default { state_entry() {} }
                    ";

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar", true);
            CompiledScript script = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;
            Console.WriteLine(byteCode);

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(new Regex("flt(?!e)").Matches(byteCode).Count, 2);
            Assert.AreEqual(new Regex("fgt(?!e)").Matches(byteCode).Count, 2);
            Assert.AreEqual(new Regex("fgte").Matches(byteCode).Count, 1);
            Assert.AreEqual(new Regex("flte").Matches(byteCode).Count, 1);
            Assert.AreEqual(new Regex("ilt").Matches(byteCode).Count, 1);
        }
Beispiel #25
0
        public void TestDoGenerateBooleanEval()
        {
            string test
                = @"string strfunc() { return """"; }

                    f() { 
                        if (strfunc()) {
                        }

                        while (0.0) {
                        }

                        for (;"""";) {
                        }
                        
                        key k;
                        do {
                        } while (k);
                    }

                    default { state_entry() {} }
                    ";

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar", true);
            CompiledScript script = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;
            Console.WriteLine(byteCode);
            int evalCount = new Regex("booleval").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(evalCount, 4);
        }
Beispiel #26
0
        public void TestNoGenerateBooleanEval()
        {
            string test
                = @"integer intfunc() { return 0; }

                    f() { 
                        if (intfunc()) {
                        }

                        if (1) {
                        }

                        if (1 && 2 && 3) {
                        }
                        
                    }

                    default { state_entry() {} }
                    ";

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar", true);
            CompiledScript script = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;
            Console.WriteLine(byteCode);
            int evalCount = new Regex("booleval").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(evalCount, 0);
        }
Beispiel #27
0
        public void TestImplicitCastForSubscriptAssignment()
        {
            string test
                = @"g(float parm) { }
                    integer intfunc() { return 0; }

                    f() { 
                        vector v;
                        v.x = intfunc();
                        float f = (v.y = 1);
                        
                    }

                    default { state_entry() {} }
                    ";

            TestListener listener = new TestListener();
            MCompilerFrontend testFrontend = new MCompilerFrontend(listener, "..\\..\\..\\..\\grammar", true);
            CompiledScript script = testFrontend.Compile(test);

            string byteCode = testFrontend.GeneratedByteCode;
            Console.WriteLine(byteCode);
            int castCount = new Regex("fcast").Matches(byteCode).Count;

            Assert.IsTrue(listener.HasErrors() == false);
            Assert.AreEqual(castCount, 2);
        }