diff dmd/FuncDeclaration.d @ 93:df6d0f967680

implemented a whole bunch of methods to make phobos 2.035 compile and some additional ones I came across
author Trass3r
date Mon, 30 Aug 2010 22:50:30 +0200
parents 21a53563c840
children 3a0b150c9841 5c859d5fbe27
line wrap: on
line diff
--- a/dmd/FuncDeclaration.d	Mon Aug 30 23:43:38 2010 +0400
+++ b/dmd/FuncDeclaration.d	Mon Aug 30 22:50:30 2010 +0200
@@ -17,6 +17,7 @@
 import dmd.ExpInitializer;
 import dmd.BE;
 import dmd.Id;
+import dmd.StorageClassDeclaration;
 import dmd.StringExp;
 import dmd.DsymbolExp;
 import dmd.HaltExp;
@@ -1650,15 +1651,62 @@
 	{
 		assert(false);
 	}
-	
-    override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
+
+	override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
 	{
-		assert(false);
+//		writef("FuncDeclaration.toCBuffer() '%s'\n", toChars());
+
+		StorageClassDeclaration.stcToCBuffer(buf, storage_class);
+		type.toCBuffer(buf, ident, hgs);
+		bodyToCBuffer(buf, hgs);
 	}
 	
-    void bodyToCBuffer(OutBuffer buf, HdrGenState* hgs)
+	void bodyToCBuffer(OutBuffer buf, HdrGenState* hgs)
 	{
-		assert(false);
+		if (fbody &&
+			(!hgs.hdrgen || hgs.tpltMember || canInline(1,1))
+		   )
+		{
+			buf.writenl();
+
+			// in{}
+			if (frequire)
+			{
+				buf.writestring("in");
+				buf.writenl();
+				frequire.toCBuffer(buf, hgs);
+			}
+
+			// out{}
+			if (fensure)
+			{
+				buf.writestring("out");
+				if (outId)
+				{
+					buf.writebyte('(');
+					buf.writestring(outId.toChars());
+					buf.writebyte(')');
+				}
+				buf.writenl();
+				fensure.toCBuffer(buf, hgs);
+			}
+
+			if (frequire || fensure)
+			{
+				buf.writestring("body");
+				buf.writenl();
+			}
+
+			buf.writebyte('{');
+			buf.writenl();
+			fbody.toCBuffer(buf, hgs);
+			buf.writebyte('}');
+			buf.writenl();
+		}
+		else
+		{   buf.writeByte(';');
+			buf.writenl();
+		}
 	}
 	
 	/****************************************************