public void AddPredefinedHeader(string code) { List <CodeToken> tokens = NativeXCodeParser.Tokenize(code.ToCharArray()); int currentToken = 0; bool parseSuccess = false; NativeXUnit unit = NativeXCodeParser.ParseUnit(tokens, ref currentToken, ref parseSuccess); if (unit != null && parseSuccess) { unit.BuildScope(null); this.predefinedHeaders.Add(unit); } }
public void TestParseUnit() { { string code = File.ReadAllText("NativeXCodeForParser1.txt"); NativeXUnit unit = Parse(code, NativeXCodeParser.ParseUnit); AssertUnit(unit); Assert.IsNull(unit.UsesUnits); } { string code = File.ReadAllText("NativeXCodeForParser2.txt"); NativeXUnit unit = Parse(code, NativeXCodeParser.ParseUnit); AssertUnit(unit); Assert.IsTrue(unit.UsesUnits.Select(u => u.UnitName).SequenceEqual(new string[] { "Utility", "Prelude" })); } }
private void AssertUnit(NativeXUnit unit) { Assert.AreEqual("nativex_program_generated", unit.Name); Assert.AreEqual(12, unit.Declarations.Count); Assert.AreEqual("main", (unit.Declarations[0] as NativeXFunctionDeclaration).Name); Assert.AreEqual("main1", (unit.Declarations[1] as NativeXFunctionDeclaration).Name); Assert.AreEqual("main2", (unit.Declarations[2] as NativeXFunctionDeclaration).Name); Assert.AreEqual("Eq", (unit.Declarations[3] as NativeXConceptDeclaration).Name); Assert.AreEqual("Eq", (unit.Declarations[4] as NativeXInstanceDeclaration).ConceptName.ReferenceName); Assert.AreEqual("IntEquals", (unit.Declarations[5] as NativeXFunctionDeclaration).Name); Assert.AreEqual("IntNotEquals", (unit.Declarations[6] as NativeXFunctionDeclaration).Name); Assert.AreEqual("Vector", (unit.Declarations[7] as NativeXStructureDeclaration).Name); Assert.AreEqual("Eq", (unit.Declarations[8] as NativeXInstanceDeclaration).ConceptName.ReferenceName); Assert.AreEqual("VectorEquals", (unit.Declarations[9] as NativeXFunctionDeclaration).Name); Assert.AreEqual("VectorNotEquals", (unit.Declarations[10] as NativeXFunctionDeclaration).Name); Assert.AreEqual("FakeFunction", (unit.Declarations[11] as NativeXFunctionDeclaration).Name); }