]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[script] Pass the debug position when creating all expression elements
authorCharlie Brej <cbrej@cs.man.ac.uk>
Sun, 30 Aug 2009 21:14:59 +0000 (22:14 +0100)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Sun, 30 Aug 2009 21:14:59 +0000 (22:14 +0100)
Will be used later to form a debug table

src/plugins/splash/script/script-debug.h
src/plugins/splash/script/script-parse.c
src/plugins/splash/script/script-scan.h

index 92c70bfb4e71cff9cd1f8beecedf3ddd6ff2ab33..d7000d09bad4e231a8d382dddc1df320d9eba5d4 100644 (file)
@@ -28,7 +28,7 @@ typedef struct
   int line_index;
   int column_index;
   char* name;
-} script_debug_source_location_t;
+} script_debug_location_t;
 
 
 #endif /* SCRIPT_DEBUG_H */
index dbe4da67726984aed14073f2a6db3a540396d758..66b104a67a19bbf686d521923c0589ee9902bc01 100644 (file)
@@ -51,64 +51,72 @@ static script_exp_t *script_parse_exp (script_scan_t *scan);
 static ply_list_t *script_parse_op_list (script_scan_t *scan);
 static void script_parse_op_list_free (ply_list_t *op_list);
 
-static script_exp_t *script_parse_new_exp (script_exp_type_t  type)
+static script_exp_t *script_parse_new_exp (script_exp_type_t        type,
+                                           script_debug_location_t *location)
 {
   script_exp_t *exp = malloc (sizeof (script_exp_t));
   exp->type = type;
   return exp;
 }
 
-static script_exp_t *script_parse_new_exp_single (script_exp_type_t  type,
-                                                  script_exp_t      *sub)
+static script_exp_t *script_parse_new_exp_single (script_exp_type_t        type,
+                                                  script_exp_t            *sub,
+                                                  script_debug_location_t *location)
 {
-  script_exp_t *exp = script_parse_new_exp(type);
+  script_exp_t *exp = script_parse_new_exp(type, location);
   exp->data.sub = sub;
   return exp;
 }
 
-static script_exp_t *script_parse_new_exp_dual (script_exp_type_t  type,
-                                                script_exp_t      *sub_a,
-                                                script_exp_t      *sub_b)
+static script_exp_t *script_parse_new_exp_dual (script_exp_type_t        type,
+                                                script_exp_t            *sub_a,
+                                                script_exp_t            *sub_b,
+                                                script_debug_location_t *location)
 {
-  script_exp_t *exp = script_parse_new_exp(type);
+  script_exp_t *exp = script_parse_new_exp(type, location);
   exp->data.dual.sub_a = sub_a;
   exp->data.dual.sub_b = sub_b;
   return exp;
 }
 
-static script_exp_t *script_parse_new_exp_number (script_number_t   number)
+static script_exp_t *script_parse_new_exp_number (script_number_t          number,
+                                                  script_debug_location_t *location)
 {
-  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_NUMBER);
+  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_NUMBER, location);
   exp->data.number = number;
   return exp;
 }
 
-static script_exp_t *script_parse_new_exp_string (char *string)
+static script_exp_t *script_parse_new_exp_string (char                    *string,
+                                                  script_debug_location_t *location)
 {
-  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_STRING);
+  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_STRING, location);
   exp->data.string = strdup(string);
   return exp;
 }
 
-static script_exp_t *script_parse_new_exp_var (char *string)
+static script_exp_t *script_parse_new_exp_var (char                    *string,
+                                               script_debug_location_t *location)
 {
-  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_VAR);
+  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_VAR, location);
   exp->data.string = strdup(string);
   return exp;
 }
 
-static script_exp_t *script_parse_new_exp_function_exe (script_exp_t *name,
-                                                        ply_list_t   *parameters)
+static script_exp_t *script_parse_new_exp_function_exe (script_exp_t            *name,
+                                                        ply_list_t              *parameters,
+                                                        script_debug_location_t *location)
 {
-  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_FUNCTION_EXE);
+  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_FUNCTION_EXE, location);
   exp->data.function_exe.name = name;
   exp->data.function_exe.parameters = parameters;
   return exp;
 }
 
-static script_exp_t *script_parse_new_exp_function_def (script_function_t *function_def)
+static script_exp_t *script_parse_new_exp_function_def (script_function_t       *function_def,
+                                                        script_debug_location_t *location)
 {
-  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_FUNCTION_DEF);
+  script_exp_t *exp = script_parse_new_exp(SCRIPT_EXP_TYPE_FUNCTION_DEF, location);
   exp->data.function_def = function_def;
   return exp;
 }
