[gtk+/wip/otte/shader: 18/69] gsksldeclaration: Throw an error if a variable initializer doesn't match



commit 1dfa20295ec134cb1844a8c284a4ae4499829db4
Author: Benjamin Otte <otte redhat com>
Date:   Tue Sep 26 16:21:51 2017 +0200

    gsksldeclaration: Throw an error if a variable initializer doesn't match
    
    ... the type of the declared variable and cannot be converted to it.

 gsk/gskslnode.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)
---
diff --git a/gsk/gskslnode.c b/gsk/gskslnode.c
index f1b6b25..88ae881 100644
--- a/gsk/gskslnode.c
+++ b/gsk/gskslnode.c
@@ -275,6 +275,14 @@ gsk_sl_node_parse_declaration (GskSlScope        *scope,
     {
       gsk_sl_preprocessor_consume (stream, (GskSlNode *) declaration);
       declaration->initial = gsk_sl_expression_parse_assignment (scope, stream);
+      if (!gsk_sl_type_can_convert (type, gsk_sl_expression_get_return_type (declaration->initial)))
+        {
+          gsk_sl_preprocessor_error (stream, "Cannot convert from initializer type %s to variable type %s",
+                                             gsk_sl_type_get_name (gsk_sl_expression_get_return_type 
(declaration->initial)),
+                                             gsk_sl_type_get_name (type));
+          gsk_sl_node_unref ((GskSlNode *) declaration);
+          return NULL;
+        }
     }
 
   gsk_sl_scope_add_variable (scope, declaration->variable);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]