diff lwasm/pseudo.c @ 235:aa0056ca7319

Added a padding value for the ALIGN directive
author lost
date Fri, 12 Jun 2009 05:25:41 +0000
parents 59a138df0401
children a58f49a77441
line wrap: on
line diff
--- a/lwasm/pseudo.c	Fri Jun 12 04:55:16 2009 +0000
+++ b/lwasm/pseudo.c	Fri Jun 12 05:25:41 2009 +0000
@@ -326,14 +326,15 @@
 {
 	int cn;
 	int r, v;
-	
-	if (as -> passnum == 2)
-	{
-		skip_operand(p);
-		while (as -> addr < l -> symaddr)
-			lwasm_emit(as, l, 0);
-		return;
-	}
+	int pad = 0;
+// we have to parse this on pass 2 so that we get the pad value	
+//	if (as -> passnum == 2)
+//	{
+//		skip_operand(p);
+//		while (as -> addr < l -> symaddr)
+//			lwasm_emit(as, l, 0);
+//		return;
+//	}
 	
 	r = lwasm_expr_result2(as, l, p, EXPR_SECTCONST | EXPR_PASS1CONST, &v, 0);
 	if (r != 0)
@@ -352,9 +353,21 @@
 	if (cn)
 		cn = v - cn; 
 
+	if (**p == ',')
+	{
+		// we have a padding value specified
+		(*p)++;
+		r = lwasm_expr_result2(as, l, p, EXPR_SECTCONST, &pad, 1);
+		if (r != 0 && as -> passnum == 2)
+		{
+			register_error(as, l, 2, "Illegal padding value - must be constant on pass 2");
+			return;
+		}
+	}
+
 	while (cn--)
 	{
-		lwasm_emit(as, l, 0);
+		lwasm_emit(as, l, pad);
 	}
 	l -> symaddr = as -> addr;
 }