@@ -146,8 +154,8 @@ static script_op_t *script_parse_new_op_cond (script_op_type_t  type,
   return op;
 }
 
-static void script_parse_error (script_debug_source_location_t *location,
-                                const char                     *message)
+static void script_parse_error (script_debug_location_t *location,
+                                const char              *message)
 {
   ply_error ("Parser error \"%s\" L:%d C:%d : %s\n",
              location->name,
@@ -243,44 +251,45 @@ static script_exp_t *script_parse_exp_tm (script_scan_t *scan)
 
   if (script_scan_token_is_integer (curtoken))
     {
-      exp = script_parse_new_exp_number (curtoken->data.integer);
+      exp = script_parse_new_exp_number (curtoken->data.integer, &curtoken->location);
       script_scan_get_next_token (scan);
       return exp;
     }
   if (script_scan_token_is_float (curtoken))
     {
-      exp = script_parse_new_exp_number (curtoken->data.floatpoint);
+      exp = script_parse_new_exp_number (curtoken->data.floatpoint, &curtoken->location);
       script_scan_get_next_token (scan);
       return exp;
     }
   if (script_scan_token_is_identifier (curtoken))
     {
       if (script_scan_token_is_identifier_of_value (curtoken, "NULL"))
-        exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_NULL);
+        exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_NULL, &curtoken->location);
       else if (script_scan_token_is_identifier_of_value (curtoken, "INFINITY"))
-        exp = script_parse_new_exp_number (INFINITY);
+        exp = script_parse_new_exp_number (INFINITY, &curtoken->location);
       else if (script_scan_token_is_identifier_of_value (curtoken, "NAN"))
-        exp = script_parse_new_exp_number (NAN);
+        exp = script_parse_new_exp_number (NAN, &curtoken->location);
       else if (script_scan_token_is_identifier_of_value (curtoken, "global"))
-        exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_GLOBAL);
+        exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_GLOBAL, &curtoken->location);
       else if (script_scan_token_is_identifier_of_value (curtoken, "local"))
-        exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_LOCAL);
+        exp = script_parse_new_exp(SCRIPT_EXP_TYPE_TERM_LOCAL, &curtoken->location);
       else if (script_scan_token_is_identifier_of_value (curtoken, "fun"))
         {
+          script_debug_location_t location = curtoken->location;
           script_scan_get_next_token (scan);
-          exp = script_parse_new_exp_function_def (script_parse_function_def (scan));
+          exp = script_parse_new_exp_function_def (script_parse_function_def (scan), &location);
           return exp;
         }
       else
         {
-          exp = script_parse_new_exp_var (curtoken->data.string);
+          exp = script_parse_new_exp_var (curtoken->data.string, &curtoken->location);
         }
       curtoken = script_scan_get_next_token (scan);
       return exp;
     }
   if (script_scan_token_is_string (curtoken))
     {
-      exp = script_parse_new_exp_string (curtoken->data.string);
+      exp = script_parse_new_exp_string (curtoken->data.string, &curtoken->location);
       script_scan_get_next_token (scan);
       return exp;
     }
@@ -314,6 +323,7 @@ static script_exp_t *script_parse_exp_pi (script_scan_t *scan)
 
   while (true)
     {
+      script_debug_location_t location = curtoken->location;
       if (!script_scan_token_is_symbol (curtoken)) break;
       if (script_scan_token_is_symbol_of_value (curtoken, '('))
         {
@@ -337,7 +347,7 @@ static script_exp_t *script_parse_exp_pi (script_scan_t *scan)
               curtoken = script_scan_get_next_token (scan);
             }
           script_scan_get_next_token (scan);
-          exp = script_parse_new_exp_function_exe (exp, parameters);
+          exp = script_parse_new_exp_function_exe (exp, parameters, &location);
           continue;
         }
       script_exp_t *key;
@@ -347,12 +357,12 @@ static script_exp_t *script_parse_exp_pi (script_scan_t *scan)
           script_scan_get_next_token (scan);
           if (script_scan_token_is_identifier (curtoken))
             {
-              key = script_parse_new_exp_string (curtoken->data.string);
+              key = script_parse_new_exp_string (curtoken->data.string, &curtoken->location);
             }
           else
             {
               script_parse_error (&curtoken->location,
-                "A dot based hash index must be an identifier (or a integer)");
+                "A dot based hash index must be an identifier");
               return NULL;
             }
           curtoken = script_scan_get_next_token (scan);
