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); }
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); }
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); }
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); }
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); }
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); }
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; }
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); }
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 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")); }
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")); }
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); }
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); }
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); }
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); }
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); }
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); }
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 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); }
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); }
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); }
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); }
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); }