Quellcode durchsuchen

Added a sanity check on error reporting.

Marco Bambini vor 7 Jahren
Ursprung
Commit
d00bb4fff6
2 geänderte Dateien mit 7 neuen und 4 gelöschten Zeilen
  1. 3 0
      src/compiler/gravity_semacheck1.c
  2. 4 4
      src/compiler/gravity_semacheck2.c

+ 3 - 0
src/compiler/gravity_semacheck1.c

@@ -33,6 +33,9 @@ static void report_error (gvisitor_t *self, gnode_t *node, const char *format, .
 	// increment internal error counter
 	++self->nerr;
 
+    // sanity check
+    if (!node) return;
+    
 	// get error callback (if any)
 	void *data = (self->delegate) ? ((gravity_delegate_t *)self->delegate)->xdata : NULL;
 	gravity_error_callback error_fn = (self->delegate) ? ((gravity_delegate_t *)self->delegate)->error_callback : NULL;

+ 4 - 4
src/compiler/gravity_semacheck2.c

@@ -49,14 +49,14 @@ typedef struct semacheck_t semacheck_t;
 // MARK: -
 
 static void report_error (gvisitor_t *self, error_type_t error_type, gnode_t *node, const char *format, ...) {
+    // increment internal error counter
+    if (error_type != GRAVITY_WARNING) ++self->nerr;
+    
 	// check last error line in order to prevent to emit multiple errors for the same row
 	semacheck_t *current = (semacheck_t *)self->data;
-	if (node->token.lineno == current->lasterror) return;
+	if (!node || node->token.lineno == current->lasterror) return;
 	current->lasterror = node->token.lineno;
 
-	// increment internal error counter
-	if (error_type != GRAVITY_WARNING) ++self->nerr;
-
 	// get error callback (if any)
 	void *data = (self->delegate) ? ((gravity_delegate_t *)self->delegate)->xdata : NULL;
 	gravity_error_callback error_fn = (self->delegate) ? ((gravity_delegate_t *)self->delegate)->error_callback : NULL;