@@ -371,7 +381,7 @@ static script_exp_t *script_parse_exp_pi (script_scan_t *scan)
           curtoken = script_scan_get_next_token (scan);
         }
       else break;
-      exp = script_parse_new_exp_dual (SCRIPT_EXP_TYPE_HASH, exp, key);
+      exp = script_parse_new_exp_dual (SCRIPT_EXP_TYPE_HASH, exp, key, &location);
     }
   return exp;
 }
@@ -387,12 +397,12 @@ static script_exp_t *script_parse_exp_pr (script_scan_t *scan)
       {"!",  SCRIPT_EXP_TYPE_NOT,        0},
       {NULL, SCRIPT_EXP_TYPE_TERM_NULL, -1},
     };
-  
   const script_parse_operator_table_entry_t* entry;
   entry =  script_parse_operator_table_entry_lookup(scan, operator_table);
   if (entry->presedence < 0) return script_parse_exp_pi (scan);
+  script_debug_location_t location = script_scan_get_current_token (scan)->location;
   script_parse_advance_scan_by_string(scan, entry->symbol);
-  return script_parse_new_exp_single(entry->exp_type, script_parse_exp_pr (scan));
+  return script_parse_new_exp_single(entry->exp_type, script_parse_exp_pr (scan), &location);
 }
 
 static script_exp_t *script_parse_exp_po (script_scan_t *scan)
@@ -410,8 +420,8 @@ static script_exp_t *script_parse_exp_po (script_scan_t *scan)
       const script_parse_operator_table_entry_t* entry;
       entry =  script_parse_operator_table_entry_lookup(scan, operator_table);
       if (entry->presedence < 0) break;
+      exp = script_parse_new_exp_single(entry->exp_type, exp, &script_scan_get_current_token (scan)->location);
       script_parse_advance_scan_by_string(scan, entry->symbol);
-      exp = script_parse_new_exp_single(entry->exp_type, exp);
     }
   return exp;
 }
@@ -450,8 +460,9 @@ static script_exp_t *script_parse_exp_ltr (script_scan_t *scan, int presedence)
       const script_parse_operator_table_entry_t* entry;
       entry =  script_parse_operator_table_entry_lookup(scan, operator_table);
       if (entry->presedence != presedence) break;
+      script_debug_location_t location = script_scan_get_current_token (scan)->location;
       script_parse_advance_scan_by_string(scan, entry->symbol);
-      exp = script_parse_new_exp_dual(entry->exp_type, exp, script_parse_exp_ltr (scan, presedence + 1));
+      exp = script_parse_new_exp_dual(entry->exp_type, exp, script_parse_exp_ltr (scan, presedence + 1), &location);
       if (!exp->data.dual.sub_b)
         {
           script_parse_error (&script_scan_get_current_token (scan)->location,
@@ -480,6 +491,7 @@ static script_exp_t *script_parse_exp_as (script_scan_t *scan)
   const script_parse_operator_table_entry_t* entry;
   entry =  script_parse_operator_table_entry_lookup(scan, operator_table);
   if (entry->presedence < 0) return lhs;
+  script_debug_location_t location = script_scan_get_current_token (scan)->location;
   script_parse_advance_scan_by_string(scan, entry->symbol);
   script_exp_t *rhs = script_parse_exp_as (scan);
   if (!rhs)
@@ -488,7 +500,7 @@ static script_exp_t *script_parse_exp_as (script_scan_t *scan)
                           "An invalid RHS of an expression");
       return NULL;
     }
-  return script_parse_new_exp_dual (entry->exp_type, lhs, rhs);
+  return script_parse_new_exp_dual (entry->exp_type, lhs, rhs, &location);
 }
 
 static script_exp_t *script_parse_exp (script_scan_t *scan)
@@ -648,7 +660,7 @@ static script_op_t *script_parse_function (script_scan_t *scan)
                           "A function declaration requires a valid name");
       return NULL;
     }
-  script_exp_t *name = script_parse_new_exp_var (curtoken->data.string);
+  script_exp_t *name = script_parse_new_exp_var (curtoken->data.string, &curtoken->location);
   
   curtoken = script_scan_get_next_token (scan);     /* FIXME parse any type of exp as target and do an assign*/
 
index 7891d4a1cba292573921cdaa59e7ff26e8ad3593..87ea6bd02b77b06c931b486ee60f466fae8f6c19 100644 (file)
@@ -50,7 +50,7 @@ typedef struct
     double floatpoint;
   } data;
   int whitespace;
-  script_debug_source_location_t location;
+  script_debug_location_t location;
 } script_scan_token_t;
 
 typedef struct