Exemplo n.º 1
0
		static void WriteMessageStretSenderCode (StringWriter writer, TypeData type, bool isSuper)
		{
			var nonstret = isSuper ? "objc_msgSendSuper" : "objc_msgSend";
			var stret = isSuper ? "objc_msgSendSuper_stret" : "objc_msgSend_stret";

			writer.WriteLine ("#if __i386__");
			writer.WriteLine ("\tIMP msgSend = (IMP) {0};", type.IsX86Stret ? stret : nonstret);
			writer.WriteLine ("#elif __x86_64__");
			writer.WriteLine ("\tIMP msgSend = (IMP) {0};", type.IsX64Stret ? stret : nonstret);
			writer.WriteLine ("#elif __arm64__");
			writer.WriteLine ("\tIMP msgSend = (IMP) {0};", nonstret);
			writer.WriteLine ("#elif __arm__");
			writer.WriteLine ("\tIMP msgSend = (IMP) {0};", type.IsARMStret ? stret : nonstret);
			writer.WriteLine ("#else");
			writer.WriteLine ("#error unknown architecture");
			writer.WriteLine ("#endif");
		}
Exemplo n.º 2
0
		static void MarshalToNative (StringWriter writer, TypeData type, string nativeVariable, string managedVariable)
		{
			switch (type.ManagedType) {
			case "Vector2i":
			case "Vector2":
				writer.WriteLine ("\t{0} [0] = {1}.a;", nativeVariable, managedVariable);
				writer.WriteLine ("\t{0} [1] = {1}.b;", nativeVariable, managedVariable);
				break;
			case "Vector3i":
			case "Vector3":
				writer.WriteLine ("\t{0} [0] = {1}.a;", nativeVariable, managedVariable);
				writer.WriteLine ("\t{0} [1] = {1}.b;", nativeVariable, managedVariable);
				writer.WriteLine ("\t{0} [2] = {1}.c;", nativeVariable, managedVariable);
				break;
			case "Vector4i":
			case "Vector4":
				if (type.NativeType == "vector_float3") {
					writer.WriteLine ("\t{0} [0] = {1}.a;", nativeVariable, managedVariable);
					writer.WriteLine ("\t{0} [1] = {1}.b;", nativeVariable, managedVariable);
					writer.WriteLine ("\t{0} [2] = {1}.c;", nativeVariable, managedVariable);
				} else if (type.NativeType == "vector_float4" || type.NativeType == "vector_int4") {
					writer.WriteLine ("\t{0} [0] = {1}.a;", nativeVariable, managedVariable);
					writer.WriteLine ("\t{0} [1] = {1}.b;", nativeVariable, managedVariable);
					writer.WriteLine ("\t{0} [2] = {1}.c;", nativeVariable, managedVariable);
					writer.WriteLine ("\t{0} [3] = {1}.d;", nativeVariable, managedVariable);
				} else {
					goto default;
				}
				break;
			case "Matrix4":
				writer.WriteLine ("\tfor (int i = 0; i < 4; i++) {");
				writer.WriteLine ("\t\t{0}.columns [i][0] = {1}.columns [i].a;", nativeVariable, managedVariable);
				writer.WriteLine ("\t\t{0}.columns [i][1] = {1}.columns [i].b;", nativeVariable, managedVariable);
				writer.WriteLine ("\t\t{0}.columns [i][2] = {1}.columns [i].c;", nativeVariable, managedVariable);
				writer.WriteLine ("\t\t{0}.columns [i][3] = {1}.columns [i].d;", nativeVariable, managedVariable);
				writer.WriteLine ("\t}");
				break;
			case "MDLAxisAlignedBoundingBox":
				writer.WriteLine ("\t{0}.maxBounds [0] = {1}.maxBounds.a;", nativeVariable, managedVariable);
				writer.WriteLine ("\t{0}.maxBounds [1] = {1}.maxBounds.b;", nativeVariable, managedVariable);
				writer.WriteLine ("\t{0}.maxBounds [2] = {1}.maxBounds.c;", nativeVariable, managedVariable);
				writer.WriteLine ("\t{0}.minBounds [0] = {1}.minBounds.a;", nativeVariable, managedVariable);
				writer.WriteLine ("\t{0}.minBounds [1] = {1}.minBounds.b;", nativeVariable, managedVariable);
				writer.WriteLine ("\t{0}.minBounds [2] = {1}.minBounds.c;", nativeVariable, managedVariable);
				break;
			default:
				throw new NotImplementedException (string.Format ("MarshalToNative for: NativeType: {0} ManagedType: {1}", type.NativeType, type.ManagedType));
			}
		}