| 
					
				 | 
			
			
				@@ -14,6 +14,7 @@ static char error[ERROR_LENGTH] = {'\0'}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static unsigned char byteCode[MAX_BYTES]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static int writeIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static int line = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void cError(const char* format, ...) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     va_list args; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,18 +38,26 @@ static bool cAddOperation(Operation token) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return cAddBytes(&c, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static bool cConsumeToken(Token wanted) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static Token tReadTokenAndLine() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Token t = tReadToken(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(tReadInt(&line)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return t; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return T_END; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static bool cConsumeToken(Token wanted) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Token t = tReadTokenAndLine(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(wanted == t) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    cError("unexpected token: expected '%s' got '%s'", tGetTokenName(wanted), tGetTokenName(t)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cError("unexpected token on line %d: expected '%s' got '%s'", line, tGetTokenName(wanted), tGetTokenName(t)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static bool cConsumeTokenIf(Token t) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(tPeekToken() == t) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tReadToken(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tReadTokenAndLine(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -91,13 +100,13 @@ static bool cPrint() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static bool cLine() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Token t = tReadToken(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Token t = tReadTokenAndLine(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(t == T_END) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } else if(t == T_PRINT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return cPrint(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    cError("unexpected token: %s", tGetTokenName(t)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    cError("unexpected token on line %d: %s", line, tGetTokenName(t)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |