mesa: move _slang_locate_function() to different file
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 12 Dec 2008 17:03:31 +0000 (10:03 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 6 Jan 2009 16:09:03 +0000 (09:09 -0700)
(cherry picked from commit ea9dc3879f4cbbaa8ce9e305884a4afdc1fdd28a)

src/mesa/shader/slang/slang_compile_function.c
src/mesa/shader/slang/slang_compile_function.h
src/mesa/shader/slang/slang_typeinfo.c
src/mesa/shader/slang/slang_typeinfo.h

index eca75dcb2165f8cd9b941c8b0dd6ae3ecc3c3449..72132ac8dadfe86de15e7636992f8a2938a7f832 100644 (file)
@@ -189,3 +189,74 @@ slang_function_scope_find(slang_function_scope * funcs, slang_function * fun,
       return slang_function_scope_find(funcs->outer_scope, fun, 1);
    return NULL;
 }
+
+
+/**
+ * Lookup a function according to name and parameter count/types.
+ */
+slang_function *
+_slang_locate_function(const slang_function_scope * funcs, slang_atom a_name,
+                       slang_operation * args, GLuint num_args,
+                       const slang_name_space * space, slang_atom_pool * atoms,
+                       slang_info_log *log, GLboolean *error)
+{
+   slang_typeinfo arg_ti[100];
+   GLuint i;
+
+   *error = GL_FALSE;
+
+   /* determine type of each argument */
+   assert(num_args < 100);
+   for (i = 0; i < num_args; i++) {
+      if (!slang_typeinfo_construct(&arg_ti[i]))
+         return NULL;
+      if (!_slang_typeof_operation_(&args[i], space, &arg_ti[i], atoms, log)) {
+         return NULL;
+      }
+   }
+
+   /* loop over function scopes */
+   while (funcs) {
+
+      /* look for function with matching name and argument/param types */
+      for (i = 0; i < funcs->num_functions; i++) {
+         slang_function *f = &funcs->functions[i];
+         const GLuint haveRetValue = _slang_function_has_return_value(f);
+         GLuint j;
+
+         if (a_name != f->header.a_name)
+            continue;
+         if (f->param_count - haveRetValue != num_args)
+            continue;
+
+         /* compare parameter / argument types */
+         for (j = 0; j < num_args; j++) {
+            if (!slang_type_specifier_compatible(&arg_ti[j].spec,
+                              &f->parameters->variables[j]->type.specifier)) {
+               /* param/arg types don't match */
+               break;
+            }
+
+            /* "out" and "inout" formal parameter requires the actual
+             * argument to be an l-value.
+             */
+            if (!arg_ti[j].can_be_referenced &&
+                (f->parameters->variables[j]->type.qualifier == SLANG_QUAL_OUT ||
+                 f->parameters->variables[j]->type.qualifier == SLANG_QUAL_INOUT)) {
+               /* param is not an lvalue! */
+               *error = GL_TRUE;
+               return NULL;
+            }
+         }
+
+         if (j == num_args) {
+            /* name and args match! */
+            return f;
+         }
+      }
+
+      funcs = funcs->outer_scope;
+   }
+
+   return NULL;
+}
index bd44378b698bb1c15ce3cad05b980b9f5e5b4e0e..85e69432aca05acc03e5d053688ed516f3d2a20b 100644 (file)
@@ -26,8 +26,6 @@
 #define SLANG_COMPILE_FUNCTION_H
 
 
-struct slang_code_unit_;
-
 /**
  * Types of functions.
  */
@@ -82,4 +80,13 @@ slang_function_scope_find_by_name(slang_function_scope *, slang_atom, int);
 extern slang_function *
 slang_function_scope_find(slang_function_scope *, slang_function *, int);
 
+extern struct slang_function_ *
+_slang_locate_function(const struct slang_function_scope_ *funcs,
+                       slang_atom name, struct slang_operation_ *params,
+                       GLuint num_params,
+                       const slang_name_space *space,
+                       slang_atom_pool *atoms, slang_info_log *log,
+                       GLboolean *error);
+
+
 #endif /* SLANG_COMPILE_FUNCTION_H */
index 7fa357ca14d99b3ec06d81766213a536f933c34c..430fc10b672fa8899c09567c5935a177c5b3d9a5 100644 (file)
@@ -265,7 +265,7 @@ slang_type_specifier_equal(const slang_type_specifier * x,
 /**
  * As above, but allow float/int casting.
  */
-static GLboolean
+GLboolean
 slang_type_specifier_compatible(const slang_type_specifier * x,
                                 const slang_type_specifier * y)
 {
@@ -787,77 +787,6 @@ _slang_typeof_operation_(slang_operation * op,
 }
 
 
-/**
- * Lookup a function according to name and parameter count/types.
- */
-slang_function *
-_slang_locate_function(const slang_function_scope * funcs, slang_atom a_name,
-                       slang_operation * args, GLuint num_args,
-                       const slang_name_space * space, slang_atom_pool * atoms,
-                       slang_info_log *log, GLboolean *error)
-{
-   slang_typeinfo arg_ti[100];
-   GLuint i;
-
-   *error = GL_FALSE;
-
-   /* determine type of each argument */
-   assert(num_args < 100);
-   for (i = 0; i < num_args; i++) {
-      if (!slang_typeinfo_construct(&arg_ti[i]))
-         return NULL;
-      if (!_slang_typeof_operation_(&args[i], space, &arg_ti[i], atoms, log)) {
-         return NULL;
-      }
-   }
-
-   /* loop over function scopes */
-   while (funcs) {
-
-      /* look for function with matching name and argument/param types */
-      for (i = 0; i < funcs->num_functions; i++) {
-         slang_function *f = &funcs->functions[i];
-         const GLuint haveRetValue = _slang_function_has_return_value(f);
-         GLuint j;
-
-         if (a_name != f->header.a_name)
-            continue;
-         if (f->param_count - haveRetValue != num_args)
-            continue;
-
-         /* compare parameter / argument types */
-         for (j = 0; j < num_args; j++) {
-            if (!slang_type_specifier_compatible(&arg_ti[j].spec,
-                              &f->parameters->variables[j]->type.specifier)) {
-               /* param/arg types don't match */
-               break;
-            }
-
-            /* "out" and "inout" formal parameter requires the actual
-             * argument to be an l-value.
-             */
-            if (!arg_ti[j].can_be_referenced &&
-                (f->parameters->variables[j]->type.qualifier == SLANG_QUAL_OUT ||
-                 f->parameters->variables[j]->type.qualifier == SLANG_QUAL_INOUT)) {
-               /* param is not an lvalue! */
-               *error = GL_TRUE;
-               return NULL;
-            }
-         }
-
-         if (j == num_args) {
-            /* name and args match! */
-            return f;
-         }
-      }
-
-      funcs = funcs->outer_scope;
-   }
-
-   return NULL;
-}
-
-
 /**
  * Determine if a type is a matrix.
  * \return GL_TRUE if is a matrix, GL_FALSE otherwise.
index cde468bc4e245ad7364e62558be6ba601c6d6393..5e57fbb03e3d57d13e3db907d0ed1745efe77104 100644 (file)
@@ -68,15 +68,6 @@ typedef struct slang_assemble_ctx_
 } slang_assemble_ctx;
 
 
-extern struct slang_function_ *
-_slang_locate_function(const struct slang_function_scope_ *funcs,
-                       slang_atom name, struct slang_operation_ *params,
-                       GLuint num_params,
-                       const slang_name_space *space,
-                       slang_atom_pool *atoms, slang_info_log *log,
-                       GLboolean *error);
-
-
 extern GLboolean
 _slang_is_swizzle(const char *field, GLuint rows, slang_swizzle *swz);
 
@@ -159,6 +150,11 @@ slang_type_specifier_equal(const slang_type_specifier *,
                            const slang_type_specifier *);
 
 
+extern GLboolean
+slang_type_specifier_compatible(const slang_type_specifier * x,
+                                const slang_type_specifier * y);
+
+
 typedef struct slang_typeinfo_
 {
    GLboolean can_be_referenced;