public void DoublePointerArrayRef_ParseCheck_Expected_Equals() { LArrayRef arrayRef = new LArrayRef("arrayRef", new LPointerRef(new LValueRef(LType.Int32Type(), ""), "pointerRef"), 5); LArrayRef arrayRef2 = new LArrayRef("arrayRef2", arrayRef, 5); Assert.AreEqual("[5 x i32*]", arrayRef.ParseType()); Assert.AreEqual("[5 x [5 x i32*]]", arrayRef2.ParseType()); }
public void SimpleFunctionType_ArrayAsReturnVal_Expected_Exception() { var returnVal = new LArrayRef("", new LValueRef(LType.F32Type(), ""), 5); LFunctionType fnType; Assert.Throws<Exception>(() => fnType = new LFunctionType(returnVal) ); }
public void PointerArrayRef_Expected_NoException() { LPointerRef pointerRef = new LPointerRef(new LValueRef(LType.Int32Type(), ""), "pointerRef"); LArrayRef arrayRef; Assert.DoesNotThrow(() => arrayRef = new LArrayRef("arrayRef2", pointerRef, 5) ); }
public void DoubleArrayRef_Expected_NoException() { LArrayRef arrayRef = new LArrayRef("arrayRef", new LValueRef(LType.Int32Type(), ""), 5); LArrayRef arrayRef2; Assert.DoesNotThrow(() => arrayRef2 = new LArrayRef("arrayRef2", arrayRef, 5) ); }
static void Main(string[] args) { string valueIdentifier = "@value"; string value = "c\"Hello World!\\00\""; var module = new LModule("LLVMHelloWorld"); var func = LFunction.Create("@main", new LValueRef(LType.Int32Type(), "")); var arrayRef = new LArrayRef(valueIdentifier, new LValueRef(LType.Int8Type(), ""), 13); // Create char array constant. var global = new LGlobal(arrayRef, value) { IsConstant = true }; var fnType = new LFunctionType(new LValueRef(LType.Int32Type(), "%printf"), new LPointerRef(new LValueRef(LType.Int8Type(), ""), "%result")) { HasVararg = true }; var external = new LExternal(fnType, "@printf"); var result = new LPointerRef(new LValueRef(LType.Int8Type(), ""), "%result"); var gep = new LGetelementptr(result, global.GetPointerRef()); gep.Indexes.Add((LType.Int32Type(), 0)); gep.Indexes.Add((LType.Int32Type(), 0)); var call = new LCall(fnType, external.FnIdentifier); var ret = new LRet(new LValueRef(LType.Int32Type(), "0")); // Create and register entry label func.Register(new LLabelType("entry")); // Register function and char array constant to module. module.Register(global); module.Register(func); module.Register(external); // Register instructions. func.Register(gep); func.Register(call); func.Register(ret); Console.WriteLine(module.Parse()); }
/// <summary> /// Returns identifier of reference. /// </summary> /// <param name="reference"></param> /// <returns>identifier</returns> public static string GetIdentifierOf(LBaseRef reference) { if (reference.IsValue()) { LValueRef value = (LValueRef)reference; return(value.Identifier !); } else if (reference.IsPointer()) { LPointerRef pointer = (LPointerRef)reference; return(pointer.Identifier); } else if (reference.IsArray()) { LArrayRef array = (LArrayRef)reference; return(array.Identifier); } else if (reference.IsVector()) { LVectorRef vector = (LVectorRef)reference; return(vector.Identifier !); } throw new Exception("unknown reference."); }