glsl: Replace atomic_ssbo and ssbo_atomic with atomic
[mesa.git] / src / glsl / s_expression.cpp
index 57de9d334a29981968aa7025d77295addcff554c..f82e155a6b6af09a3514edddcd09006bacba67ca 100644 (file)
@@ -23,7 +23,8 @@
  */
 
 #include <assert.h>
-#include <limits>
+#include <stdio.h>
+#include <math.h>
 #include "s_expression.h"
 
 s_symbol::s_symbol(const char *str, size_t n)
@@ -66,18 +67,18 @@ read_atom(void *ctx, const char *&src, char *&symbol_buffer)
       return NULL; // no atom
 
    // Check for the special symbol '+INF', which means +Infinity.  Note: C99
-   // requires strtod to parse '+INF' as +Infinity, but we still support some
+   // requires strtof to parse '+INF' as +Infinity, but we still support some
    // non-C99-compliant compilers (e.g. MSVC).
    if (n == 4 && strncmp(src, "+INF", 4) == 0) {
-      expr = new(ctx) s_float(std::numeric_limits<float>::infinity());
+      expr = new(ctx) s_float(INFINITY);
    } else {
       // Check if the atom is a number.
       char *float_end = NULL;
-      double f = glsl_strtod(src, &float_end);
+      float f = _mesa_strtof(src, &float_end);
       if (float_end != src) {
          char *int_end = NULL;
          int i = strtol(src, &int_end, 10);
-         // If strtod matched more characters, it must have a decimal part
+         // If strtof matched more characters, it must have a decimal part
          if (float_end > int_end)
             expr = new(ctx) s_float(f);
          else
@@ -162,8 +163,7 @@ void s_symbol::print()
 void s_list::print()
 {
    printf("(");
-   foreach_iter(exec_list_iterator, it, this->subexpressions) {
-      s_expression *expr = (s_expression*) it.get();
+   foreach_in_list(s_expression, expr, &this->subexpressions) {
       expr->print();
       if (!expr->next->is_tail_sentinel())
         printf(" ");
@@ -201,11 +201,10 @@ s_match(s_expression *top, unsigned n, s_pattern *pattern, bool partial)
       return false;
 
    unsigned i = 0;
-   foreach_iter(exec_list_iterator, it, list->subexpressions) {
+   foreach_in_list(s_expression, expr, &list->subexpressions) {
       if (i >= n)
         return partial; /* More actual items than the pattern expected */
 
-      s_expression *expr = (s_expression *) it.get();
       if (expr == NULL || !pattern[i].match(expr))
         return false;