1/*
2 * Copyright © 2010 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 */
23
24/**
25 * \file ast_to_hir.c
26 * Convert abstract syntax to to high-level intermediate reprensentation (HIR).
27 *
28 * During the conversion to HIR, the majority of the symantic checking is
29 * preformed on the program.  This includes:
30 *
31 *    * Symbol table management
32 *    * Type checking
33 *    * Function binding
34 *
35 * The majority of this work could be done during parsing, and the parser could
36 * probably generate HIR directly.  However, this results in frequent changes
37 * to the parser code.  Since we do not assume that every system this complier
38 * is built on will have Flex and Bison installed, we have to store the code
39 * generated by these tools in our version control system.  In other parts of
40 * the system we've seen problems where a parser was changed but the generated
41 * code was not committed, merge conflicts where created because two developers
42 * had slightly different versions of Bison installed, etc.
43 *
44 * I have also noticed that running Bison generated parsers in GDB is very
45 * irritating.  When you get a segfault on '$$ = $1->foo', you can't very
46 * well 'print $1' in GDB.
47 *
48 * As a result, my preference is to put as little C code as possible in the
49 * parser (and lexer) sources.
50 */
51
52#include "main/core.h" /* for struct gl_extensions */
53#include "glsl_symbol_table.h"
54#include "glsl_parser_extras.h"
55#include "ast.h"
56#include "glsl_types.h"
57#include "program/hash_table.h"
58#include "ir.h"
59
60static void
61detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
62			       exec_list *instructions);
63
64void
65_mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
66{
67   _mesa_glsl_initialize_variables(instructions, state);
68
69   state->symbols->language_version = state->language_version;
70
71   state->current_function = NULL;
72
73   state->toplevel_ir = instructions;
74
75   /* Section 4.2 of the GLSL 1.20 specification states:
76    * "The built-in functions are scoped in a scope outside the global scope
77    *  users declare global variables in.  That is, a shader's global scope,
78    *  available for user-defined functions and global variables, is nested
79    *  inside the scope containing the built-in functions."
80    *
81    * Since built-in functions like ftransform() access built-in variables,
82    * it follows that those must be in the outer scope as well.
83    *
84    * We push scope here to create this nesting effect...but don't pop.
85    * This way, a shader's globals are still in the symbol table for use
86    * by the linker.
87    */
88   state->symbols->push_scope();
89
90   foreach_list_typed (ast_node, ast, link, & state->translation_unit)
91      ast->hir(instructions, state);
92
93   detect_recursion_unlinked(state, instructions);
94   detect_conflicting_assignments(state, instructions);
95
96   state->toplevel_ir = NULL;
97}
98
99
100/**
101 * If a conversion is available, convert one operand to a different type
102 *
103 * The \c from \c ir_rvalue is converted "in place".
104 *
105 * \param to     Type that the operand it to be converted to
106 * \param from   Operand that is being converted
107 * \param state  GLSL compiler state
108 *
109 * \return
110 * If a conversion is possible (or unnecessary), \c true is returned.
111 * Otherwise \c false is returned.
112 */
113bool
114apply_implicit_conversion(const glsl_type *to, ir_rvalue * &from,
115			  struct _mesa_glsl_parse_state *state)
116{
117   void *ctx = state;
118   if (to->base_type == from->type->base_type)
119      return true;
120
121   /* This conversion was added in GLSL 1.20.  If the compilation mode is
122    * GLSL 1.10, the conversion is skipped.
123    */
124   if (state->language_version < 120)
125      return false;
126
127   /* From page 27 (page 33 of the PDF) of the GLSL 1.50 spec:
128    *
129    *    "There are no implicit array or structure conversions. For
130    *    example, an array of int cannot be implicitly converted to an
131    *    array of float. There are no implicit conversions between
132    *    signed and unsigned integers."
133    */
134   /* FINISHME: The above comment is partially a lie.  There is int/uint
135    * FINISHME: conversion for immediate constants.
136    */
137   if (!to->is_float() || !from->type->is_numeric())
138      return false;
139
140   /* Convert to a floating point type with the same number of components
141    * as the original type - i.e. int to float, not int to vec4.
142    */
143   to = glsl_type::get_instance(GLSL_TYPE_FLOAT, from->type->vector_elements,
144			        from->type->matrix_columns);
145
146   switch (from->type->base_type) {
147   case GLSL_TYPE_INT:
148      from = new(ctx) ir_expression(ir_unop_i2f, to, from, NULL);
149      break;
150   case GLSL_TYPE_UINT:
151      from = new(ctx) ir_expression(ir_unop_u2f, to, from, NULL);
152      break;
153   case GLSL_TYPE_BOOL:
154      from = new(ctx) ir_expression(ir_unop_b2f, to, from, NULL);
155      break;
156   default:
157      assert(0);
158   }
159
160   return true;
161}
162
163
164static const struct glsl_type *
165arithmetic_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b,
166		       bool multiply,
167		       struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
168{
169   const glsl_type *type_a = value_a->type;
170   const glsl_type *type_b = value_b->type;
171
172   /* From GLSL 1.50 spec, page 56:
173    *
174    *    "The arithmetic binary operators add (+), subtract (-),
175    *    multiply (*), and divide (/) operate on integer and
176    *    floating-point scalars, vectors, and matrices."
177    */
178   if (!type_a->is_numeric() || !type_b->is_numeric()) {
179      _mesa_glsl_error(loc, state,
180		       "Operands to arithmetic operators must be numeric");
181      return glsl_type::error_type;
182   }
183
184
185   /*    "If one operand is floating-point based and the other is
186    *    not, then the conversions from Section 4.1.10 "Implicit
187    *    Conversions" are applied to the non-floating-point-based operand."
188    */
189   if (!apply_implicit_conversion(type_a, value_b, state)
190       && !apply_implicit_conversion(type_b, value_a, state)) {
191      _mesa_glsl_error(loc, state,
192		       "Could not implicitly convert operands to "
193		       "arithmetic operator");
194      return glsl_type::error_type;
195   }
196   type_a = value_a->type;
197   type_b = value_b->type;
198
199   /*    "If the operands are integer types, they must both be signed or
200    *    both be unsigned."
201    *
202    * From this rule and the preceeding conversion it can be inferred that
203    * both types must be GLSL_TYPE_FLOAT, or GLSL_TYPE_UINT, or GLSL_TYPE_INT.
204    * The is_numeric check above already filtered out the case where either
205    * type is not one of these, so now the base types need only be tested for
206    * equality.
207    */
208   if (type_a->base_type != type_b->base_type) {
209      _mesa_glsl_error(loc, state,
210		       "base type mismatch for arithmetic operator");
211      return glsl_type::error_type;
212   }
213
214   /*    "All arithmetic binary operators result in the same fundamental type
215    *    (signed integer, unsigned integer, or floating-point) as the
216    *    operands they operate on, after operand type conversion. After
217    *    conversion, the following cases are valid
218    *
219    *    * The two operands are scalars. In this case the operation is
220    *      applied, resulting in a scalar."
221    */
222   if (type_a->is_scalar() && type_b->is_scalar())
223      return type_a;
224
225   /*   "* One operand is a scalar, and the other is a vector or matrix.
226    *      In this case, the scalar operation is applied independently to each
227    *      component of the vector or matrix, resulting in the same size
228    *      vector or matrix."
229    */
230   if (type_a->is_scalar()) {
231      if (!type_b->is_scalar())
232	 return type_b;
233   } else if (type_b->is_scalar()) {
234      return type_a;
235   }
236
237   /* All of the combinations of <scalar, scalar>, <vector, scalar>,
238    * <scalar, vector>, <scalar, matrix>, and <matrix, scalar> have been
239    * handled.
240    */
241   assert(!type_a->is_scalar());
242   assert(!type_b->is_scalar());
243
244   /*   "* The two operands are vectors of the same size. In this case, the
245    *      operation is done component-wise resulting in the same size
246    *      vector."
247    */
248   if (type_a->is_vector() && type_b->is_vector()) {
249      if (type_a == type_b) {
250	 return type_a;
251      } else {
252	 _mesa_glsl_error(loc, state,
253			  "vector size mismatch for arithmetic operator");
254	 return glsl_type::error_type;
255      }
256   }
257
258   /* All of the combinations of <scalar, scalar>, <vector, scalar>,
259    * <scalar, vector>, <scalar, matrix>, <matrix, scalar>, and
260    * <vector, vector> have been handled.  At least one of the operands must
261    * be matrix.  Further, since there are no integer matrix types, the base
262    * type of both operands must be float.
263    */
264   assert(type_a->is_matrix() || type_b->is_matrix());
265   assert(type_a->base_type == GLSL_TYPE_FLOAT);
266   assert(type_b->base_type == GLSL_TYPE_FLOAT);
267
268   /*   "* The operator is add (+), subtract (-), or divide (/), and the
269    *      operands are matrices with the same number of rows and the same
270    *      number of columns. In this case, the operation is done component-
271    *      wise resulting in the same size matrix."
272    *    * The operator is multiply (*), where both operands are matrices or
273    *      one operand is a vector and the other a matrix. A right vector
274    *      operand is treated as a column vector and a left vector operand as a
275    *      row vector. In all these cases, it is required that the number of
276    *      columns of the left operand is equal to the number of rows of the
277    *      right operand. Then, the multiply (*) operation does a linear
278    *      algebraic multiply, yielding an object that has the same number of
279    *      rows as the left operand and the same number of columns as the right
280    *      operand. Section 5.10 "Vector and Matrix Operations" explains in
281    *      more detail how vectors and matrices are operated on."
282    */
283   if (! multiply) {
284      if (type_a == type_b)
285	 return type_a;
286   } else {
287      if (type_a->is_matrix() && type_b->is_matrix()) {
288	 /* Matrix multiply.  The columns of A must match the rows of B.  Given
289	  * the other previously tested constraints, this means the vector type
290	  * of a row from A must be the same as the vector type of a column from
291	  * B.
292	  */
293	 if (type_a->row_type() == type_b->column_type()) {
294	    /* The resulting matrix has the number of columns of matrix B and
295	     * the number of rows of matrix A.  We get the row count of A by
296	     * looking at the size of a vector that makes up a column.  The
297	     * transpose (size of a row) is done for B.
298	     */
299	    const glsl_type *const type =
300	       glsl_type::get_instance(type_a->base_type,
301				       type_a->column_type()->vector_elements,
302				       type_b->row_type()->vector_elements);
303	    assert(type != glsl_type::error_type);
304
305	    return type;
306	 }
307      } else if (type_a->is_matrix()) {
308	 /* A is a matrix and B is a column vector.  Columns of A must match
309	  * rows of B.  Given the other previously tested constraints, this
310	  * means the vector type of a row from A must be the same as the
311	  * vector the type of B.
312	  */
313	 if (type_a->row_type() == type_b) {
314	    /* The resulting vector has a number of elements equal to
315	     * the number of rows of matrix A. */
316	    const glsl_type *const type =
317	       glsl_type::get_instance(type_a->base_type,
318				       type_a->column_type()->vector_elements,
319				       1);
320	    assert(type != glsl_type::error_type);
321
322	    return type;
323	 }
324      } else {
325	 assert(type_b->is_matrix());
326
327	 /* A is a row vector and B is a matrix.  Columns of A must match rows
328	  * of B.  Given the other previously tested constraints, this means
329	  * the type of A must be the same as the vector type of a column from
330	  * B.
331	  */
332	 if (type_a == type_b->column_type()) {
333	    /* The resulting vector has a number of elements equal to
334	     * the number of columns of matrix B. */
335	    const glsl_type *const type =
336	       glsl_type::get_instance(type_a->base_type,
337				       type_b->row_type()->vector_elements,
338				       1);
339	    assert(type != glsl_type::error_type);
340
341	    return type;
342	 }
343      }
344
345      _mesa_glsl_error(loc, state, "size mismatch for matrix multiplication");
346      return glsl_type::error_type;
347   }
348
349
350   /*    "All other cases are illegal."
351    */
352   _mesa_glsl_error(loc, state, "type mismatch");
353   return glsl_type::error_type;
354}
355
356
357static const struct glsl_type *
358unary_arithmetic_result_type(const struct glsl_type *type,
359			     struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
360{
361   /* From GLSL 1.50 spec, page 57:
362    *
363    *    "The arithmetic unary operators negate (-), post- and pre-increment
364    *     and decrement (-- and ++) operate on integer or floating-point
365    *     values (including vectors and matrices). All unary operators work
366    *     component-wise on their operands. These result with the same type
367    *     they operated on."
368    */
369   if (!type->is_numeric()) {
370      _mesa_glsl_error(loc, state,
371		       "Operands to arithmetic operators must be numeric");
372      return glsl_type::error_type;
373   }
374
375   return type;
376}
377
378/**
379 * \brief Return the result type of a bit-logic operation.
380 *
381 * If the given types to the bit-logic operator are invalid, return
382 * glsl_type::error_type.
383 *
384 * \param type_a Type of LHS of bit-logic op
385 * \param type_b Type of RHS of bit-logic op
386 */
387static const struct glsl_type *
388bit_logic_result_type(const struct glsl_type *type_a,
389                      const struct glsl_type *type_b,
390                      ast_operators op,
391                      struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
392{
393    if (state->language_version < 130) {
394       _mesa_glsl_error(loc, state, "bit operations require GLSL 1.30");
395       return glsl_type::error_type;
396    }
397
398    /* From page 50 (page 56 of PDF) of GLSL 1.30 spec:
399     *
400     *     "The bitwise operators and (&), exclusive-or (^), and inclusive-or
401     *     (|). The operands must be of type signed or unsigned integers or
402     *     integer vectors."
403     */
404    if (!type_a->is_integer()) {
405       _mesa_glsl_error(loc, state, "LHS of `%s' must be an integer",
406                         ast_expression::operator_string(op));
407       return glsl_type::error_type;
408    }
409    if (!type_b->is_integer()) {
410       _mesa_glsl_error(loc, state, "RHS of `%s' must be an integer",
411                        ast_expression::operator_string(op));
412       return glsl_type::error_type;
413    }
414
415    /*     "The fundamental types of the operands (signed or unsigned) must
416     *     match,"
417     */
418    if (type_a->base_type != type_b->base_type) {
419       _mesa_glsl_error(loc, state, "operands of `%s' must have the same "
420                        "base type", ast_expression::operator_string(op));
421       return glsl_type::error_type;
422    }
423
424    /*     "The operands cannot be vectors of differing size." */
425    if (type_a->is_vector() &&
426        type_b->is_vector() &&
427        type_a->vector_elements != type_b->vector_elements) {
428       _mesa_glsl_error(loc, state, "operands of `%s' cannot be vectors of "
429                        "different sizes", ast_expression::operator_string(op));
430       return glsl_type::error_type;
431    }
432
433    /*     "If one operand is a scalar and the other a vector, the scalar is
434     *     applied component-wise to the vector, resulting in the same type as
435     *     the vector. The fundamental types of the operands [...] will be the
436     *     resulting fundamental type."
437     */
438    if (type_a->is_scalar())
439        return type_b;
440    else
441        return type_a;
442}
443
444static const struct glsl_type *
445modulus_result_type(const struct glsl_type *type_a,
446		    const struct glsl_type *type_b,
447		    struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
448{
449   if (state->language_version < 130) {
450      _mesa_glsl_error(loc, state,
451                       "operator '%%' is reserved in %s",
452                       state->version_string);
453      return glsl_type::error_type;
454   }
455
456   /* From GLSL 1.50 spec, page 56:
457    *    "The operator modulus (%) operates on signed or unsigned integers or
458    *    integer vectors. The operand types must both be signed or both be
459    *    unsigned."
460    */
461   if (!type_a->is_integer()) {
462      _mesa_glsl_error(loc, state, "LHS of operator %% must be an integer.");
463      return glsl_type::error_type;
464   }
465   if (!type_b->is_integer()) {
466      _mesa_glsl_error(loc, state, "RHS of operator %% must be an integer.");
467      return glsl_type::error_type;
468   }
469   if (type_a->base_type != type_b->base_type) {
470      _mesa_glsl_error(loc, state,
471		       "operands of %% must have the same base type");
472      return glsl_type::error_type;
473   }
474
475   /*    "The operands cannot be vectors of differing size. If one operand is
476    *    a scalar and the other vector, then the scalar is applied component-
477    *    wise to the vector, resulting in the same type as the vector. If both
478    *    are vectors of the same size, the result is computed component-wise."
479    */
480   if (type_a->is_vector()) {
481      if (!type_b->is_vector()
482	  || (type_a->vector_elements == type_b->vector_elements))
483	 return type_a;
484   } else
485      return type_b;
486
487   /*    "The operator modulus (%) is not defined for any other data types
488    *    (non-integer types)."
489    */
490   _mesa_glsl_error(loc, state, "type mismatch");
491   return glsl_type::error_type;
492}
493
494
495static const struct glsl_type *
496relational_result_type(ir_rvalue * &value_a, ir_rvalue * &value_b,
497		       struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
498{
499   const glsl_type *type_a = value_a->type;
500   const glsl_type *type_b = value_b->type;
501
502   /* From GLSL 1.50 spec, page 56:
503    *    "The relational operators greater than (>), less than (<), greater
504    *    than or equal (>=), and less than or equal (<=) operate only on
505    *    scalar integer and scalar floating-point expressions."
506    */
507   if (!type_a->is_numeric()
508       || !type_b->is_numeric()
509       || !type_a->is_scalar()
510       || !type_b->is_scalar()) {
511      _mesa_glsl_error(loc, state,
512		       "Operands to relational operators must be scalar and "
513		       "numeric");
514      return glsl_type::error_type;
515   }
516
517   /*    "Either the operands' types must match, or the conversions from
518    *    Section 4.1.10 "Implicit Conversions" will be applied to the integer
519    *    operand, after which the types must match."
520    */
521   if (!apply_implicit_conversion(type_a, value_b, state)
522       && !apply_implicit_conversion(type_b, value_a, state)) {
523      _mesa_glsl_error(loc, state,
524		       "Could not implicitly convert operands to "
525		       "relational operator");
526      return glsl_type::error_type;
527   }
528   type_a = value_a->type;
529   type_b = value_b->type;
530
531   if (type_a->base_type != type_b->base_type) {
532      _mesa_glsl_error(loc, state, "base type mismatch");
533      return glsl_type::error_type;
534   }
535
536   /*    "The result is scalar Boolean."
537    */
538   return glsl_type::bool_type;
539}
540
541/**
542 * \brief Return the result type of a bit-shift operation.
543 *
544 * If the given types to the bit-shift operator are invalid, return
545 * glsl_type::error_type.
546 *
547 * \param type_a Type of LHS of bit-shift op
548 * \param type_b Type of RHS of bit-shift op
549 */
550static const struct glsl_type *
551shift_result_type(const struct glsl_type *type_a,
552                  const struct glsl_type *type_b,
553                  ast_operators op,
554                  struct _mesa_glsl_parse_state *state, YYLTYPE *loc)
555{
556   if (state->language_version < 130) {
557      _mesa_glsl_error(loc, state, "bit operations require GLSL 1.30");
558      return glsl_type::error_type;
559   }
560
561   /* From page 50 (page 56 of the PDF) of the GLSL 1.30 spec:
562    *
563    *     "The shift operators (<<) and (>>). For both operators, the operands
564    *     must be signed or unsigned integers or integer vectors. One operand
565    *     can be signed while the other is unsigned."
566    */
567   if (!type_a->is_integer()) {
568      _mesa_glsl_error(loc, state, "LHS of operator %s must be an integer or "
569              "integer vector", ast_expression::operator_string(op));
570     return glsl_type::error_type;
571
572   }
573   if (!type_b->is_integer()) {
574      _mesa_glsl_error(loc, state, "RHS of operator %s must be an integer or "
575              "integer vector", ast_expression::operator_string(op));
576     return glsl_type::error_type;
577   }
578
579   /*     "If the first operand is a scalar, the second operand has to be
580    *     a scalar as well."
581    */
582   if (type_a->is_scalar() && !type_b->is_scalar()) {
583      _mesa_glsl_error(loc, state, "If the first operand of %s is scalar, the "
584              "second must be scalar as well",
585              ast_expression::operator_string(op));
586     return glsl_type::error_type;
587   }
588
589   /* If both operands are vectors, check that they have same number of
590    * elements.
591    */
592   if (type_a->is_vector() &&
593      type_b->is_vector() &&
594      type_a->vector_elements != type_b->vector_elements) {
595      _mesa_glsl_error(loc, state, "Vector operands to operator %s must "
596              "have same number of elements",
597              ast_expression::operator_string(op));
598     return glsl_type::error_type;
599   }
600
601   /*     "In all cases, the resulting type will be the same type as the left
602    *     operand."
603    */
604   return type_a;
605}
606
607/**
608 * Validates that a value can be assigned to a location with a specified type
609 *
610 * Validates that \c rhs can be assigned to some location.  If the types are
611 * not an exact match but an automatic conversion is possible, \c rhs will be
612 * converted.
613 *
614 * \return
615 * \c NULL if \c rhs cannot be assigned to a location with type \c lhs_type.
616 * Otherwise the actual RHS to be assigned will be returned.  This may be
617 * \c rhs, or it may be \c rhs after some type conversion.
618 *
619 * \note
620 * In addition to being used for assignments, this function is used to
621 * type-check return values.
622 */
623ir_rvalue *
624validate_assignment(struct _mesa_glsl_parse_state *state,
625		    const glsl_type *lhs_type, ir_rvalue *rhs,
626		    bool is_initializer)
627{
628   /* If there is already some error in the RHS, just return it.  Anything
629    * else will lead to an avalanche of error message back to the user.
630    */
631   if (rhs->type->is_error())
632      return rhs;
633
634   /* If the types are identical, the assignment can trivially proceed.
635    */
636   if (rhs->type == lhs_type)
637      return rhs;
638
639   /* If the array element types are the same and the size of the LHS is zero,
640    * the assignment is okay for initializers embedded in variable
641    * declarations.
642    *
643    * Note: Whole-array assignments are not permitted in GLSL 1.10, but this
644    * is handled by ir_dereference::is_lvalue.
645    */
646   if (is_initializer && lhs_type->is_array() && rhs->type->is_array()
647       && (lhs_type->element_type() == rhs->type->element_type())
648       && (lhs_type->array_size() == 0)) {
649      return rhs;
650   }
651
652   /* Check for implicit conversion in GLSL 1.20 */
653   if (apply_implicit_conversion(lhs_type, rhs, state)) {
654      if (rhs->type == lhs_type)
655	 return rhs;
656   }
657
658   return NULL;
659}
660
661static void
662mark_whole_array_access(ir_rvalue *access)
663{
664   ir_dereference_variable *deref = access->as_dereference_variable();
665
666   if (deref && deref->var) {
667      deref->var->max_array_access = deref->type->length - 1;
668   }
669}
670
671ir_rvalue *
672do_assignment(exec_list *instructions, struct _mesa_glsl_parse_state *state,
673	      const char *non_lvalue_description,
674	      ir_rvalue *lhs, ir_rvalue *rhs, bool is_initializer,
675	      YYLTYPE lhs_loc)
676{
677   void *ctx = state;
678   bool error_emitted = (lhs->type->is_error() || rhs->type->is_error());
679
680   ir_variable *lhs_var = lhs->variable_referenced();
681   if (lhs_var)
682      lhs_var->assigned = true;
683
684   if (!error_emitted) {
685      if (non_lvalue_description != NULL) {
686         _mesa_glsl_error(&lhs_loc, state,
687                          "assignment to %s",
688			  non_lvalue_description);
689	 error_emitted = true;
690      } else if (lhs->variable_referenced() != NULL
691		 && lhs->variable_referenced()->read_only) {
692         _mesa_glsl_error(&lhs_loc, state,
693                          "assignment to read-only variable '%s'",
694                          lhs->variable_referenced()->name);
695         error_emitted = true;
696
697      } else if (state->language_version <= 110 && lhs->type->is_array()) {
698	 /* From page 32 (page 38 of the PDF) of the GLSL 1.10 spec:
699	  *
700	  *    "Other binary or unary expressions, non-dereferenced
701	  *     arrays, function names, swizzles with repeated fields,
702	  *     and constants cannot be l-values."
703	  */
704	 _mesa_glsl_error(&lhs_loc, state, "whole array assignment is not "
705			  "allowed in GLSL 1.10 or GLSL ES 1.00.");
706	 error_emitted = true;
707      } else if (!lhs->is_lvalue()) {
708	 _mesa_glsl_error(& lhs_loc, state, "non-lvalue in assignment");
709	 error_emitted = true;
710      }
711   }
712
713   ir_rvalue *new_rhs =
714      validate_assignment(state, lhs->type, rhs, is_initializer);
715   if (new_rhs == NULL) {
716      _mesa_glsl_error(& lhs_loc, state, "type mismatch");
717   } else {
718      rhs = new_rhs;
719
720      /* If the LHS array was not declared with a size, it takes it size from
721       * the RHS.  If the LHS is an l-value and a whole array, it must be a
722       * dereference of a variable.  Any other case would require that the LHS
723       * is either not an l-value or not a whole array.
724       */
725      if (lhs->type->array_size() == 0) {
726	 ir_dereference *const d = lhs->as_dereference();
727
728	 assert(d != NULL);
729
730	 ir_variable *const var = d->variable_referenced();
731
732	 assert(var != NULL);
733
734	 if (var->max_array_access >= unsigned(rhs->type->array_size())) {
735	    /* FINISHME: This should actually log the location of the RHS. */
736	    _mesa_glsl_error(& lhs_loc, state, "array size must be > %u due to "
737			     "previous access",
738			     var->max_array_access);
739	 }
740
741	 var->type = glsl_type::get_array_instance(lhs->type->element_type(),
742						   rhs->type->array_size());
743	 d->type = var->type;
744      }
745      mark_whole_array_access(rhs);
746      mark_whole_array_access(lhs);
747   }
748
749   /* Most callers of do_assignment (assign, add_assign, pre_inc/dec,
750    * but not post_inc) need the converted assigned value as an rvalue
751    * to handle things like:
752    *
753    * i = j += 1;
754    *
755    * So we always just store the computed value being assigned to a
756    * temporary and return a deref of that temporary.  If the rvalue
757    * ends up not being used, the temp will get copy-propagated out.
758    */
759   ir_variable *var = new(ctx) ir_variable(rhs->type, "assignment_tmp",
760					   ir_var_temporary);
761   ir_dereference_variable *deref_var = new(ctx) ir_dereference_variable(var);
762   instructions->push_tail(var);
763   instructions->push_tail(new(ctx) ir_assignment(deref_var, rhs));
764   deref_var = new(ctx) ir_dereference_variable(var);
765
766   if (!error_emitted)
767      instructions->push_tail(new(ctx) ir_assignment(lhs, deref_var));
768
769   return new(ctx) ir_dereference_variable(var);
770}
771
772static ir_rvalue *
773get_lvalue_copy(exec_list *instructions, ir_rvalue *lvalue)
774{
775   void *ctx = ralloc_parent(lvalue);
776   ir_variable *var;
777
778   var = new(ctx) ir_variable(lvalue->type, "_post_incdec_tmp",
779			      ir_var_temporary);
780   instructions->push_tail(var);
781   var->mode = ir_var_auto;
782
783   instructions->push_tail(new(ctx) ir_assignment(new(ctx) ir_dereference_variable(var),
784						  lvalue));
785
786   return new(ctx) ir_dereference_variable(var);
787}
788
789
790ir_rvalue *
791ast_node::hir(exec_list *instructions,
792	      struct _mesa_glsl_parse_state *state)
793{
794   (void) instructions;
795   (void) state;
796
797   return NULL;
798}
799
800static ir_rvalue *
801do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1)
802{
803   int join_op;
804   ir_rvalue *cmp = NULL;
805
806   if (operation == ir_binop_all_equal)
807      join_op = ir_binop_logic_and;
808   else
809      join_op = ir_binop_logic_or;
810
811   switch (op0->type->base_type) {
812   case GLSL_TYPE_FLOAT:
813   case GLSL_TYPE_UINT:
814   case GLSL_TYPE_INT:
815   case GLSL_TYPE_BOOL:
816      return new(mem_ctx) ir_expression(operation, op0, op1);
817
818   case GLSL_TYPE_ARRAY: {
819      for (unsigned int i = 0; i < op0->type->length; i++) {
820	 ir_rvalue *e0, *e1, *result;
821
822	 e0 = new(mem_ctx) ir_dereference_array(op0->clone(mem_ctx, NULL),
823						new(mem_ctx) ir_constant(i));
824	 e1 = new(mem_ctx) ir_dereference_array(op1->clone(mem_ctx, NULL),
825						new(mem_ctx) ir_constant(i));
826	 result = do_comparison(mem_ctx, operation, e0, e1);
827
828	 if (cmp) {
829	    cmp = new(mem_ctx) ir_expression(join_op, cmp, result);
830	 } else {
831	    cmp = result;
832	 }
833      }
834
835      mark_whole_array_access(op0);
836      mark_whole_array_access(op1);
837      break;
838   }
839
840   case GLSL_TYPE_STRUCT: {
841      for (unsigned int i = 0; i < op0->type->length; i++) {
842	 ir_rvalue *e0, *e1, *result;
843	 const char *field_name = op0->type->fields.structure[i].name;
844
845	 e0 = new(mem_ctx) ir_dereference_record(op0->clone(mem_ctx, NULL),
846						 field_name);
847	 e1 = new(mem_ctx) ir_dereference_record(op1->clone(mem_ctx, NULL),
848						 field_name);
849	 result = do_comparison(mem_ctx, operation, e0, e1);
850
851	 if (cmp) {
852	    cmp = new(mem_ctx) ir_expression(join_op, cmp, result);
853	 } else {
854	    cmp = result;
855	 }
856      }
857      break;
858   }
859
860   case GLSL_TYPE_ERROR:
861   case GLSL_TYPE_VOID:
862   case GLSL_TYPE_SAMPLER:
863      /* I assume a comparison of a struct containing a sampler just
864       * ignores the sampler present in the type.
865       */
866      break;
867
868   default:
869      assert(!"Should not get here.");
870      break;
871   }
872
873   if (cmp == NULL)
874      cmp = new(mem_ctx) ir_constant(true);
875
876   return cmp;
877}
878
879/* For logical operations, we want to ensure that the operands are
880 * scalar booleans.  If it isn't, emit an error and return a constant
881 * boolean to avoid triggering cascading error messages.
882 */
883ir_rvalue *
884get_scalar_boolean_operand(exec_list *instructions,
885			   struct _mesa_glsl_parse_state *state,
886			   ast_expression *parent_expr,
887			   int operand,
888			   const char *operand_name,
889			   bool *error_emitted)
890{
891   ast_expression *expr = parent_expr->subexpressions[operand];
892   void *ctx = state;
893   ir_rvalue *val = expr->hir(instructions, state);
894
895   if (val->type->is_boolean() && val->type->is_scalar())
896      return val;
897
898   if (!*error_emitted) {
899      YYLTYPE loc = expr->get_location();
900      _mesa_glsl_error(&loc, state, "%s of `%s' must be scalar boolean",
901		       operand_name,
902		       parent_expr->operator_string(parent_expr->oper));
903      *error_emitted = true;
904   }
905
906   return new(ctx) ir_constant(true);
907}
908
909/**
910 * If name refers to a builtin array whose maximum allowed size is less than
911 * size, report an error and return true.  Otherwise return false.
912 */
913static bool
914check_builtin_array_max_size(const char *name, unsigned size,
915                             YYLTYPE loc, struct _mesa_glsl_parse_state *state)
916{
917   if ((strcmp("gl_TexCoord", name) == 0)
918       && (size > state->Const.MaxTextureCoords)) {
919      /* From page 54 (page 60 of the PDF) of the GLSL 1.20 spec:
920       *
921       *     "The size [of gl_TexCoord] can be at most
922       *     gl_MaxTextureCoords."
923       */
924      _mesa_glsl_error(&loc, state, "`gl_TexCoord' array size cannot "
925                       "be larger than gl_MaxTextureCoords (%u)\n",
926                       state->Const.MaxTextureCoords);
927      return true;
928   } else if (strcmp("gl_ClipDistance", name) == 0
929              && size > state->Const.MaxClipPlanes) {
930      /* From section 7.1 (Vertex Shader Special Variables) of the
931       * GLSL 1.30 spec:
932       *
933       *   "The gl_ClipDistance array is predeclared as unsized and
934       *   must be sized by the shader either redeclaring it with a
935       *   size or indexing it only with integral constant
936       *   expressions. ... The size can be at most
937       *   gl_MaxClipDistances."
938       */
939      _mesa_glsl_error(&loc, state, "`gl_ClipDistance' array size cannot "
940                       "be larger than gl_MaxClipDistances (%u)\n",
941                       state->Const.MaxClipPlanes);
942      return true;
943   }
944   return false;
945}
946
947/**
948 * Create the constant 1, of a which is appropriate for incrementing and
949 * decrementing values of the given GLSL type.  For example, if type is vec4,
950 * this creates a constant value of 1.0 having type float.
951 *
952 * If the given type is invalid for increment and decrement operators, return
953 * a floating point 1--the error will be detected later.
954 */
955static ir_rvalue *
956constant_one_for_inc_dec(void *ctx, const glsl_type *type)
957{
958   switch (type->base_type) {
959   case GLSL_TYPE_UINT:
960      return new(ctx) ir_constant((unsigned) 1);
961   case GLSL_TYPE_INT:
962      return new(ctx) ir_constant(1);
963   default:
964   case GLSL_TYPE_FLOAT:
965      return new(ctx) ir_constant(1.0f);
966   }
967}
968
969ir_rvalue *
970ast_expression::hir(exec_list *instructions,
971		    struct _mesa_glsl_parse_state *state)
972{
973   void *ctx = state;
974   static const int operations[AST_NUM_OPERATORS] = {
975      -1,               /* ast_assign doesn't convert to ir_expression. */
976      -1,               /* ast_plus doesn't convert to ir_expression. */
977      ir_unop_neg,
978      ir_binop_add,
979      ir_binop_sub,
980      ir_binop_mul,
981      ir_binop_div,
982      ir_binop_mod,
983      ir_binop_lshift,
984      ir_binop_rshift,
985      ir_binop_less,
986      ir_binop_greater,
987      ir_binop_lequal,
988      ir_binop_gequal,
989      ir_binop_all_equal,
990      ir_binop_any_nequal,
991      ir_binop_bit_and,
992      ir_binop_bit_xor,
993      ir_binop_bit_or,
994      ir_unop_bit_not,
995      ir_binop_logic_and,
996      ir_binop_logic_xor,
997      ir_binop_logic_or,
998      ir_unop_logic_not,
999
1000      /* Note: The following block of expression types actually convert
1001       * to multiple IR instructions.
1002       */
1003      ir_binop_mul,     /* ast_mul_assign */
1004      ir_binop_div,     /* ast_div_assign */
1005      ir_binop_mod,     /* ast_mod_assign */
1006      ir_binop_add,     /* ast_add_assign */
1007      ir_binop_sub,     /* ast_sub_assign */
1008      ir_binop_lshift,  /* ast_ls_assign */
1009      ir_binop_rshift,  /* ast_rs_assign */
1010      ir_binop_bit_and, /* ast_and_assign */
1011      ir_binop_bit_xor, /* ast_xor_assign */
1012      ir_binop_bit_or,  /* ast_or_assign */
1013
1014      -1,               /* ast_conditional doesn't convert to ir_expression. */
1015      ir_binop_add,     /* ast_pre_inc. */
1016      ir_binop_sub,     /* ast_pre_dec. */
1017      ir_binop_add,     /* ast_post_inc. */
1018      ir_binop_sub,     /* ast_post_dec. */
1019      -1,               /* ast_field_selection doesn't conv to ir_expression. */
1020      -1,               /* ast_array_index doesn't convert to ir_expression. */
1021      -1,               /* ast_function_call doesn't conv to ir_expression. */
1022      -1,               /* ast_identifier doesn't convert to ir_expression. */
1023      -1,               /* ast_int_constant doesn't convert to ir_expression. */
1024      -1,               /* ast_uint_constant doesn't conv to ir_expression. */
1025      -1,               /* ast_float_constant doesn't conv to ir_expression. */
1026      -1,               /* ast_bool_constant doesn't conv to ir_expression. */
1027      -1,               /* ast_sequence doesn't convert to ir_expression. */
1028   };
1029   ir_rvalue *result = NULL;
1030   ir_rvalue *op[3];
1031   const struct glsl_type *type; /* a temporary variable for switch cases */
1032   bool error_emitted = false;
1033   YYLTYPE loc;
1034
1035   loc = this->get_location();
1036
1037   switch (this->oper) {
1038   case ast_assign: {
1039      op[0] = this->subexpressions[0]->hir(instructions, state);
1040      op[1] = this->subexpressions[1]->hir(instructions, state);
1041
1042      result = do_assignment(instructions, state,
1043			     this->subexpressions[0]->non_lvalue_description,
1044			     op[0], op[1], false,
1045			     this->subexpressions[0]->get_location());
1046      error_emitted = result->type->is_error();
1047      break;
1048   }
1049
1050   case ast_plus:
1051      op[0] = this->subexpressions[0]->hir(instructions, state);
1052
1053      type = unary_arithmetic_result_type(op[0]->type, state, & loc);
1054
1055      error_emitted = type->is_error();
1056
1057      result = op[0];
1058      break;
1059
1060   case ast_neg:
1061      op[0] = this->subexpressions[0]->hir(instructions, state);
1062
1063      type = unary_arithmetic_result_type(op[0]->type, state, & loc);
1064
1065      error_emitted = type->is_error();
1066
1067      result = new(ctx) ir_expression(operations[this->oper], type,
1068				      op[0], NULL);
1069      break;
1070
1071   case ast_add:
1072   case ast_sub:
1073   case ast_mul:
1074   case ast_div:
1075      op[0] = this->subexpressions[0]->hir(instructions, state);
1076      op[1] = this->subexpressions[1]->hir(instructions, state);
1077
1078      type = arithmetic_result_type(op[0], op[1],
1079				    (this->oper == ast_mul),
1080				    state, & loc);
1081      error_emitted = type->is_error();
1082
1083      result = new(ctx) ir_expression(operations[this->oper], type,
1084				      op[0], op[1]);
1085      break;
1086
1087   case ast_mod:
1088      op[0] = this->subexpressions[0]->hir(instructions, state);
1089      op[1] = this->subexpressions[1]->hir(instructions, state);
1090
1091      type = modulus_result_type(op[0]->type, op[1]->type, state, & loc);
1092
1093      assert(operations[this->oper] == ir_binop_mod);
1094
1095      result = new(ctx) ir_expression(operations[this->oper], type,
1096				      op[0], op[1]);
1097      error_emitted = type->is_error();
1098      break;
1099
1100   case ast_lshift:
1101   case ast_rshift:
1102       if (state->language_version < 130) {
1103          _mesa_glsl_error(&loc, state, "operator %s requires GLSL 1.30",
1104              operator_string(this->oper));
1105          error_emitted = true;
1106       }
1107
1108       op[0] = this->subexpressions[0]->hir(instructions, state);
1109       op[1] = this->subexpressions[1]->hir(instructions, state);
1110       type = shift_result_type(op[0]->type, op[1]->type, this->oper, state,
1111                                &loc);
1112       result = new(ctx) ir_expression(operations[this->oper], type,
1113                                       op[0], op[1]);
1114       error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1115       break;
1116
1117   case ast_less:
1118   case ast_greater:
1119   case ast_lequal:
1120   case ast_gequal:
1121      op[0] = this->subexpressions[0]->hir(instructions, state);
1122      op[1] = this->subexpressions[1]->hir(instructions, state);
1123
1124      type = relational_result_type(op[0], op[1], state, & loc);
1125
1126      /* The relational operators must either generate an error or result
1127       * in a scalar boolean.  See page 57 of the GLSL 1.50 spec.
1128       */
1129      assert(type->is_error()
1130	     || ((type->base_type == GLSL_TYPE_BOOL)
1131		 && type->is_scalar()));
1132
1133      result = new(ctx) ir_expression(operations[this->oper], type,
1134				      op[0], op[1]);
1135      error_emitted = type->is_error();
1136      break;
1137
1138   case ast_nequal:
1139   case ast_equal:
1140      op[0] = this->subexpressions[0]->hir(instructions, state);
1141      op[1] = this->subexpressions[1]->hir(instructions, state);
1142
1143      /* From page 58 (page 64 of the PDF) of the GLSL 1.50 spec:
1144       *
1145       *    "The equality operators equal (==), and not equal (!=)
1146       *    operate on all types. They result in a scalar Boolean. If
1147       *    the operand types do not match, then there must be a
1148       *    conversion from Section 4.1.10 "Implicit Conversions"
1149       *    applied to one operand that can make them match, in which
1150       *    case this conversion is done."
1151       */
1152      if ((!apply_implicit_conversion(op[0]->type, op[1], state)
1153	   && !apply_implicit_conversion(op[1]->type, op[0], state))
1154	  || (op[0]->type != op[1]->type)) {
1155	 _mesa_glsl_error(& loc, state, "operands of `%s' must have the same "
1156			  "type", (this->oper == ast_equal) ? "==" : "!=");
1157	 error_emitted = true;
1158      } else if ((state->language_version <= 110)
1159		 && (op[0]->type->is_array() || op[1]->type->is_array())) {
1160	 _mesa_glsl_error(& loc, state, "array comparisons forbidden in "
1161			  "GLSL 1.10");
1162	 error_emitted = true;
1163      }
1164
1165      if (error_emitted) {
1166	 result = new(ctx) ir_constant(false);
1167      } else {
1168	 result = do_comparison(ctx, operations[this->oper], op[0], op[1]);
1169	 assert(result->type == glsl_type::bool_type);
1170      }
1171      break;
1172
1173   case ast_bit_and:
1174   case ast_bit_xor:
1175   case ast_bit_or:
1176      op[0] = this->subexpressions[0]->hir(instructions, state);
1177      op[1] = this->subexpressions[1]->hir(instructions, state);
1178      type = bit_logic_result_type(op[0]->type, op[1]->type, this->oper,
1179                                   state, &loc);
1180      result = new(ctx) ir_expression(operations[this->oper], type,
1181				      op[0], op[1]);
1182      error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1183      break;
1184
1185   case ast_bit_not:
1186      op[0] = this->subexpressions[0]->hir(instructions, state);
1187
1188      if (state->language_version < 130) {
1189	 _mesa_glsl_error(&loc, state, "bit-wise operations require GLSL 1.30");
1190	 error_emitted = true;
1191      }
1192
1193      if (!op[0]->type->is_integer()) {
1194	 _mesa_glsl_error(&loc, state, "operand of `~' must be an integer");
1195	 error_emitted = true;
1196      }
1197
1198      type = error_emitted ? glsl_type::error_type : op[0]->type;
1199      result = new(ctx) ir_expression(ir_unop_bit_not, type, op[0], NULL);
1200      break;
1201
1202   case ast_logic_and: {
1203      exec_list rhs_instructions;
1204      op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1205					 "LHS", &error_emitted);
1206      op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1,
1207					 "RHS", &error_emitted);
1208
1209      if (rhs_instructions.is_empty()) {
1210	 result = new(ctx) ir_expression(ir_binop_logic_and, op[0], op[1]);
1211	 type = result->type;
1212      } else {
1213	 ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type,
1214						       "and_tmp",
1215						       ir_var_temporary);
1216	 instructions->push_tail(tmp);
1217
1218	 ir_if *const stmt = new(ctx) ir_if(op[0]);
1219	 instructions->push_tail(stmt);
1220
1221	 stmt->then_instructions.append_list(&rhs_instructions);
1222	 ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
1223	 ir_assignment *const then_assign =
1224	    new(ctx) ir_assignment(then_deref, op[1]);
1225	 stmt->then_instructions.push_tail(then_assign);
1226
1227	 ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp);
1228	 ir_assignment *const else_assign =
1229	    new(ctx) ir_assignment(else_deref, new(ctx) ir_constant(false));
1230	 stmt->else_instructions.push_tail(else_assign);
1231
1232	 result = new(ctx) ir_dereference_variable(tmp);
1233	 type = tmp->type;
1234      }
1235      break;
1236   }
1237
1238   case ast_logic_or: {
1239      exec_list rhs_instructions;
1240      op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1241					 "LHS", &error_emitted);
1242      op[1] = get_scalar_boolean_operand(&rhs_instructions, state, this, 1,
1243					 "RHS", &error_emitted);
1244
1245      if (rhs_instructions.is_empty()) {
1246	 result = new(ctx) ir_expression(ir_binop_logic_or, op[0], op[1]);
1247	 type = result->type;
1248      } else {
1249	 ir_variable *const tmp = new(ctx) ir_variable(glsl_type::bool_type,
1250						       "or_tmp",
1251						       ir_var_temporary);
1252	 instructions->push_tail(tmp);
1253
1254	 ir_if *const stmt = new(ctx) ir_if(op[0]);
1255	 instructions->push_tail(stmt);
1256
1257	 ir_dereference *const then_deref = new(ctx) ir_dereference_variable(tmp);
1258	 ir_assignment *const then_assign =
1259	    new(ctx) ir_assignment(then_deref, new(ctx) ir_constant(true));
1260	 stmt->then_instructions.push_tail(then_assign);
1261
1262	 stmt->else_instructions.append_list(&rhs_instructions);
1263	 ir_dereference *const else_deref = new(ctx) ir_dereference_variable(tmp);
1264	 ir_assignment *const else_assign =
1265	    new(ctx) ir_assignment(else_deref, op[1]);
1266	 stmt->else_instructions.push_tail(else_assign);
1267
1268	 result = new(ctx) ir_dereference_variable(tmp);
1269	 type = tmp->type;
1270      }
1271      break;
1272   }
1273
1274   case ast_logic_xor:
1275      /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec:
1276       *
1277       *    "The logical binary operators and (&&), or ( | | ), and
1278       *     exclusive or (^^). They operate only on two Boolean
1279       *     expressions and result in a Boolean expression."
1280       */
1281      op[0] = get_scalar_boolean_operand(instructions, state, this, 0, "LHS",
1282					 &error_emitted);
1283      op[1] = get_scalar_boolean_operand(instructions, state, this, 1, "RHS",
1284					 &error_emitted);
1285
1286      result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
1287				      op[0], op[1]);
1288      break;
1289
1290   case ast_logic_not:
1291      op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1292					 "operand", &error_emitted);
1293
1294      result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
1295				      op[0], NULL);
1296      break;
1297
1298   case ast_mul_assign:
1299   case ast_div_assign:
1300   case ast_add_assign:
1301   case ast_sub_assign: {
1302      op[0] = this->subexpressions[0]->hir(instructions, state);
1303      op[1] = this->subexpressions[1]->hir(instructions, state);
1304
1305      type = arithmetic_result_type(op[0], op[1],
1306				    (this->oper == ast_mul_assign),
1307				    state, & loc);
1308
1309      ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1310						   op[0], op[1]);
1311
1312      result = do_assignment(instructions, state,
1313			     this->subexpressions[0]->non_lvalue_description,
1314			     op[0]->clone(ctx, NULL), temp_rhs, false,
1315			     this->subexpressions[0]->get_location());
1316      error_emitted = (op[0]->type->is_error());
1317
1318      /* GLSL 1.10 does not allow array assignment.  However, we don't have to
1319       * explicitly test for this because none of the binary expression
1320       * operators allow array operands either.
1321       */
1322
1323      break;
1324   }
1325
1326   case ast_mod_assign: {
1327      op[0] = this->subexpressions[0]->hir(instructions, state);
1328      op[1] = this->subexpressions[1]->hir(instructions, state);
1329
1330      type = modulus_result_type(op[0]->type, op[1]->type, state, & loc);
1331
1332      assert(operations[this->oper] == ir_binop_mod);
1333
1334      ir_rvalue *temp_rhs;
1335      temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1336					op[0], op[1]);
1337
1338      result = do_assignment(instructions, state,
1339			     this->subexpressions[0]->non_lvalue_description,
1340			     op[0]->clone(ctx, NULL), temp_rhs, false,
1341			     this->subexpressions[0]->get_location());
1342      error_emitted = type->is_error();
1343      break;
1344   }
1345
1346   case ast_ls_assign:
1347   case ast_rs_assign: {
1348      op[0] = this->subexpressions[0]->hir(instructions, state);
1349      op[1] = this->subexpressions[1]->hir(instructions, state);
1350      type = shift_result_type(op[0]->type, op[1]->type, this->oper, state,
1351                               &loc);
1352      ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper],
1353                                                   type, op[0], op[1]);
1354      result = do_assignment(instructions, state,
1355			     this->subexpressions[0]->non_lvalue_description,
1356			     op[0]->clone(ctx, NULL), temp_rhs, false,
1357                             this->subexpressions[0]->get_location());
1358      error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1359      break;
1360   }
1361
1362   case ast_and_assign:
1363   case ast_xor_assign:
1364   case ast_or_assign: {
1365      op[0] = this->subexpressions[0]->hir(instructions, state);
1366      op[1] = this->subexpressions[1]->hir(instructions, state);
1367      type = bit_logic_result_type(op[0]->type, op[1]->type, this->oper,
1368                                   state, &loc);
1369      ir_rvalue *temp_rhs = new(ctx) ir_expression(operations[this->oper],
1370                                                   type, op[0], op[1]);
1371      result = do_assignment(instructions, state,
1372			     this->subexpressions[0]->non_lvalue_description,
1373			     op[0]->clone(ctx, NULL), temp_rhs, false,
1374                             this->subexpressions[0]->get_location());
1375      error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1376      break;
1377   }
1378
1379   case ast_conditional: {
1380      /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec:
1381       *
1382       *    "The ternary selection operator (?:). It operates on three
1383       *    expressions (exp1 ? exp2 : exp3). This operator evaluates the
1384       *    first expression, which must result in a scalar Boolean."
1385       */
1386      op[0] = get_scalar_boolean_operand(instructions, state, this, 0,
1387					 "condition", &error_emitted);
1388
1389      /* The :? operator is implemented by generating an anonymous temporary
1390       * followed by an if-statement.  The last instruction in each branch of
1391       * the if-statement assigns a value to the anonymous temporary.  This
1392       * temporary is the r-value of the expression.
1393       */
1394      exec_list then_instructions;
1395      exec_list else_instructions;
1396
1397      op[1] = this->subexpressions[1]->hir(&then_instructions, state);
1398      op[2] = this->subexpressions[2]->hir(&else_instructions, state);
1399
1400      /* From page 59 (page 65 of the PDF) of the GLSL 1.50 spec:
1401       *
1402       *     "The second and third expressions can be any type, as
1403       *     long their types match, or there is a conversion in
1404       *     Section 4.1.10 "Implicit Conversions" that can be applied
1405       *     to one of the expressions to make their types match. This
1406       *     resulting matching type is the type of the entire
1407       *     expression."
1408       */
1409      if ((!apply_implicit_conversion(op[1]->type, op[2], state)
1410	   && !apply_implicit_conversion(op[2]->type, op[1], state))
1411	  || (op[1]->type != op[2]->type)) {
1412	 YYLTYPE loc = this->subexpressions[1]->get_location();
1413
1414	 _mesa_glsl_error(& loc, state, "Second and third operands of ?: "
1415			  "operator must have matching types.");
1416	 error_emitted = true;
1417	 type = glsl_type::error_type;
1418      } else {
1419	 type = op[1]->type;
1420      }
1421
1422      /* From page 33 (page 39 of the PDF) of the GLSL 1.10 spec:
1423       *
1424       *    "The second and third expressions must be the same type, but can
1425       *    be of any type other than an array."
1426       */
1427      if ((state->language_version <= 110) && type->is_array()) {
1428	 _mesa_glsl_error(& loc, state, "Second and third operands of ?: "
1429			  "operator must not be arrays.");
1430	 error_emitted = true;
1431      }
1432
1433      ir_constant *cond_val = op[0]->constant_expression_value();
1434      ir_constant *then_val = op[1]->constant_expression_value();
1435      ir_constant *else_val = op[2]->constant_expression_value();
1436
1437      if (then_instructions.is_empty()
1438	  && else_instructions.is_empty()
1439	  && (cond_val != NULL) && (then_val != NULL) && (else_val != NULL)) {
1440	 result = (cond_val->value.b[0]) ? then_val : else_val;
1441      } else {
1442	 ir_variable *const tmp =
1443	    new(ctx) ir_variable(type, "conditional_tmp", ir_var_temporary);
1444	 instructions->push_tail(tmp);
1445
1446	 ir_if *const stmt = new(ctx) ir_if(op[0]);
1447	 instructions->push_tail(stmt);
1448
1449	 then_instructions.move_nodes_to(& stmt->then_instructions);
1450	 ir_dereference *const then_deref =
1451	    new(ctx) ir_dereference_variable(tmp);
1452	 ir_assignment *const then_assign =
1453	    new(ctx) ir_assignment(then_deref, op[1]);
1454	 stmt->then_instructions.push_tail(then_assign);
1455
1456	 else_instructions.move_nodes_to(& stmt->else_instructions);
1457	 ir_dereference *const else_deref =
1458	    new(ctx) ir_dereference_variable(tmp);
1459	 ir_assignment *const else_assign =
1460	    new(ctx) ir_assignment(else_deref, op[2]);
1461	 stmt->else_instructions.push_tail(else_assign);
1462
1463	 result = new(ctx) ir_dereference_variable(tmp);
1464      }
1465      break;
1466   }
1467
1468   case ast_pre_inc:
1469   case ast_pre_dec: {
1470      this->non_lvalue_description = (this->oper == ast_pre_inc)
1471	 ? "pre-increment operation" : "pre-decrement operation";
1472
1473      op[0] = this->subexpressions[0]->hir(instructions, state);
1474      op[1] = constant_one_for_inc_dec(ctx, op[0]->type);
1475
1476      type = arithmetic_result_type(op[0], op[1], false, state, & loc);
1477
1478      ir_rvalue *temp_rhs;
1479      temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1480					op[0], op[1]);
1481
1482      result = do_assignment(instructions, state,
1483			     this->subexpressions[0]->non_lvalue_description,
1484			     op[0]->clone(ctx, NULL), temp_rhs, false,
1485			     this->subexpressions[0]->get_location());
1486      error_emitted = op[0]->type->is_error();
1487      break;
1488   }
1489
1490   case ast_post_inc:
1491   case ast_post_dec: {
1492      this->non_lvalue_description = (this->oper == ast_post_inc)
1493	 ? "post-increment operation" : "post-decrement operation";
1494      op[0] = this->subexpressions[0]->hir(instructions, state);
1495      op[1] = constant_one_for_inc_dec(ctx, op[0]->type);
1496
1497      error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1498
1499      type = arithmetic_result_type(op[0], op[1], false, state, & loc);
1500
1501      ir_rvalue *temp_rhs;
1502      temp_rhs = new(ctx) ir_expression(operations[this->oper], type,
1503					op[0], op[1]);
1504
1505      /* Get a temporary of a copy of the lvalue before it's modified.
1506       * This may get thrown away later.
1507       */
1508      result = get_lvalue_copy(instructions, op[0]->clone(ctx, NULL));
1509
1510      (void)do_assignment(instructions, state,
1511			  this->subexpressions[0]->non_lvalue_description,
1512			  op[0]->clone(ctx, NULL), temp_rhs, false,
1513			  this->subexpressions[0]->get_location());
1514
1515      error_emitted = op[0]->type->is_error();
1516      break;
1517   }
1518
1519   case ast_field_selection:
1520      result = _mesa_ast_field_selection_to_hir(this, instructions, state);
1521      break;
1522
1523   case ast_array_index: {
1524      YYLTYPE index_loc = subexpressions[1]->get_location();
1525
1526      op[0] = subexpressions[0]->hir(instructions, state);
1527      op[1] = subexpressions[1]->hir(instructions, state);
1528
1529      error_emitted = op[0]->type->is_error() || op[1]->type->is_error();
1530
1531      ir_rvalue *const array = op[0];
1532
1533      result = new(ctx) ir_dereference_array(op[0], op[1]);
1534
1535      /* Do not use op[0] after this point.  Use array.
1536       */
1537      op[0] = NULL;
1538
1539
1540      if (error_emitted)
1541	 break;
1542
1543      if (!array->type->is_array()
1544	  && !array->type->is_matrix()
1545	  && !array->type->is_vector()) {
1546	 _mesa_glsl_error(& index_loc, state,
1547			  "cannot dereference non-array / non-matrix / "
1548			  "non-vector");
1549	 error_emitted = true;
1550      }
1551
1552      if (!op[1]->type->is_integer()) {
1553	 _mesa_glsl_error(& index_loc, state,
1554			  "array index must be integer type");
1555	 error_emitted = true;
1556      } else if (!op[1]->type->is_scalar()) {
1557	 _mesa_glsl_error(& index_loc, state,
1558			  "array index must be scalar");
1559	 error_emitted = true;
1560      }
1561
1562      /* If the array index is a constant expression and the array has a
1563       * declared size, ensure that the access is in-bounds.  If the array
1564       * index is not a constant expression, ensure that the array has a
1565       * declared size.
1566       */
1567      ir_constant *const const_index = op[1]->constant_expression_value();
1568      if (const_index != NULL) {
1569	 const int idx = const_index->value.i[0];
1570	 const char *type_name;
1571	 unsigned bound = 0;
1572
1573	 if (array->type->is_matrix()) {
1574	    type_name = "matrix";
1575	 } else if (array->type->is_vector()) {
1576	    type_name = "vector";
1577	 } else {
1578	    type_name = "array";
1579	 }
1580
1581	 /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec:
1582	  *
1583	  *    "It is illegal to declare an array with a size, and then
1584	  *    later (in the same shader) index the same array with an
1585	  *    integral constant expression greater than or equal to the
1586	  *    declared size. It is also illegal to index an array with a
1587	  *    negative constant expression."
1588	  */
1589	 if (array->type->is_matrix()) {
1590	    if (array->type->row_type()->vector_elements <= idx) {
1591	       bound = array->type->row_type()->vector_elements;
1592	    }
1593	 } else if (array->type->is_vector()) {
1594	    if (array->type->vector_elements <= idx) {
1595	       bound = array->type->vector_elements;
1596	    }
1597	 } else {
1598	    if ((array->type->array_size() > 0)
1599		&& (array->type->array_size() <= idx)) {
1600	       bound = array->type->array_size();
1601	    }
1602	 }
1603
1604	 if (bound > 0) {
1605	    _mesa_glsl_error(& loc, state, "%s index must be < %u",
1606			     type_name, bound);
1607	    error_emitted = true;
1608	 } else if (idx < 0) {
1609	    _mesa_glsl_error(& loc, state, "%s index must be >= 0",
1610			     type_name);
1611	    error_emitted = true;
1612	 }
1613
1614	 if (array->type->is_array()) {
1615	    /* If the array is a variable dereference, it dereferences the
1616	     * whole array, by definition.  Use this to get the variable.
1617	     *
1618	     * FINISHME: Should some methods for getting / setting / testing
1619	     * FINISHME: array access limits be added to ir_dereference?
1620	     */
1621	    ir_variable *const v = array->whole_variable_referenced();
1622	    if ((v != NULL) && (unsigned(idx) > v->max_array_access)) {
1623	       v->max_array_access = idx;
1624
1625               /* Check whether this access will, as a side effect, implicitly
1626                * cause the size of a built-in array to be too large.
1627                */
1628               if (check_builtin_array_max_size(v->name, idx+1, loc, state))
1629                  error_emitted = true;
1630            }
1631	 }
1632      } else if (array->type->array_size() == 0) {
1633	 _mesa_glsl_error(&loc, state, "unsized array index must be constant");
1634      } else {
1635	 if (array->type->is_array()) {
1636	    /* whole_variable_referenced can return NULL if the array is a
1637	     * member of a structure.  In this case it is safe to not update
1638	     * the max_array_access field because it is never used for fields
1639	     * of structures.
1640	     */
1641	    ir_variable *v = array->whole_variable_referenced();
1642	    if (v != NULL)
1643	       v->max_array_access = array->type->array_size() - 1;
1644	 }
1645      }
1646
1647      /* From page 23 (29 of the PDF) of the GLSL 1.30 spec:
1648       *
1649       *    "Samplers aggregated into arrays within a shader (using square
1650       *    brackets [ ]) can only be indexed with integral constant
1651       *    expressions [...]."
1652       *
1653       * This restriction was added in GLSL 1.30.  Shaders using earlier version
1654       * of the language should not be rejected by the compiler front-end for
1655       * using this construct.  This allows useful things such as using a loop
1656       * counter as the index to an array of samplers.  If the loop in unrolled,
1657       * the code should compile correctly.  Instead, emit a warning.
1658       */
1659      if (array->type->is_array() &&
1660          array->type->element_type()->is_sampler() &&
1661          const_index == NULL) {
1662
1663	 if (state->language_version == 100) {
1664	    _mesa_glsl_warning(&loc, state,
1665			       "sampler arrays indexed with non-constant "
1666			       "expressions is optional in GLSL ES 1.00");
1667	 } else if (state->language_version < 130) {
1668	    _mesa_glsl_warning(&loc, state,
1669			       "sampler arrays indexed with non-constant "
1670			       "expressions is forbidden in GLSL 1.30 and "
1671			       "later");
1672	 } else {
1673	    _mesa_glsl_error(&loc, state,
1674			     "sampler arrays indexed with non-constant "
1675			     "expressions is forbidden in GLSL 1.30 and "
1676			     "later");
1677	    error_emitted = true;
1678	 }
1679      }
1680
1681      if (error_emitted)
1682	 result->type = glsl_type::error_type;
1683
1684      break;
1685   }
1686
1687   case ast_function_call:
1688      /* Should *NEVER* get here.  ast_function_call should always be handled
1689       * by ast_function_expression::hir.
1690       */
1691      assert(0);
1692      break;
1693
1694   case ast_identifier: {
1695      /* ast_identifier can appear several places in a full abstract syntax
1696       * tree.  This particular use must be at location specified in the grammar
1697       * as 'variable_identifier'.
1698       */
1699      ir_variable *var =
1700	 state->symbols->get_variable(this->primary_expression.identifier);
1701
1702      if (var != NULL) {
1703	 var->used = true;
1704	 result = new(ctx) ir_dereference_variable(var);
1705      } else {
1706	 _mesa_glsl_error(& loc, state, "`%s' undeclared",
1707			  this->primary_expression.identifier);
1708
1709	 result = ir_rvalue::error_value(ctx);
1710	 error_emitted = true;
1711      }
1712      break;
1713   }
1714
1715   case ast_int_constant:
1716      result = new(ctx) ir_constant(this->primary_expression.int_constant);
1717      break;
1718
1719   case ast_uint_constant:
1720      result = new(ctx) ir_constant(this->primary_expression.uint_constant);
1721      break;
1722
1723   case ast_float_constant:
1724      result = new(ctx) ir_constant(this->primary_expression.float_constant);
1725      break;
1726
1727   case ast_bool_constant:
1728      result = new(ctx) ir_constant(bool(this->primary_expression.bool_constant));
1729      break;
1730
1731   case ast_sequence: {
1732      /* It should not be possible to generate a sequence in the AST without
1733       * any expressions in it.
1734       */
1735      assert(!this->expressions.is_empty());
1736
1737      /* The r-value of a sequence is the last expression in the sequence.  If
1738       * the other expressions in the sequence do not have side-effects (and
1739       * therefore add instructions to the instruction list), they get dropped
1740       * on the floor.
1741       */
1742      exec_node *previous_tail_pred = NULL;
1743      YYLTYPE previous_operand_loc = loc;
1744
1745      foreach_list_typed (ast_node, ast, link, &this->expressions) {
1746	 /* If one of the operands of comma operator does not generate any
1747	  * code, we want to emit a warning.  At each pass through the loop
1748	  * previous_tail_pred will point to the last instruction in the
1749	  * stream *before* processing the previous operand.  Naturally,
1750	  * instructions->tail_pred will point to the last instruction in the
1751	  * stream *after* processing the previous operand.  If the two
1752	  * pointers match, then the previous operand had no effect.
1753	  *
1754	  * The warning behavior here differs slightly from GCC.  GCC will
1755	  * only emit a warning if none of the left-hand operands have an
1756	  * effect.  However, it will emit a warning for each.  I believe that
1757	  * there are some cases in C (especially with GCC extensions) where
1758	  * it is useful to have an intermediate step in a sequence have no
1759	  * effect, but I don't think these cases exist in GLSL.  Either way,
1760	  * it would be a giant hassle to replicate that behavior.
1761	  */
1762	 if (previous_tail_pred == instructions->tail_pred) {
1763	    _mesa_glsl_warning(&previous_operand_loc, state,
1764			       "left-hand operand of comma expression has "
1765			       "no effect");
1766	 }
1767
1768	 /* tail_pred is directly accessed instead of using the get_tail()
1769	  * method for performance reasons.  get_tail() has extra code to
1770	  * return NULL when the list is empty.  We don't care about that
1771	  * here, so using tail_pred directly is fine.
1772	  */
1773	 previous_tail_pred = instructions->tail_pred;
1774	 previous_operand_loc = ast->get_location();
1775
1776	 result = ast->hir(instructions, state);
1777      }
1778
1779      /* Any errors should have already been emitted in the loop above.
1780       */
1781      error_emitted = true;
1782      break;
1783   }
1784   }
1785   type = NULL; /* use result->type, not type. */
1786   assert(result != NULL);
1787
1788   if (result->type->is_error() && !error_emitted)
1789      _mesa_glsl_error(& loc, state, "type mismatch");
1790
1791   return result;
1792}
1793
1794
1795ir_rvalue *
1796ast_expression_statement::hir(exec_list *instructions,
1797			      struct _mesa_glsl_parse_state *state)
1798{
1799   /* It is possible to have expression statements that don't have an
1800    * expression.  This is the solitary semicolon:
1801    *
1802    * for (i = 0; i < 5; i++)
1803    *     ;
1804    *
1805    * In this case the expression will be NULL.  Test for NULL and don't do
1806    * anything in that case.
1807    */
1808   if (expression != NULL)
1809      expression->hir(instructions, state);
1810
1811   /* Statements do not have r-values.
1812    */
1813   return NULL;
1814}
1815
1816
1817ir_rvalue *
1818ast_compound_statement::hir(exec_list *instructions,
1819			    struct _mesa_glsl_parse_state *state)
1820{
1821   if (new_scope)
1822      state->symbols->push_scope();
1823
1824   foreach_list_typed (ast_node, ast, link, &this->statements)
1825      ast->hir(instructions, state);
1826
1827   if (new_scope)
1828      state->symbols->pop_scope();
1829
1830   /* Compound statements do not have r-values.
1831    */
1832   return NULL;
1833}
1834
1835
1836static const glsl_type *
1837process_array_type(YYLTYPE *loc, const glsl_type *base, ast_node *array_size,
1838		   struct _mesa_glsl_parse_state *state)
1839{
1840   unsigned length = 0;
1841
1842   /* From page 19 (page 25) of the GLSL 1.20 spec:
1843    *
1844    *     "Only one-dimensional arrays may be declared."
1845    */
1846   if (base->is_array()) {
1847      _mesa_glsl_error(loc, state,
1848		       "invalid array of `%s' (only one-dimensional arrays "
1849		       "may be declared)",
1850		       base->name);
1851      return glsl_type::error_type;
1852   }
1853
1854   if (array_size != NULL) {
1855      exec_list dummy_instructions;
1856      ir_rvalue *const ir = array_size->hir(& dummy_instructions, state);
1857      YYLTYPE loc = array_size->get_location();
1858
1859      if (ir != NULL) {
1860	 if (!ir->type->is_integer()) {
1861	    _mesa_glsl_error(& loc, state, "array size must be integer type");
1862	 } else if (!ir->type->is_scalar()) {
1863	    _mesa_glsl_error(& loc, state, "array size must be scalar type");
1864	 } else {
1865	    ir_constant *const size = ir->constant_expression_value();
1866
1867	    if (size == NULL) {
1868	       _mesa_glsl_error(& loc, state, "array size must be a "
1869				"constant valued expression");
1870	    } else if (size->value.i[0] <= 0) {
1871	       _mesa_glsl_error(& loc, state, "array size must be > 0");
1872	    } else {
1873	       assert(size->type == ir->type);
1874	       length = size->value.u[0];
1875
1876               /* If the array size is const (and we've verified that
1877                * it is) then no instructions should have been emitted
1878                * when we converted it to HIR.  If they were emitted,
1879                * then either the array size isn't const after all, or
1880                * we are emitting unnecessary instructions.
1881                */
1882               assert(dummy_instructions.is_empty());
1883	    }
1884	 }
1885      }
1886   } else if (state->es_shader) {
1887      /* Section 10.17 of the GLSL ES 1.00 specification states that unsized
1888       * array declarations have been removed from the language.
1889       */
1890      _mesa_glsl_error(loc, state, "unsized array declarations are not "
1891		       "allowed in GLSL ES 1.00.");
1892   }
1893
1894   return glsl_type::get_array_instance(base, length);
1895}
1896
1897
1898const glsl_type *
1899ast_type_specifier::glsl_type(const char **name,
1900			      struct _mesa_glsl_parse_state *state) const
1901{
1902   const struct glsl_type *type;
1903
1904   type = state->symbols->get_type(this->type_name);
1905   *name = this->type_name;
1906
1907   if (this->is_array) {
1908      YYLTYPE loc = this->get_location();
1909      type = process_array_type(&loc, type, this->array_size, state);
1910   }
1911
1912   return type;
1913}
1914
1915
1916static void
1917apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
1918				 ir_variable *var,
1919				 struct _mesa_glsl_parse_state *state,
1920				 YYLTYPE *loc,
1921				 bool ubo_qualifiers_valid)
1922{
1923   if (qual->flags.q.invariant) {
1924      if (var->used) {
1925	 _mesa_glsl_error(loc, state,
1926			  "variable `%s' may not be redeclared "
1927			  "`invariant' after being used",
1928			  var->name);
1929      } else {
1930	 var->invariant = 1;
1931      }
1932   }
1933
1934   if (qual->flags.q.constant || qual->flags.q.attribute
1935       || qual->flags.q.uniform
1936       || (qual->flags.q.varying && (state->target == fragment_shader)))
1937      var->read_only = 1;
1938
1939   if (qual->flags.q.centroid)
1940      var->centroid = 1;
1941
1942   if (qual->flags.q.attribute && state->target != vertex_shader) {
1943      var->type = glsl_type::error_type;
1944      _mesa_glsl_error(loc, state,
1945		       "`attribute' variables may not be declared in the "
1946		       "%s shader",
1947		       _mesa_glsl_shader_target_name(state->target));
1948   }
1949
1950   /* From page 25 (page 31 of the PDF) of the GLSL 1.10 spec:
1951    *
1952    *     "The varying qualifier can be used only with the data types
1953    *     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of
1954    *     these."
1955    */
1956   if (qual->flags.q.varying) {
1957      const glsl_type *non_array_type;
1958
1959      if (var->type && var->type->is_array())
1960	 non_array_type = var->type->fields.array;
1961      else
1962	 non_array_type = var->type;
1963
1964      if (non_array_type && non_array_type->base_type != GLSL_TYPE_FLOAT) {
1965	 var->type = glsl_type::error_type;
1966	 _mesa_glsl_error(loc, state,
1967			  "varying variables must be of base type float");
1968      }
1969   }
1970
1971   /* If there is no qualifier that changes the mode of the variable, leave
1972    * the setting alone.
1973    */
1974   if (qual->flags.q.in && qual->flags.q.out)
1975      var->mode = ir_var_inout;
1976   else if (qual->flags.q.attribute || qual->flags.q.in
1977	    || (qual->flags.q.varying && (state->target == fragment_shader)))
1978      var->mode = ir_var_in;
1979   else if (qual->flags.q.out
1980	    || (qual->flags.q.varying && (state->target == vertex_shader)))
1981      var->mode = ir_var_out;
1982   else if (qual->flags.q.uniform)
1983      var->mode = ir_var_uniform;
1984
1985   if (state->all_invariant && (state->current_function == NULL)) {
1986      switch (state->target) {
1987      case vertex_shader:
1988	 if (var->mode == ir_var_out)
1989	    var->invariant = true;
1990	 break;
1991      case geometry_shader:
1992	 if ((var->mode == ir_var_in) || (var->mode == ir_var_out))
1993	    var->invariant = true;
1994	 break;
1995      case fragment_shader:
1996	 if (var->mode == ir_var_in)
1997	    var->invariant = true;
1998	 break;
1999      }
2000   }
2001
2002   if (qual->flags.q.flat)
2003      var->interpolation = INTERP_QUALIFIER_FLAT;
2004   else if (qual->flags.q.noperspective)
2005      var->interpolation = INTERP_QUALIFIER_NOPERSPECTIVE;
2006   else if (qual->flags.q.smooth)
2007      var->interpolation = INTERP_QUALIFIER_SMOOTH;
2008   else
2009      var->interpolation = INTERP_QUALIFIER_NONE;
2010
2011   if (var->interpolation != INTERP_QUALIFIER_NONE &&
2012       !(state->target == vertex_shader && var->mode == ir_var_out) &&
2013       !(state->target == fragment_shader && var->mode == ir_var_in)) {
2014      _mesa_glsl_error(loc, state,
2015		       "interpolation qualifier `%s' can only be applied to "
2016		       "vertex shader outputs and fragment shader inputs.",
2017		       var->interpolation_string());
2018   }
2019
2020   var->pixel_center_integer = qual->flags.q.pixel_center_integer;
2021   var->origin_upper_left = qual->flags.q.origin_upper_left;
2022   if ((qual->flags.q.origin_upper_left || qual->flags.q.pixel_center_integer)
2023       && (strcmp(var->name, "gl_FragCoord") != 0)) {
2024      const char *const qual_string = (qual->flags.q.origin_upper_left)
2025	 ? "origin_upper_left" : "pixel_center_integer";
2026
2027      _mesa_glsl_error(loc, state,
2028		       "layout qualifier `%s' can only be applied to "
2029		       "fragment shader input `gl_FragCoord'",
2030		       qual_string);
2031   }
2032
2033   if (qual->flags.q.explicit_location) {
2034      const bool global_scope = (state->current_function == NULL);
2035      bool fail = false;
2036      const char *string = "";
2037
2038      /* In the vertex shader only shader inputs can be given explicit
2039       * locations.
2040       *
2041       * In the fragment shader only shader outputs can be given explicit
2042       * locations.
2043       */
2044      switch (state->target) {
2045      case vertex_shader:
2046	 if (!global_scope || (var->mode != ir_var_in)) {
2047	    fail = true;
2048	    string = "input";
2049	 }
2050	 break;
2051
2052      case geometry_shader:
2053	 _mesa_glsl_error(loc, state,
2054			  "geometry shader variables cannot be given "
2055			  "explicit locations\n");
2056	 break;
2057
2058      case fragment_shader:
2059	 if (!global_scope || (var->mode != ir_var_out)) {
2060	    fail = true;
2061	    string = "output";
2062	 }
2063	 break;
2064      };
2065
2066      if (fail) {
2067	 _mesa_glsl_error(loc, state,
2068			  "only %s shader %s variables can be given an "
2069			  "explicit location\n",
2070			  _mesa_glsl_shader_target_name(state->target),
2071			  string);
2072      } else {
2073	 var->explicit_location = true;
2074
2075	 /* This bit of silliness is needed because invalid explicit locations
2076	  * are supposed to be flagged during linking.  Small negative values
2077	  * biased by VERT_ATTRIB_GENERIC0 or FRAG_RESULT_DATA0 could alias
2078	  * built-in values (e.g., -16+VERT_ATTRIB_GENERIC0 = VERT_ATTRIB_POS).
2079	  * The linker needs to be able to differentiate these cases.  This
2080	  * ensures that negative values stay negative.
2081	  */
2082	 if (qual->location >= 0) {
2083	    var->location = (state->target == vertex_shader)
2084	       ? (qual->location + VERT_ATTRIB_GENERIC0)
2085	       : (qual->location + FRAG_RESULT_DATA0);
2086	 } else {
2087	    var->location = qual->location;
2088	 }
2089
2090	 if (qual->flags.q.explicit_index) {
2091            /* From the GLSL 4.30 specification, section 4.4.2 (Output
2092             * Layout Qualifiers):
2093             *
2094             * "It is also a compile-time error if a fragment shader
2095             *  sets a layout index to less than 0 or greater than 1."
2096             *
2097             * Older specifications don't mandate a behavior; we take
2098             * this as a clarification and always generate the error.
2099             */
2100            if (qual->index < 0 || qual->index > 1) {
2101               _mesa_glsl_error(loc, state,
2102                                "explicit index may only be 0 or 1\n");
2103            } else {
2104               var->explicit_index = true;
2105               var->index = qual->index;
2106            }
2107	 }
2108      }
2109   } else if (qual->flags.q.explicit_index) {
2110	 _mesa_glsl_error(loc, state,
2111			  "explicit index requires explicit location\n");
2112   }
2113
2114   /* Does the declaration use the 'layout' keyword?
2115    */
2116   const bool uses_layout = qual->flags.q.pixel_center_integer
2117      || qual->flags.q.origin_upper_left
2118      || qual->flags.q.explicit_location; /* no need for index since it relies on location */
2119
2120   /* Does the declaration use the deprecated 'attribute' or 'varying'
2121    * keywords?
2122    */
2123   const bool uses_deprecated_qualifier = qual->flags.q.attribute
2124      || qual->flags.q.varying;
2125
2126   /* Is the 'layout' keyword used with parameters that allow relaxed checking.
2127    * Many implementations of GL_ARB_fragment_coord_conventions_enable and some
2128    * implementations (only Mesa?) GL_ARB_explicit_attrib_location_enable
2129    * allowed the layout qualifier to be used with 'varying' and 'attribute'.
2130    * These extensions and all following extensions that add the 'layout'
2131    * keyword have been modified to require the use of 'in' or 'out'.
2132    *
2133    * The following extension do not allow the deprecated keywords:
2134    *
2135    *    GL_AMD_conservative_depth
2136    *    GL_ARB_conservative_depth
2137    *    GL_ARB_gpu_shader5
2138    *    GL_ARB_separate_shader_objects
2139    *    GL_ARB_tesselation_shader
2140    *    GL_ARB_transform_feedback3
2141    *    GL_ARB_uniform_buffer_object
2142    *
2143    * It is unknown whether GL_EXT_shader_image_load_store or GL_NV_gpu_shader5
2144    * allow layout with the deprecated keywords.
2145    */
2146   const bool relaxed_layout_qualifier_checking =
2147      state->ARB_fragment_coord_conventions_enable;
2148
2149   if (uses_layout && uses_deprecated_qualifier) {
2150      if (relaxed_layout_qualifier_checking) {
2151	 _mesa_glsl_warning(loc, state,
2152			    "`layout' qualifier may not be used with "
2153			    "`attribute' or `varying'");
2154      } else {
2155	 _mesa_glsl_error(loc, state,
2156			  "`layout' qualifier may not be used with "
2157			  "`attribute' or `varying'");
2158      }
2159   }
2160
2161   /* Layout qualifiers for gl_FragDepth, which are enabled by extension
2162    * AMD_conservative_depth.
2163    */
2164   int depth_layout_count = qual->flags.q.depth_any
2165      + qual->flags.q.depth_greater
2166      + qual->flags.q.depth_less
2167      + qual->flags.q.depth_unchanged;
2168   if (depth_layout_count > 0
2169       && !state->AMD_conservative_depth_enable
2170       && !state->ARB_conservative_depth_enable) {
2171       _mesa_glsl_error(loc, state,
2172                        "extension GL_AMD_conservative_depth or "
2173                        "GL_ARB_conservative_depth must be enabled "
2174			"to use depth layout qualifiers");
2175   } else if (depth_layout_count > 0
2176              && strcmp(var->name, "gl_FragDepth") != 0) {
2177       _mesa_glsl_error(loc, state,
2178                        "depth layout qualifiers can be applied only to "
2179                        "gl_FragDepth");
2180   } else if (depth_layout_count > 1
2181              && strcmp(var->name, "gl_FragDepth") == 0) {
2182      _mesa_glsl_error(loc, state,
2183                       "at most one depth layout qualifier can be applied to "
2184                       "gl_FragDepth");
2185   }
2186   if (qual->flags.q.depth_any)
2187      var->depth_layout = ir_depth_layout_any;
2188   else if (qual->flags.q.depth_greater)
2189      var->depth_layout = ir_depth_layout_greater;
2190   else if (qual->flags.q.depth_less)
2191      var->depth_layout = ir_depth_layout_less;
2192   else if (qual->flags.q.depth_unchanged)
2193       var->depth_layout = ir_depth_layout_unchanged;
2194   else
2195       var->depth_layout = ir_depth_layout_none;
2196
2197   if (qual->flags.q.std140 ||
2198       qual->flags.q.packed ||
2199       qual->flags.q.shared) {
2200      _mesa_glsl_error(loc, state,
2201                       "uniform block layout qualifiers std140, packed, and "
2202		       "shared can only be applied to uniform blocks, not "
2203		       "members");
2204   }
2205
2206   if (!ubo_qualifiers_valid &&
2207       (qual->flags.q.row_major || qual->flags.q.column_major)) {
2208      _mesa_glsl_error(loc, state,
2209                       "uniform block layout qualifiers row_major and "
2210		       "column_major can only be applied to uniform block "
2211		       "members");
2212   }
2213}
2214
2215/**
2216 * Get the variable that is being redeclared by this declaration
2217 *
2218 * Semantic checks to verify the validity of the redeclaration are also
2219 * performed.  If semantic checks fail, compilation error will be emitted via
2220 * \c _mesa_glsl_error, but a non-\c NULL pointer will still be returned.
2221 *
2222 * \returns
2223 * A pointer to an existing variable in the current scope if the declaration
2224 * is a redeclaration, \c NULL otherwise.
2225 */
2226ir_variable *
2227get_variable_being_redeclared(ir_variable *var, ast_declaration *decl,
2228			      struct _mesa_glsl_parse_state *state)
2229{
2230   /* Check if this declaration is actually a re-declaration, either to
2231    * resize an array or add qualifiers to an existing variable.
2232    *
2233    * This is allowed for variables in the current scope, or when at
2234    * global scope (for built-ins in the implicit outer scope).
2235    */
2236   ir_variable *earlier = state->symbols->get_variable(decl->identifier);
2237   if (earlier == NULL ||
2238       (state->current_function != NULL &&
2239	!state->symbols->name_declared_this_scope(decl->identifier))) {
2240      return NULL;
2241   }
2242
2243
2244   YYLTYPE loc = decl->get_location();
2245
2246   /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec,
2247    *
2248    * "It is legal to declare an array without a size and then
2249    *  later re-declare the same name as an array of the same
2250    *  type and specify a size."
2251    */
2252   if ((earlier->type->array_size() == 0)
2253       && var->type->is_array()
2254       && (var->type->element_type() == earlier->type->element_type())) {
2255      /* FINISHME: This doesn't match the qualifiers on the two
2256       * FINISHME: declarations.  It's not 100% clear whether this is
2257       * FINISHME: required or not.
2258       */
2259
2260      const unsigned size = unsigned(var->type->array_size());
2261      check_builtin_array_max_size(var->name, size, loc, state);
2262      if ((size > 0) && (size <= earlier->max_array_access)) {
2263	 _mesa_glsl_error(& loc, state, "array size must be > %u due to "
2264			  "previous access",
2265			  earlier->max_array_access);
2266      }
2267
2268      earlier->type = var->type;
2269      delete var;
2270      var = NULL;
2271   } else if (state->ARB_fragment_coord_conventions_enable
2272	      && strcmp(var->name, "gl_FragCoord") == 0
2273	      && earlier->type == var->type
2274	      && earlier->mode == var->mode) {
2275      /* Allow redeclaration of gl_FragCoord for ARB_fcc layout
2276       * qualifiers.
2277       */
2278      earlier->origin_upper_left = var->origin_upper_left;
2279      earlier->pixel_center_integer = var->pixel_center_integer;
2280
2281      /* According to section 4.3.7 of the GLSL 1.30 spec,
2282       * the following built-in varaibles can be redeclared with an
2283       * interpolation qualifier:
2284       *    * gl_FrontColor
2285       *    * gl_BackColor
2286       *    * gl_FrontSecondaryColor
2287       *    * gl_BackSecondaryColor
2288       *    * gl_Color
2289       *    * gl_SecondaryColor
2290       */
2291   } else if (state->language_version >= 130
2292	      && (strcmp(var->name, "gl_FrontColor") == 0
2293		  || strcmp(var->name, "gl_BackColor") == 0
2294		  || strcmp(var->name, "gl_FrontSecondaryColor") == 0
2295		  || strcmp(var->name, "gl_BackSecondaryColor") == 0
2296		  || strcmp(var->name, "gl_Color") == 0
2297		  || strcmp(var->name, "gl_SecondaryColor") == 0)
2298	      && earlier->type == var->type
2299	      && earlier->mode == var->mode) {
2300      earlier->interpolation = var->interpolation;
2301
2302      /* Layout qualifiers for gl_FragDepth. */
2303   } else if ((state->AMD_conservative_depth_enable ||
2304               state->ARB_conservative_depth_enable)
2305	      && strcmp(var->name, "gl_FragDepth") == 0
2306	      && earlier->type == var->type
2307	      && earlier->mode == var->mode) {
2308
2309      /** From the AMD_conservative_depth spec:
2310       *     Within any shader, the first redeclarations of gl_FragDepth
2311       *     must appear before any use of gl_FragDepth.
2312       */
2313      if (earlier->used) {
2314	 _mesa_glsl_error(&loc, state,
2315			  "the first redeclaration of gl_FragDepth "
2316			  "must appear before any use of gl_FragDepth");
2317      }
2318
2319      /* Prevent inconsistent redeclaration of depth layout qualifier. */
2320      if (earlier->depth_layout != ir_depth_layout_none
2321	  && earlier->depth_layout != var->depth_layout) {
2322	 _mesa_glsl_error(&loc, state,
2323			  "gl_FragDepth: depth layout is declared here "
2324			  "as '%s, but it was previously declared as "
2325			  "'%s'",
2326			  depth_layout_string(var->depth_layout),
2327			  depth_layout_string(earlier->depth_layout));
2328      }
2329
2330      earlier->depth_layout = var->depth_layout;
2331
2332   } else {
2333      _mesa_glsl_error(&loc, state, "`%s' redeclared", decl->identifier);
2334   }
2335
2336   return earlier;
2337}
2338
2339/**
2340 * Generate the IR for an initializer in a variable declaration
2341 */
2342ir_rvalue *
2343process_initializer(ir_variable *var, ast_declaration *decl,
2344		    ast_fully_specified_type *type,
2345		    exec_list *initializer_instructions,
2346		    struct _mesa_glsl_parse_state *state)
2347{
2348   ir_rvalue *result = NULL;
2349
2350   YYLTYPE initializer_loc = decl->initializer->get_location();
2351
2352   /* From page 24 (page 30 of the PDF) of the GLSL 1.10 spec:
2353    *
2354    *    "All uniform variables are read-only and are initialized either
2355    *    directly by an application via API commands, or indirectly by
2356    *    OpenGL."
2357    */
2358   if ((state->language_version <= 110)
2359       && (var->mode == ir_var_uniform)) {
2360      _mesa_glsl_error(& initializer_loc, state,
2361		       "cannot initialize uniforms in GLSL 1.10");
2362   }
2363
2364   if (var->type->is_sampler()) {
2365      _mesa_glsl_error(& initializer_loc, state,
2366		       "cannot initialize samplers");
2367   }
2368
2369   if ((var->mode == ir_var_in) && (state->current_function == NULL)) {
2370      _mesa_glsl_error(& initializer_loc, state,
2371		       "cannot initialize %s shader input / %s",
2372		       _mesa_glsl_shader_target_name(state->target),
2373		       (state->target == vertex_shader)
2374		       ? "attribute" : "varying");
2375   }
2376
2377   ir_dereference *const lhs = new(state) ir_dereference_variable(var);
2378   ir_rvalue *rhs = decl->initializer->hir(initializer_instructions,
2379					   state);
2380
2381   /* Calculate the constant value if this is a const or uniform
2382    * declaration.
2383    */
2384   if (type->qualifier.flags.q.constant
2385       || type->qualifier.flags.q.uniform) {
2386      ir_rvalue *new_rhs = validate_assignment(state, var->type, rhs, true);
2387      if (new_rhs != NULL) {
2388	 rhs = new_rhs;
2389
2390	 ir_constant *constant_value = rhs->constant_expression_value();
2391	 if (!constant_value) {
2392	    _mesa_glsl_error(& initializer_loc, state,
2393			     "initializer of %s variable `%s' must be a "
2394			     "constant expression",
2395			     (type->qualifier.flags.q.constant)
2396			     ? "const" : "uniform",
2397			     decl->identifier);
2398	    if (var->type->is_numeric()) {
2399	       /* Reduce cascading errors. */
2400	       var->constant_value = ir_constant::zero(state, var->type);
2401	    }
2402	 } else {
2403	    rhs = constant_value;
2404	    var->constant_value = constant_value;
2405	 }
2406      } else {
2407	 _mesa_glsl_error(&initializer_loc, state,
2408			  "initializer of type %s cannot be assigned to "
2409			  "variable of type %s",
2410			  rhs->type->name, var->type->name);
2411	 if (var->type->is_numeric()) {
2412	    /* Reduce cascading errors. */
2413	    var->constant_value = ir_constant::zero(state, var->type);
2414	 }
2415      }
2416   }
2417
2418   if (rhs && !rhs->type->is_error()) {
2419      bool temp = var->read_only;
2420      if (type->qualifier.flags.q.constant)
2421	 var->read_only = false;
2422
2423      /* Never emit code to initialize a uniform.
2424       */
2425      const glsl_type *initializer_type;
2426      if (!type->qualifier.flags.q.uniform) {
2427	 result = do_assignment(initializer_instructions, state,
2428				NULL,
2429				lhs, rhs, true,
2430				type->get_location());
2431	 initializer_type = result->type;
2432      } else
2433	 initializer_type = rhs->type;
2434
2435      var->constant_initializer = rhs->constant_expression_value();
2436      var->has_initializer = true;
2437
2438      /* If the declared variable is an unsized array, it must inherrit
2439       * its full type from the initializer.  A declaration such as
2440       *
2441       *     uniform float a[] = float[](1.0, 2.0, 3.0, 3.0);
2442       *
2443       * becomes
2444       *
2445       *     uniform float a[4] = float[](1.0, 2.0, 3.0, 3.0);
2446       *
2447       * The assignment generated in the if-statement (below) will also
2448       * automatically handle this case for non-uniforms.
2449       *
2450       * If the declared variable is not an array, the types must
2451       * already match exactly.  As a result, the type assignment
2452       * here can be done unconditionally.  For non-uniforms the call
2453       * to do_assignment can change the type of the initializer (via
2454       * the implicit conversion rules).  For uniforms the initializer
2455       * must be a constant expression, and the type of that expression
2456       * was validated above.
2457       */
2458      var->type = initializer_type;
2459
2460      var->read_only = temp;
2461   }
2462
2463   return result;
2464}
2465
2466ir_rvalue *
2467ast_declarator_list::hir(exec_list *instructions,
2468			 struct _mesa_glsl_parse_state *state)
2469{
2470   void *ctx = state;
2471   const struct glsl_type *decl_type;
2472   const char *type_name = NULL;
2473   ir_rvalue *result = NULL;
2474   YYLTYPE loc = this->get_location();
2475
2476   /* From page 46 (page 52 of the PDF) of the GLSL 1.50 spec:
2477    *
2478    *     "To ensure that a particular output variable is invariant, it is
2479    *     necessary to use the invariant qualifier. It can either be used to
2480    *     qualify a previously declared variable as being invariant
2481    *
2482    *         invariant gl_Position; // make existing gl_Position be invariant"
2483    *
2484    * In these cases the parser will set the 'invariant' flag in the declarator
2485    * list, and the type will be NULL.
2486    */
2487   if (this->invariant) {
2488      assert(this->type == NULL);
2489
2490      if (state->current_function != NULL) {
2491	 _mesa_glsl_error(& loc, state,
2492			  "All uses of `invariant' keyword must be at global "
2493			  "scope\n");
2494      }
2495
2496      foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
2497	 assert(!decl->is_array);
2498	 assert(decl->array_size == NULL);
2499	 assert(decl->initializer == NULL);
2500
2501	 ir_variable *const earlier =
2502	    state->symbols->get_variable(decl->identifier);
2503	 if (earlier == NULL) {
2504	    _mesa_glsl_error(& loc, state,
2505			     "Undeclared variable `%s' cannot be marked "
2506			     "invariant\n", decl->identifier);
2507	 } else if ((state->target == vertex_shader)
2508	       && (earlier->mode != ir_var_out)) {
2509	    _mesa_glsl_error(& loc, state,
2510			     "`%s' cannot be marked invariant, vertex shader "
2511			     "outputs only\n", decl->identifier);
2512	 } else if ((state->target == fragment_shader)
2513	       && (earlier->mode != ir_var_in)) {
2514	    _mesa_glsl_error(& loc, state,
2515			     "`%s' cannot be marked invariant, fragment shader "
2516			     "inputs only\n", decl->identifier);
2517	 } else if (earlier->used) {
2518	    _mesa_glsl_error(& loc, state,
2519			     "variable `%s' may not be redeclared "
2520			     "`invariant' after being used",
2521			     earlier->name);
2522	 } else {
2523	    earlier->invariant = true;
2524	 }
2525      }
2526
2527      /* Invariant redeclarations do not have r-values.
2528       */
2529      return NULL;
2530   }
2531
2532   assert(this->type != NULL);
2533   assert(!this->invariant);
2534
2535   /* The type specifier may contain a structure definition.  Process that
2536    * before any of the variable declarations.
2537    */
2538   (void) this->type->specifier->hir(instructions, state);
2539
2540   decl_type = this->type->specifier->glsl_type(& type_name, state);
2541   if (this->declarations.is_empty()) {
2542      /* If there is no structure involved in the program text, there are two
2543       * possible scenarios:
2544       *
2545       * - The program text contained something like 'vec4;'.  This is an
2546       *   empty declaration.  It is valid but weird.  Emit a warning.
2547       *
2548       * - The program text contained something like 'S;' and 'S' is not the
2549       *   name of a known structure type.  This is both invalid and weird.
2550       *   Emit an error.
2551       *
2552       * Note that if decl_type is NULL and there is a structure involved,
2553       * there must have been some sort of error with the structure.  In this
2554       * case we assume that an error was already generated on this line of
2555       * code for the structure.  There is no need to generate an additional,
2556       * confusing error.
2557       */
2558      assert(this->type->specifier->structure == NULL || decl_type != NULL
2559	     || state->error);
2560      if (this->type->specifier->structure == NULL) {
2561	 if (decl_type != NULL) {
2562	    _mesa_glsl_warning(&loc, state, "empty declaration");
2563	 } else {
2564	    _mesa_glsl_error(&loc, state,
2565			     "invalid type `%s' in empty declaration",
2566			     type_name);
2567	 }
2568      }
2569   }
2570
2571   foreach_list_typed (ast_declaration, decl, link, &this->declarations) {
2572      const struct glsl_type *var_type;
2573      ir_variable *var;
2574
2575      /* FINISHME: Emit a warning if a variable declaration shadows a
2576       * FINISHME: declaration at a higher scope.
2577       */
2578
2579      if ((decl_type == NULL) || decl_type->is_void()) {
2580	 if (type_name != NULL) {
2581	    _mesa_glsl_error(& loc, state,
2582			     "invalid type `%s' in declaration of `%s'",
2583			     type_name, decl->identifier);
2584	 } else {
2585	    _mesa_glsl_error(& loc, state,
2586			     "invalid type in declaration of `%s'",
2587			     decl->identifier);
2588	 }
2589	 continue;
2590      }
2591
2592      if (decl->is_array) {
2593	 var_type = process_array_type(&loc, decl_type, decl->array_size,
2594				       state);
2595	 if (var_type->is_error())
2596	    continue;
2597      } else {
2598	 var_type = decl_type;
2599      }
2600
2601      var = new(ctx) ir_variable(var_type, decl->identifier, ir_var_auto);
2602
2603      /* From page 22 (page 28 of the PDF) of the GLSL 1.10 specification;
2604       *
2605       *     "Global variables can only use the qualifiers const,
2606       *     attribute, uni form, or varying. Only one may be
2607       *     specified.
2608       *
2609       *     Local variables can only use the qualifier const."
2610       *
2611       * This is relaxed in GLSL 1.30.  It is also relaxed by any extension
2612       * that adds the 'layout' keyword.
2613       */
2614      if ((state->language_version < 130)
2615	  && !state->ARB_explicit_attrib_location_enable
2616	  && !state->ARB_fragment_coord_conventions_enable) {
2617	 if (this->type->qualifier.flags.q.out) {
2618	    _mesa_glsl_error(& loc, state,
2619			     "`out' qualifier in declaration of `%s' "
2620			     "only valid for function parameters in %s.",
2621			     decl->identifier, state->version_string);
2622	 }
2623	 if (this->type->qualifier.flags.q.in) {
2624	    _mesa_glsl_error(& loc, state,
2625			     "`in' qualifier in declaration of `%s' "
2626			     "only valid for function parameters in %s.",
2627			     decl->identifier, state->version_string);
2628	 }
2629	 /* FINISHME: Test for other invalid qualifiers. */
2630      }
2631
2632      apply_type_qualifier_to_variable(& this->type->qualifier, var, state,
2633				       & loc, this->ubo_qualifiers_valid);
2634
2635      if (this->type->qualifier.flags.q.invariant) {
2636	 if ((state->target == vertex_shader) && !(var->mode == ir_var_out ||
2637						   var->mode == ir_var_inout)) {
2638	    /* FINISHME: Note that this doesn't work for invariant on
2639	     * a function signature outval
2640	     */
2641	    _mesa_glsl_error(& loc, state,
2642			     "`%s' cannot be marked invariant, vertex shader "
2643			     "outputs only\n", var->name);
2644	 } else if ((state->target == fragment_shader) &&
2645		    !(var->mode == ir_var_in || var->mode == ir_var_inout)) {
2646	    /* FINISHME: Note that this doesn't work for invariant on
2647	     * a function signature inval
2648	     */
2649	    _mesa_glsl_error(& loc, state,
2650			     "`%s' cannot be marked invariant, fragment shader "
2651			     "inputs only\n", var->name);
2652	 }
2653      }
2654
2655      if (state->current_function != NULL) {
2656	 const char *mode = NULL;
2657	 const char *extra = "";
2658
2659	 /* There is no need to check for 'inout' here because the parser will
2660	  * only allow that in function parameter lists.
2661	  */
2662	 if (this->type->qualifier.flags.q.attribute) {
2663	    mode = "attribute";
2664	 } else if (this->type->qualifier.flags.q.uniform) {
2665	    mode = "uniform";
2666	 } else if (this->type->qualifier.flags.q.varying) {
2667	    mode = "varying";
2668	 } else if (this->type->qualifier.flags.q.in) {
2669	    mode = "in";
2670	    extra = " or in function parameter list";
2671	 } else if (this->type->qualifier.flags.q.out) {
2672	    mode = "out";
2673	    extra = " or in function parameter list";
2674	 }
2675
2676	 if (mode) {
2677	    _mesa_glsl_error(& loc, state,
2678			     "%s variable `%s' must be declared at "
2679			     "global scope%s",
2680			     mode, var->name, extra);
2681	 }
2682      } else if (var->mode == ir_var_in) {
2683         var->read_only = true;
2684
2685	 if (state->target == vertex_shader) {
2686	    bool error_emitted = false;
2687
2688	    /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec:
2689	     *
2690	     *    "Vertex shader inputs can only be float, floating-point
2691	     *    vectors, matrices, signed and unsigned integers and integer
2692	     *    vectors. Vertex shader inputs can also form arrays of these
2693	     *    types, but not structures."
2694	     *
2695	     * From page 31 (page 27 of the PDF) of the GLSL 1.30 spec:
2696	     *
2697	     *    "Vertex shader inputs can only be float, floating-point
2698	     *    vectors, matrices, signed and unsigned integers and integer
2699	     *    vectors. They cannot be arrays or structures."
2700	     *
2701	     * From page 23 (page 29 of the PDF) of the GLSL 1.20 spec:
2702	     *
2703	     *    "The attribute qualifier can be used only with float,
2704	     *    floating-point vectors, and matrices. Attribute variables
2705	     *    cannot be declared as arrays or structures."
2706	     */
2707	    const glsl_type *check_type = var->type->is_array()
2708	       ? var->type->fields.array : var->type;
2709
2710	    switch (check_type->base_type) {
2711	    case GLSL_TYPE_FLOAT:
2712	       break;
2713	    case GLSL_TYPE_UINT:
2714	    case GLSL_TYPE_INT:
2715	       if (state->language_version > 120)
2716		  break;
2717	       /* FALLTHROUGH */
2718	    default:
2719	       _mesa_glsl_error(& loc, state,
2720				"vertex shader input / attribute cannot have "
2721				"type %s`%s'",
2722				var->type->is_array() ? "array of " : "",
2723				check_type->name);
2724	       error_emitted = true;
2725	    }
2726
2727	    if (!error_emitted && (state->language_version <= 130)
2728		&& var->type->is_array()) {
2729	       _mesa_glsl_error(& loc, state,
2730				"vertex shader input / attribute cannot have "
2731				"array type");
2732	       error_emitted = true;
2733	    }
2734	 }
2735      }
2736
2737      /* Integer vertex outputs must be qualified with 'flat'.
2738       *
2739       * From section 4.3.6 of the GLSL 1.30 spec:
2740       *    "If a vertex output is a signed or unsigned integer or integer
2741       *    vector, then it must be qualified with the interpolation qualifier
2742       *    flat."
2743       */
2744      if (state->language_version >= 130
2745          && state->target == vertex_shader
2746          && state->current_function == NULL
2747          && var->type->is_integer()
2748          && var->mode == ir_var_out
2749          && var->interpolation != INTERP_QUALIFIER_FLAT) {
2750
2751         _mesa_glsl_error(&loc, state, "If a vertex output is an integer, "
2752                          "then it must be qualified with 'flat'");
2753      }
2754
2755
2756      /* Interpolation qualifiers cannot be applied to 'centroid' and
2757       * 'centroid varying'.
2758       *
2759       * From page 29 (page 35 of the PDF) of the GLSL 1.30 spec:
2760       *    "interpolation qualifiers may only precede the qualifiers in,
2761       *    centroid in, out, or centroid out in a declaration. They do not apply
2762       *    to the deprecated storage qualifiers varying or centroid varying."
2763       */
2764      if (state->language_version >= 130
2765          && this->type->qualifier.has_interpolation()
2766          && this->type->qualifier.flags.q.varying) {
2767
2768         const char *i = this->type->qualifier.interpolation_string();
2769         assert(i != NULL);
2770         const char *s;
2771         if (this->type->qualifier.flags.q.centroid)
2772            s = "centroid varying";
2773         else
2774            s = "varying";
2775
2776         _mesa_glsl_error(&loc, state,
2777                          "qualifier '%s' cannot be applied to the "
2778                          "deprecated storage qualifier '%s'", i, s);
2779      }
2780
2781
2782      /* Interpolation qualifiers can only apply to vertex shader outputs and
2783       * fragment shader inputs.
2784       *
2785       * From page 29 (page 35 of the PDF) of the GLSL 1.30 spec:
2786       *    "Outputs from a vertex shader (out) and inputs to a fragment
2787       *    shader (in) can be further qualified with one or more of these
2788       *    interpolation qualifiers"
2789       */
2790      if (state->language_version >= 130
2791          && this->type->qualifier.has_interpolation()) {
2792
2793         const char *i = this->type->qualifier.interpolation_string();
2794         assert(i != NULL);
2795
2796         switch (state->target) {
2797         case vertex_shader:
2798            if (this->type->qualifier.flags.q.in) {
2799               _mesa_glsl_error(&loc, state,
2800                                "qualifier '%s' cannot be applied to vertex "
2801                                "shader inputs", i);
2802            }
2803            break;
2804         case fragment_shader:
2805            if (this->type->qualifier.flags.q.out) {
2806               _mesa_glsl_error(&loc, state,
2807                                "qualifier '%s' cannot be applied to fragment "
2808                                "shader outputs", i);
2809            }
2810            break;
2811         default:
2812            assert(0);
2813         }
2814      }
2815
2816
2817      /* From section 4.3.4 of the GLSL 1.30 spec:
2818       *    "It is an error to use centroid in in a vertex shader."
2819       */
2820      if (state->language_version >= 130
2821          && this->type->qualifier.flags.q.centroid
2822          && this->type->qualifier.flags.q.in
2823          && state->target == vertex_shader) {
2824
2825         _mesa_glsl_error(&loc, state,
2826                          "'centroid in' cannot be used in a vertex shader");
2827      }
2828
2829
2830      /* Precision qualifiers exists only in GLSL versions 1.00 and >= 1.30.
2831       */
2832      if (this->type->specifier->precision != ast_precision_none
2833          && state->language_version != 100
2834          && state->language_version < 130) {
2835
2836         _mesa_glsl_error(&loc, state,
2837                          "precision qualifiers are supported only in GLSL ES "
2838                          "1.00, and GLSL 1.30 and later");
2839      }
2840
2841
2842      /* Precision qualifiers only apply to floating point and integer types.
2843       *
2844       * From section 4.5.2 of the GLSL 1.30 spec:
2845       *    "Any floating point or any integer declaration can have the type
2846       *    preceded by one of these precision qualifiers [...] Literal
2847       *    constants do not have precision qualifiers. Neither do Boolean
2848       *    variables.
2849       *
2850       * In GLSL ES, sampler types are also allowed.
2851       *
2852       * From page 87 of the GLSL ES spec:
2853       *    "RESOLUTION: Allow sampler types to take a precision qualifier."
2854       */
2855      if (this->type->specifier->precision != ast_precision_none
2856          && !var->type->is_float()
2857          && !var->type->is_integer()
2858          && !(var->type->is_sampler() && state->es_shader)
2859          && !(var->type->is_array()
2860               && (var->type->fields.array->is_float()
2861                   || var->type->fields.array->is_integer()))) {
2862
2863         _mesa_glsl_error(&loc, state,
2864                          "precision qualifiers apply only to floating point"
2865                          "%s types", state->es_shader ? ", integer, and sampler"
2866						       : "and integer");
2867      }
2868
2869      /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
2870       *
2871       *    "[Sampler types] can only be declared as function
2872       *    parameters or uniform variables (see Section 4.3.5
2873       *    "Uniform")".
2874       */
2875      if (var_type->contains_sampler() &&
2876          !this->type->qualifier.flags.q.uniform) {
2877         _mesa_glsl_error(&loc, state, "samplers must be declared uniform");
2878      }
2879
2880      /* Process the initializer and add its instructions to a temporary
2881       * list.  This list will be added to the instruction stream (below) after
2882       * the declaration is added.  This is done because in some cases (such as
2883       * redeclarations) the declaration may not actually be added to the
2884       * instruction stream.
2885       */
2886      exec_list initializer_instructions;
2887      ir_variable *earlier = get_variable_being_redeclared(var, decl, state);
2888
2889      if (decl->initializer != NULL) {
2890	 result = process_initializer((earlier == NULL) ? var : earlier,
2891				      decl, this->type,
2892				      &initializer_instructions, state);
2893      }
2894
2895      /* From page 23 (page 29 of the PDF) of the GLSL 1.10 spec:
2896       *
2897       *     "It is an error to write to a const variable outside of
2898       *      its declaration, so they must be initialized when
2899       *      declared."
2900       */
2901      if (this->type->qualifier.flags.q.constant && decl->initializer == NULL) {
2902	 _mesa_glsl_error(& loc, state,
2903			  "const declaration of `%s' must be initialized",
2904			  decl->identifier);
2905      }
2906
2907      /* If the declaration is not a redeclaration, there are a few additional
2908       * semantic checks that must be applied.  In addition, variable that was
2909       * created for the declaration should be added to the IR stream.
2910       */
2911      if (earlier == NULL) {
2912	 /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
2913	  *
2914	  *   "Identifiers starting with "gl_" are reserved for use by
2915	  *   OpenGL, and may not be declared in a shader as either a
2916	  *   variable or a function."
2917	  */
2918	 if (strncmp(decl->identifier, "gl_", 3) == 0)
2919	    _mesa_glsl_error(& loc, state,
2920			     "identifier `%s' uses reserved `gl_' prefix",
2921			     decl->identifier);
2922	 else if (strstr(decl->identifier, "__")) {
2923	    /* From page 14 (page 20 of the PDF) of the GLSL 1.10
2924	     * spec:
2925	     *
2926	     *     "In addition, all identifiers containing two
2927	     *      consecutive underscores (__) are reserved as
2928	     *      possible future keywords."
2929	     */
2930	    _mesa_glsl_error(& loc, state,
2931			     "identifier `%s' uses reserved `__' string",
2932			     decl->identifier);
2933	 }
2934
2935	 /* Add the variable to the symbol table.  Note that the initializer's
2936	  * IR was already processed earlier (though it hasn't been emitted
2937	  * yet), without the variable in scope.
2938	  *
2939	  * This differs from most C-like languages, but it follows the GLSL
2940	  * specification.  From page 28 (page 34 of the PDF) of the GLSL 1.50
2941	  * spec:
2942	  *
2943	  *     "Within a declaration, the scope of a name starts immediately
2944	  *     after the initializer if present or immediately after the name
2945	  *     being declared if not."
2946	  */
2947	 if (!state->symbols->add_variable(var)) {
2948	    YYLTYPE loc = this->get_location();
2949	    _mesa_glsl_error(&loc, state, "name `%s' already taken in the "
2950			     "current scope", decl->identifier);
2951	    continue;
2952	 }
2953
2954	 /* Push the variable declaration to the top.  It means that all the
2955	  * variable declarations will appear in a funny last-to-first order,
2956	  * but otherwise we run into trouble if a function is prototyped, a
2957	  * global var is decled, then the function is defined with usage of
2958	  * the global var.  See glslparsertest's CorrectModule.frag.
2959	  */
2960	 instructions->push_head(var);
2961      }
2962
2963      instructions->append_list(&initializer_instructions);
2964   }
2965
2966
2967   /* Generally, variable declarations do not have r-values.  However,
2968    * one is used for the declaration in
2969    *
2970    * while (bool b = some_condition()) {
2971    *   ...
2972    * }
2973    *
2974    * so we return the rvalue from the last seen declaration here.
2975    */
2976   return result;
2977}
2978
2979
2980ir_rvalue *
2981ast_parameter_declarator::hir(exec_list *instructions,
2982			      struct _mesa_glsl_parse_state *state)
2983{
2984   void *ctx = state;
2985   const struct glsl_type *type;
2986   const char *name = NULL;
2987   YYLTYPE loc = this->get_location();
2988
2989   type = this->type->specifier->glsl_type(& name, state);
2990
2991   if (type == NULL) {
2992      if (name != NULL) {
2993	 _mesa_glsl_error(& loc, state,
2994			  "invalid type `%s' in declaration of `%s'",
2995			  name, this->identifier);
2996      } else {
2997	 _mesa_glsl_error(& loc, state,
2998			  "invalid type in declaration of `%s'",
2999			  this->identifier);
3000      }
3001
3002      type = glsl_type::error_type;
3003   }
3004
3005   /* From page 62 (page 68 of the PDF) of the GLSL 1.50 spec:
3006    *
3007    *    "Functions that accept no input arguments need not use void in the
3008    *    argument list because prototypes (or definitions) are required and
3009    *    therefore there is no ambiguity when an empty argument list "( )" is
3010    *    declared. The idiom "(void)" as a parameter list is provided for
3011    *    convenience."
3012    *
3013    * Placing this check here prevents a void parameter being set up
3014    * for a function, which avoids tripping up checks for main taking
3015    * parameters and lookups of an unnamed symbol.
3016    */
3017   if (type->is_void()) {
3018      if (this->identifier != NULL)
3019	 _mesa_glsl_error(& loc, state,
3020			  "named parameter cannot have type `void'");
3021
3022      is_void = true;
3023      return NULL;
3024   }
3025
3026   if (formal_parameter && (this->identifier == NULL)) {
3027      _mesa_glsl_error(& loc, state, "formal parameter lacks a name");
3028      return NULL;
3029   }
3030
3031   /* This only handles "vec4 foo[..]".  The earlier specifier->glsl_type(...)
3032    * call already handled the "vec4[..] foo" case.
3033    */
3034   if (this->is_array) {
3035      type = process_array_type(&loc, type, this->array_size, state);
3036   }
3037
3038   if (!type->is_error() && type->array_size() == 0) {
3039      _mesa_glsl_error(&loc, state, "arrays passed as parameters must have "
3040		       "a declared size.");
3041      type = glsl_type::error_type;
3042   }
3043
3044   is_void = false;
3045   ir_variable *var = new(ctx) ir_variable(type, this->identifier, ir_var_in);
3046
3047   /* Apply any specified qualifiers to the parameter declaration.  Note that
3048    * for function parameters the default mode is 'in'.
3049    */
3050   apply_type_qualifier_to_variable(& this->type->qualifier, var, state, & loc,
3051				    false);
3052
3053   /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
3054    *
3055    *    "Samplers cannot be treated as l-values; hence cannot be used
3056    *    as out or inout function parameters, nor can they be assigned
3057    *    into."
3058    */
3059   if ((var->mode == ir_var_inout || var->mode == ir_var_out)
3060       && type->contains_sampler()) {
3061      _mesa_glsl_error(&loc, state, "out and inout parameters cannot contain samplers");
3062      type = glsl_type::error_type;
3063   }
3064
3065   /* From page 39 (page 45 of the PDF) of the GLSL 1.10 spec:
3066    *
3067    *    "When calling a function, expressions that do not evaluate to
3068    *     l-values cannot be passed to parameters declared as out or inout."
3069    *
3070    * From page 32 (page 38 of the PDF) of the GLSL 1.10 spec:
3071    *
3072    *    "Other binary or unary expressions, non-dereferenced arrays,
3073    *     function names, swizzles with repeated fields, and constants
3074    *     cannot be l-values."
3075    *
3076    * So for GLSL 1.10, passing an array as an out or inout parameter is not
3077    * allowed.  This restriction is removed in GLSL 1.20, and in GLSL ES.
3078    */
3079   if ((var->mode == ir_var_inout || var->mode == ir_var_out)
3080       && type->is_array() && state->language_version == 110) {
3081      _mesa_glsl_error(&loc, state, "Arrays cannot be out or inout parameters in GLSL 1.10");
3082      type = glsl_type::error_type;
3083   }
3084
3085   instructions->push_tail(var);
3086
3087   /* Parameter declarations do not have r-values.
3088    */
3089   return NULL;
3090}
3091
3092
3093void
3094ast_parameter_declarator::parameters_to_hir(exec_list *ast_parameters,
3095					    bool formal,
3096					    exec_list *ir_parameters,
3097					    _mesa_glsl_parse_state *state)
3098{
3099   ast_parameter_declarator *void_param = NULL;
3100   unsigned count = 0;
3101
3102   foreach_list_typed (ast_parameter_declarator, param, link, ast_parameters) {
3103      param->formal_parameter = formal;
3104      param->hir(ir_parameters, state);
3105
3106      if (param->is_void)
3107	 void_param = param;
3108
3109      count++;
3110   }
3111
3112   if ((void_param != NULL) && (count > 1)) {
3113      YYLTYPE loc = void_param->get_location();
3114
3115      _mesa_glsl_error(& loc, state,
3116		       "`void' parameter must be only parameter");
3117   }
3118}
3119
3120
3121void
3122emit_function(_mesa_glsl_parse_state *state, ir_function *f)
3123{
3124   /* IR invariants disallow function declarations or definitions
3125    * nested within other function definitions.  But there is no
3126    * requirement about the relative order of function declarations
3127    * and definitions with respect to one another.  So simply insert
3128    * the new ir_function block at the end of the toplevel instruction
3129    * list.
3130    */
3131   state->toplevel_ir->push_tail(f);
3132}
3133
3134
3135ir_rvalue *
3136ast_function::hir(exec_list *instructions,
3137		  struct _mesa_glsl_parse_state *state)
3138{
3139   void *ctx = state;
3140   ir_function *f = NULL;
3141   ir_function_signature *sig = NULL;
3142   exec_list hir_parameters;
3143
3144   const char *const name = identifier;
3145
3146   /* New functions are always added to the top-level IR instruction stream,
3147    * so this instruction list pointer is ignored.  See also emit_function
3148    * (called below).
3149    */
3150   (void) instructions;
3151
3152   /* From page 21 (page 27 of the PDF) of the GLSL 1.20 spec,
3153    *
3154    *   "Function declarations (prototypes) cannot occur inside of functions;
3155    *   they must be at global scope, or for the built-in functions, outside
3156    *   the global scope."
3157    *
3158    * From page 27 (page 33 of the PDF) of the GLSL ES 1.00.16 spec,
3159    *
3160    *   "User defined functions may only be defined within the global scope."
3161    *
3162    * Note that this language does not appear in GLSL 1.10.
3163    */
3164   if ((state->current_function != NULL) && (state->language_version != 110)) {
3165      YYLTYPE loc = this->get_location();
3166      _mesa_glsl_error(&loc, state,
3167		       "declaration of function `%s' not allowed within "
3168		       "function body", name);
3169   }
3170
3171   /* From page 15 (page 21 of the PDF) of the GLSL 1.10 spec,
3172    *
3173    *   "Identifiers starting with "gl_" are reserved for use by
3174    *   OpenGL, and may not be declared in a shader as either a
3175    *   variable or a function."
3176    */
3177   if (strncmp(name, "gl_", 3) == 0) {
3178      YYLTYPE loc = this->get_location();
3179      _mesa_glsl_error(&loc, state,
3180		       "identifier `%s' uses reserved `gl_' prefix", name);
3181   }
3182
3183   /* Convert the list of function parameters to HIR now so that they can be
3184    * used below to compare this function's signature with previously seen
3185    * signatures for functions with the same name.
3186    */
3187   ast_parameter_declarator::parameters_to_hir(& this->parameters,
3188					       is_definition,
3189					       & hir_parameters, state);
3190
3191   const char *return_type_name;
3192   const glsl_type *return_type =
3193      this->return_type->specifier->glsl_type(& return_type_name, state);
3194
3195   if (!return_type) {
3196      YYLTYPE loc = this->get_location();
3197      _mesa_glsl_error(&loc, state,
3198		       "function `%s' has undeclared return type `%s'",
3199		       name, return_type_name);
3200      return_type = glsl_type::error_type;
3201   }
3202
3203   /* From page 56 (page 62 of the PDF) of the GLSL 1.30 spec:
3204    * "No qualifier is allowed on the return type of a function."
3205    */
3206   if (this->return_type->has_qualifiers()) {
3207      YYLTYPE loc = this->get_location();
3208      _mesa_glsl_error(& loc, state,
3209		       "function `%s' return type has qualifiers", name);
3210   }
3211
3212   /* From page 17 (page 23 of the PDF) of the GLSL 1.20 spec:
3213    *
3214    *    "[Sampler types] can only be declared as function parameters
3215    *    or uniform variables (see Section 4.3.5 "Uniform")".
3216    */
3217   if (return_type->contains_sampler()) {
3218      YYLTYPE loc = this->get_location();
3219      _mesa_glsl_error(&loc, state,
3220                       "function `%s' return type can't contain a sampler",
3221                       name);
3222   }
3223
3224   /* Verify that this function's signature either doesn't match a previously
3225    * seen signature for a function with the same name, or, if a match is found,
3226    * that the previously seen signature does not have an associated definition.
3227    */
3228   f = state->symbols->get_function(name);
3229   if (f != NULL && (state->es_shader || f->has_user_signature())) {
3230      sig = f->exact_matching_signature(&hir_parameters);
3231      if (sig != NULL) {
3232	 const char *badvar = sig->qualifiers_match(&hir_parameters);
3233	 if (badvar != NULL) {
3234	    YYLTYPE loc = this->get_location();
3235
3236	    _mesa_glsl_error(&loc, state, "function `%s' parameter `%s' "
3237			     "qualifiers don't match prototype", name, badvar);
3238	 }
3239
3240	 if (sig->return_type != return_type) {
3241	    YYLTYPE loc = this->get_location();
3242
3243	    _mesa_glsl_error(&loc, state, "function `%s' return type doesn't "
3244			     "match prototype", name);
3245	 }
3246
3247	 if (is_definition && sig->is_defined) {
3248	    YYLTYPE loc = this->get_location();
3249
3250	    _mesa_glsl_error(& loc, state, "function `%s' redefined", name);
3251	 }
3252      }
3253   } else {
3254      f = new(ctx) ir_function(name);
3255      if (!state->symbols->add_function(f)) {
3256	 /* This function name shadows a non-function use of the same name. */
3257	 YYLTYPE loc = this->get_location();
3258
3259	 _mesa_glsl_error(&loc, state, "function name `%s' conflicts with "
3260			  "non-function", name);
3261	 return NULL;
3262      }
3263
3264      emit_function(state, f);
3265   }
3266
3267   /* Verify the return type of main() */
3268   if (strcmp(name, "main") == 0) {
3269      if (! return_type->is_void()) {
3270	 YYLTYPE loc = this->get_location();
3271
3272	 _mesa_glsl_error(& loc, state, "main() must return void");
3273      }
3274
3275      if (!hir_parameters.is_empty()) {
3276	 YYLTYPE loc = this->get_location();
3277
3278	 _mesa_glsl_error(& loc, state, "main() must not take any parameters");
3279      }
3280   }
3281
3282   /* Finish storing the information about this new function in its signature.
3283    */
3284   if (sig == NULL) {
3285      sig = new(ctx) ir_function_signature(return_type);
3286      f->add_signature(sig);
3287   }
3288
3289   sig->replace_parameters(&hir_parameters);
3290   signature = sig;
3291
3292   /* Function declarations (prototypes) do not have r-values.
3293    */
3294   return NULL;
3295}
3296
3297
3298ir_rvalue *
3299ast_function_definition::hir(exec_list *instructions,
3300			     struct _mesa_glsl_parse_state *state)
3301{
3302   prototype->is_definition = true;
3303   prototype->hir(instructions, state);
3304
3305   ir_function_signature *signature = prototype->signature;
3306   if (signature == NULL)
3307      return NULL;
3308
3309   assert(state->current_function == NULL);
3310   state->current_function = signature;
3311   state->found_return = false;
3312
3313   /* Duplicate parameters declared in the prototype as concrete variables.
3314    * Add these to the symbol table.
3315    */
3316   state->symbols->push_scope();
3317   foreach_iter(exec_list_iterator, iter, signature->parameters) {
3318      ir_variable *const var = ((ir_instruction *) iter.get())->as_variable();
3319
3320      assert(var != NULL);
3321
3322      /* The only way a parameter would "exist" is if two parameters have
3323       * the same name.
3324       */
3325      if (state->symbols->name_declared_this_scope(var->name)) {
3326	 YYLTYPE loc = this->get_location();
3327
3328	 _mesa_glsl_error(& loc, state, "parameter `%s' redeclared", var->name);
3329      } else {
3330	 state->symbols->add_variable(var);
3331      }
3332   }
3333
3334   /* Convert the body of the function to HIR. */
3335   this->body->hir(&signature->body, state);
3336   signature->is_defined = true;
3337
3338   state->symbols->pop_scope();
3339
3340   assert(state->current_function == signature);
3341   state->current_function = NULL;
3342
3343   if (!signature->return_type->is_void() && !state->found_return) {
3344      YYLTYPE loc = this->get_location();
3345      _mesa_glsl_error(& loc, state, "function `%s' has non-void return type "
3346		       "%s, but no return statement",
3347		       signature->function_name(),
3348		       signature->return_type->name);
3349   }
3350
3351   /* Function definitions do not have r-values.
3352    */
3353   return NULL;
3354}
3355
3356
3357ir_rvalue *
3358ast_jump_statement::hir(exec_list *instructions,
3359			struct _mesa_glsl_parse_state *state)
3360{
3361   void *ctx = state;
3362
3363   switch (mode) {
3364   case ast_return: {
3365      ir_return *inst;
3366      assert(state->current_function);
3367
3368      if (opt_return_value) {
3369	 ir_rvalue *const ret = opt_return_value->hir(instructions, state);
3370
3371	 /* The value of the return type can be NULL if the shader says
3372	  * 'return foo();' and foo() is a function that returns void.
3373	  *
3374	  * NOTE: The GLSL spec doesn't say that this is an error.  The type
3375	  * of the return value is void.  If the return type of the function is
3376	  * also void, then this should compile without error.  Seriously.
3377	  */
3378	 const glsl_type *const ret_type =
3379	    (ret == NULL) ? glsl_type::void_type : ret->type;
3380
3381	 /* Implicit conversions are not allowed for return values. */
3382	 if (state->current_function->return_type != ret_type) {
3383	    YYLTYPE loc = this->get_location();
3384
3385	    _mesa_glsl_error(& loc, state,
3386			     "`return' with wrong type %s, in function `%s' "
3387			     "returning %s",
3388			     ret_type->name,
3389			     state->current_function->function_name(),
3390			     state->current_function->return_type->name);
3391	 }
3392
3393	 inst = new(ctx) ir_return(ret);
3394      } else {
3395	 if (state->current_function->return_type->base_type !=
3396	     GLSL_TYPE_VOID) {
3397	    YYLTYPE loc = this->get_location();
3398
3399	    _mesa_glsl_error(& loc, state,
3400			     "`return' with no value, in function %s returning "
3401			     "non-void",
3402			     state->current_function->function_name());
3403	 }
3404	 inst = new(ctx) ir_return;
3405      }
3406
3407      state->found_return = true;
3408      instructions->push_tail(inst);
3409      break;
3410   }
3411
3412   case ast_discard:
3413      if (state->target != fragment_shader) {
3414	 YYLTYPE loc = this->get_location();
3415
3416	 _mesa_glsl_error(& loc, state,
3417			  "`discard' may only appear in a fragment shader");
3418      }
3419      instructions->push_tail(new(ctx) ir_discard);
3420      break;
3421
3422   case ast_break:
3423   case ast_continue:
3424      if (mode == ast_continue &&
3425	  state->loop_nesting_ast == NULL) {
3426	 YYLTYPE loc = this->get_location();
3427
3428	 _mesa_glsl_error(& loc, state,
3429			  "continue may only appear in a loop");
3430      } else if (mode == ast_break &&
3431		 state->loop_nesting_ast == NULL &&
3432		 state->switch_state.switch_nesting_ast == NULL) {
3433	 YYLTYPE loc = this->get_location();
3434
3435	 _mesa_glsl_error(& loc, state,
3436			  "break may only appear in a loop or a switch");
3437      } else {
3438	 /* For a loop, inline the for loop expression again,
3439	  * since we don't know where near the end of
3440	  * the loop body the normal copy of it
3441	  * is going to be placed.
3442	  */
3443	 if (state->loop_nesting_ast != NULL &&
3444	     mode == ast_continue &&
3445	     state->loop_nesting_ast->rest_expression) {
3446	    state->loop_nesting_ast->rest_expression->hir(instructions,
3447							  state);
3448	 }
3449
3450	 if (state->switch_state.is_switch_innermost &&
3451	     mode == ast_break) {
3452	    /* Force break out of switch by setting is_break switch state.
3453	     */
3454	    ir_variable *const is_break_var = state->switch_state.is_break_var;
3455	    ir_dereference_variable *const deref_is_break_var =
3456	       new(ctx) ir_dereference_variable(is_break_var);
3457	    ir_constant *const true_val = new(ctx) ir_constant(true);
3458	    ir_assignment *const set_break_var =
3459	       new(ctx) ir_assignment(deref_is_break_var, true_val);
3460
3461	    instructions->push_tail(set_break_var);
3462	 }
3463	 else {
3464	    ir_loop_jump *const jump =
3465	       new(ctx) ir_loop_jump((mode == ast_break)
3466				     ? ir_loop_jump::jump_break
3467				     : ir_loop_jump::jump_continue);
3468	    instructions->push_tail(jump);
3469	 }
3470      }
3471
3472      break;
3473   }
3474
3475   /* Jump instructions do not have r-values.
3476    */
3477   return NULL;
3478}
3479
3480
3481ir_rvalue *
3482ast_selection_statement::hir(exec_list *instructions,
3483			     struct _mesa_glsl_parse_state *state)
3484{
3485   void *ctx = state;
3486
3487   ir_rvalue *const condition = this->condition->hir(instructions, state);
3488
3489   /* From page 66 (page 72 of the PDF) of the GLSL 1.50 spec:
3490    *
3491    *    "Any expression whose type evaluates to a Boolean can be used as the
3492    *    conditional expression bool-expression. Vector types are not accepted
3493    *    as the expression to if."
3494    *
3495    * The checks are separated so that higher quality diagnostics can be
3496    * generated for cases where both rules are violated.
3497    */
3498   if (!condition->type->is_boolean() || !condition->type->is_scalar()) {
3499      YYLTYPE loc = this->condition->get_location();
3500
3501      _mesa_glsl_error(& loc, state, "if-statement condition must be scalar "
3502		       "boolean");
3503   }
3504
3505   ir_if *const stmt = new(ctx) ir_if(condition);
3506
3507   if (then_statement != NULL) {
3508      state->symbols->push_scope();
3509      then_statement->hir(& stmt->then_instructions, state);
3510      state->symbols->pop_scope();
3511   }
3512
3513   if (else_statement != NULL) {
3514      state->symbols->push_scope();
3515      else_statement->hir(& stmt->else_instructions, state);
3516      state->symbols->pop_scope();
3517   }
3518
3519   instructions->push_tail(stmt);
3520
3521   /* if-statements do not have r-values.
3522    */
3523   return NULL;
3524}
3525
3526
3527ir_rvalue *
3528ast_switch_statement::hir(exec_list *instructions,
3529			  struct _mesa_glsl_parse_state *state)
3530{
3531   void *ctx = state;
3532
3533   ir_rvalue *const test_expression =
3534      this->test_expression->hir(instructions, state);
3535
3536   /* From page 66 (page 55 of the PDF) of the GLSL 1.50 spec:
3537    *
3538    *    "The type of init-expression in a switch statement must be a
3539    *     scalar integer."
3540    */
3541   if (!test_expression->type->is_scalar() ||
3542       !test_expression->type->is_integer()) {
3543      YYLTYPE loc = this->test_expression->get_location();
3544
3545      _mesa_glsl_error(& loc,
3546		       state,
3547		       "switch-statement expression must be scalar "
3548		       "integer");
3549   }
3550
3551   /* Track the switch-statement nesting in a stack-like manner.
3552    */
3553   struct glsl_switch_state saved = state->switch_state;
3554
3555   state->switch_state.is_switch_innermost = true;
3556   state->switch_state.switch_nesting_ast = this;
3557   state->switch_state.labels_ht = hash_table_ctor(0, hash_table_pointer_hash,
3558						   hash_table_pointer_compare);
3559   state->switch_state.previous_default = NULL;
3560
3561   /* Initalize is_fallthru state to false.
3562    */
3563   ir_rvalue *const is_fallthru_val = new (ctx) ir_constant(false);
3564   state->switch_state.is_fallthru_var =
3565      new(ctx) ir_variable(glsl_type::bool_type,
3566			   "switch_is_fallthru_tmp",
3567			   ir_var_temporary);
3568   instructions->push_tail(state->switch_state.is_fallthru_var);
3569
3570   ir_dereference_variable *deref_is_fallthru_var =
3571      new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var);
3572   instructions->push_tail(new(ctx) ir_assignment(deref_is_fallthru_var,
3573						  is_fallthru_val));
3574
3575   /* Initalize is_break state to false.
3576    */
3577   ir_rvalue *const is_break_val = new (ctx) ir_constant(false);
3578   state->switch_state.is_break_var = new(ctx) ir_variable(glsl_type::bool_type,
3579							   "switch_is_break_tmp",
3580							   ir_var_temporary);
3581   instructions->push_tail(state->switch_state.is_break_var);
3582
3583   ir_dereference_variable *deref_is_break_var =
3584      new(ctx) ir_dereference_variable(state->switch_state.is_break_var);
3585   instructions->push_tail(new(ctx) ir_assignment(deref_is_break_var,
3586						  is_break_val));
3587
3588   /* Cache test expression.
3589    */
3590   test_to_hir(instructions, state);
3591
3592   /* Emit code for body of switch stmt.
3593    */
3594   body->hir(instructions, state);
3595
3596   hash_table_dtor(state->switch_state.labels_ht);
3597
3598   state->switch_state = saved;
3599
3600   /* Switch statements do not have r-values. */
3601   return NULL;
3602}
3603
3604
3605void
3606ast_switch_statement::test_to_hir(exec_list *instructions,
3607				  struct _mesa_glsl_parse_state *state)
3608{
3609   void *ctx = state;
3610
3611   /* Cache value of test expression. */
3612   ir_rvalue *const test_val =
3613      test_expression->hir(instructions,
3614			   state);
3615
3616   state->switch_state.test_var = new(ctx) ir_variable(test_val->type,
3617						       "switch_test_tmp",
3618						       ir_var_temporary);
3619   ir_dereference_variable *deref_test_var =
3620      new(ctx) ir_dereference_variable(state->switch_state.test_var);
3621
3622   instructions->push_tail(state->switch_state.test_var);
3623   instructions->push_tail(new(ctx) ir_assignment(deref_test_var, test_val));
3624}
3625
3626
3627ir_rvalue *
3628ast_switch_body::hir(exec_list *instructions,
3629		     struct _mesa_glsl_parse_state *state)
3630{
3631   if (stmts != NULL)
3632      stmts->hir(instructions, state);
3633
3634   /* Switch bodies do not have r-values. */
3635   return NULL;
3636}
3637
3638ir_rvalue *
3639ast_case_statement_list::hir(exec_list *instructions,
3640			     struct _mesa_glsl_parse_state *state)
3641{
3642   foreach_list_typed (ast_case_statement, case_stmt, link, & this->cases)
3643      case_stmt->hir(instructions, state);
3644
3645   /* Case statements do not have r-values. */
3646   return NULL;
3647}
3648
3649ir_rvalue *
3650ast_case_statement::hir(exec_list *instructions,
3651			struct _mesa_glsl_parse_state *state)
3652{
3653   labels->hir(instructions, state);
3654
3655   /* Conditionally set fallthru state based on break state. */
3656   ir_constant *const false_val = new(state) ir_constant(false);
3657   ir_dereference_variable *const deref_is_fallthru_var =
3658      new(state) ir_dereference_variable(state->switch_state.is_fallthru_var);
3659   ir_dereference_variable *const deref_is_break_var =
3660      new(state) ir_dereference_variable(state->switch_state.is_break_var);
3661   ir_assignment *const reset_fallthru_on_break =
3662      new(state) ir_assignment(deref_is_fallthru_var,
3663			       false_val,
3664			       deref_is_break_var);
3665   instructions->push_tail(reset_fallthru_on_break);
3666
3667   /* Guard case statements depending on fallthru state. */
3668   ir_dereference_variable *const deref_fallthru_guard =
3669      new(state) ir_dereference_variable(state->switch_state.is_fallthru_var);
3670   ir_if *const test_fallthru = new(state) ir_if(deref_fallthru_guard);
3671
3672   foreach_list_typed (ast_node, stmt, link, & this->stmts)
3673      stmt->hir(& test_fallthru->then_instructions, state);
3674
3675   instructions->push_tail(test_fallthru);
3676
3677   /* Case statements do not have r-values. */
3678   return NULL;
3679}
3680
3681
3682ir_rvalue *
3683ast_case_label_list::hir(exec_list *instructions,
3684			 struct _mesa_glsl_parse_state *state)
3685{
3686   foreach_list_typed (ast_case_label, label, link, & this->labels)
3687      label->hir(instructions, state);
3688
3689   /* Case labels do not have r-values. */
3690   return NULL;
3691}
3692
3693ir_rvalue *
3694ast_case_label::hir(exec_list *instructions,
3695		    struct _mesa_glsl_parse_state *state)
3696{
3697   void *ctx = state;
3698
3699   ir_dereference_variable *deref_fallthru_var =
3700      new(ctx) ir_dereference_variable(state->switch_state.is_fallthru_var);
3701
3702   ir_rvalue *const true_val = new(ctx) ir_constant(true);
3703
3704   /* If not default case, ... */
3705   if (this->test_value != NULL) {
3706      /* Conditionally set fallthru state based on
3707       * comparison of cached test expression value to case label.
3708       */
3709      ir_rvalue *const label_rval = this->test_value->hir(instructions, state);
3710      ir_constant *label_const = label_rval->constant_expression_value();
3711
3712      if (!label_const) {
3713	 YYLTYPE loc = this->test_value->get_location();
3714
3715	 _mesa_glsl_error(& loc, state,
3716			  "switch statement case label must be a "
3717			  "constant expression");
3718
3719	 /* Stuff a dummy value in to allow processing to continue. */
3720	 label_const = new(ctx) ir_constant(0);
3721      } else {
3722	 ast_expression *previous_label = (ast_expression *)
3723	    hash_table_find(state->switch_state.labels_ht,
3724			    (void *)(uintptr_t)label_const->value.u[0]);
3725
3726	 if (previous_label) {
3727	    YYLTYPE loc = this->test_value->get_location();
3728	    _mesa_glsl_error(& loc, state,
3729			     "duplicate case value");
3730
3731	    loc = previous_label->get_location();
3732	    _mesa_glsl_error(& loc, state,
3733			     "this is the previous case label");
3734	 } else {
3735	    hash_table_insert(state->switch_state.labels_ht,
3736			      this->test_value,
3737			      (void *)(uintptr_t)label_const->value.u[0]);
3738	 }
3739      }
3740
3741      ir_dereference_variable *deref_test_var =
3742	 new(ctx) ir_dereference_variable(state->switch_state.test_var);
3743
3744      ir_rvalue *const test_cond = new(ctx) ir_expression(ir_binop_all_equal,
3745							  label_const,
3746							  deref_test_var);
3747
3748      ir_assignment *set_fallthru_on_test =
3749	 new(ctx) ir_assignment(deref_fallthru_var,
3750				true_val,
3751				test_cond);
3752
3753      instructions->push_tail(set_fallthru_on_test);
3754   } else { /* default case */
3755      if (state->switch_state.previous_default) {
3756	 YYLTYPE loc = this->get_location();
3757	 _mesa_glsl_error(& loc, state,
3758			  "multiple default labels in one switch");
3759
3760	 loc = state->switch_state.previous_default->get_location();
3761	 _mesa_glsl_error(& loc, state,
3762			  "this is the first default label");
3763      }
3764      state->switch_state.previous_default = this;
3765
3766      /* Set falltrhu state. */
3767      ir_assignment *set_fallthru =
3768	 new(ctx) ir_assignment(deref_fallthru_var, true_val);
3769
3770      instructions->push_tail(set_fallthru);
3771   }
3772
3773   /* Case statements do not have r-values. */
3774   return NULL;
3775}
3776
3777void
3778ast_iteration_statement::condition_to_hir(ir_loop *stmt,
3779					  struct _mesa_glsl_parse_state *state)
3780{
3781   void *ctx = state;
3782
3783   if (condition != NULL) {
3784      ir_rvalue *const cond =
3785	 condition->hir(& stmt->body_instructions, state);
3786
3787      if ((cond == NULL)
3788	  || !cond->type->is_boolean() || !cond->type->is_scalar()) {
3789	 YYLTYPE loc = condition->get_location();
3790
3791	 _mesa_glsl_error(& loc, state,
3792			  "loop condition must be scalar boolean");
3793      } else {
3794	 /* As the first code in the loop body, generate a block that looks
3795	  * like 'if (!condition) break;' as the loop termination condition.
3796	  */
3797	 ir_rvalue *const not_cond =
3798	    new(ctx) ir_expression(ir_unop_logic_not, cond);
3799
3800	 ir_if *const if_stmt = new(ctx) ir_if(not_cond);
3801
3802	 ir_jump *const break_stmt =
3803	    new(ctx) ir_loop_jump(ir_loop_jump::jump_break);
3804
3805	 if_stmt->then_instructions.push_tail(break_stmt);
3806	 stmt->body_instructions.push_tail(if_stmt);
3807      }
3808   }
3809}
3810
3811
3812ir_rvalue *
3813ast_iteration_statement::hir(exec_list *instructions,
3814			     struct _mesa_glsl_parse_state *state)
3815{
3816   void *ctx = state;
3817
3818   /* For-loops and while-loops start a new scope, but do-while loops do not.
3819    */
3820   if (mode != ast_do_while)
3821      state->symbols->push_scope();
3822
3823   if (init_statement != NULL)
3824      init_statement->hir(instructions, state);
3825
3826   ir_loop *const stmt = new(ctx) ir_loop();
3827   instructions->push_tail(stmt);
3828
3829   /* Track the current loop nesting. */
3830   ast_iteration_statement *nesting_ast = state->loop_nesting_ast;
3831
3832   state->loop_nesting_ast = this;
3833
3834   /* Likewise, indicate that following code is closest to a loop,
3835    * NOT closest to a switch.
3836    */
3837   bool saved_is_switch_innermost = state->switch_state.is_switch_innermost;
3838   state->switch_state.is_switch_innermost = false;
3839
3840   if (mode != ast_do_while)
3841      condition_to_hir(stmt, state);
3842
3843   if (body != NULL)
3844      body->hir(& stmt->body_instructions, state);
3845
3846   if (rest_expression != NULL)
3847      rest_expression->hir(& stmt->body_instructions, state);
3848
3849   if (mode == ast_do_while)
3850      condition_to_hir(stmt, state);
3851
3852   if (mode != ast_do_while)
3853      state->symbols->pop_scope();
3854
3855   /* Restore previous nesting before returning. */
3856   state->loop_nesting_ast = nesting_ast;
3857   state->switch_state.is_switch_innermost = saved_is_switch_innermost;
3858
3859   /* Loops do not have r-values.
3860    */
3861   return NULL;
3862}
3863
3864
3865ir_rvalue *
3866ast_type_specifier::hir(exec_list *instructions,
3867			  struct _mesa_glsl_parse_state *state)
3868{
3869   if (!this->is_precision_statement && this->structure == NULL)
3870      return NULL;
3871
3872   YYLTYPE loc = this->get_location();
3873
3874   if (this->precision != ast_precision_none
3875       && state->language_version != 100
3876       && state->language_version < 130) {
3877      _mesa_glsl_error(&loc, state,
3878                       "precision qualifiers exist only in "
3879                       "GLSL ES 1.00, and GLSL 1.30 and later");
3880      return NULL;
3881   }
3882   if (this->precision != ast_precision_none
3883       && this->structure != NULL) {
3884      _mesa_glsl_error(&loc, state,
3885                       "precision qualifiers do not apply to structures");
3886      return NULL;
3887   }
3888
3889   /* If this is a precision statement, check that the type to which it is
3890    * applied is either float or int.
3891    *
3892    * From section 4.5.3 of the GLSL 1.30 spec:
3893    *    "The precision statement
3894    *       precision precision-qualifier type;
3895    *    can be used to establish a default precision qualifier. The type
3896    *    field can be either int or float [...].  Any other types or
3897    *    qualifiers will result in an error.
3898    */
3899   if (this->is_precision_statement) {
3900      assert(this->precision != ast_precision_none);
3901      assert(this->structure == NULL); /* The check for structures was
3902                                        * performed above. */
3903      if (this->is_array) {
3904         _mesa_glsl_error(&loc, state,
3905                          "default precision statements do not apply to "
3906                          "arrays");
3907         return NULL;
3908      }
3909      if (strcmp(this->type_name, "float") != 0 &&
3910	  strcmp(this->type_name, "int") != 0) {
3911         _mesa_glsl_error(&loc, state,
3912                          "default precision statements apply only to types "
3913                          "float and int");
3914         return NULL;
3915      }
3916
3917      /* FINISHME: Translate precision statements into IR. */
3918      return NULL;
3919   }
3920
3921   if (this->structure != NULL)
3922      return this->structure->hir(instructions, state);
3923
3924   return NULL;
3925}
3926
3927
3928ir_rvalue *
3929ast_struct_specifier::hir(exec_list *instructions,
3930			  struct _mesa_glsl_parse_state *state)
3931{
3932   unsigned decl_count = 0;
3933
3934   /* Make an initial pass over the list of structure fields to determine how
3935    * many there are.  Each element in this list is an ast_declarator_list.
3936    * This means that we actually need to count the number of elements in the
3937    * 'declarations' list in each of the elements.
3938    */
3939   foreach_list_typed (ast_declarator_list, decl_list, link,
3940		       &this->declarations) {
3941      foreach_list_const (decl_ptr, & decl_list->declarations) {
3942	 decl_count++;
3943      }
3944   }
3945
3946   /* Allocate storage for the structure fields and process the field
3947    * declarations.  As the declarations are processed, try to also convert
3948    * the types to HIR.  This ensures that structure definitions embedded in
3949    * other structure definitions are processed.
3950    */
3951   glsl_struct_field *const fields = ralloc_array(state, glsl_struct_field,
3952						  decl_count);
3953
3954   unsigned i = 0;
3955   foreach_list_typed (ast_declarator_list, decl_list, link,
3956		       &this->declarations) {
3957      const char *type_name;
3958
3959      decl_list->type->specifier->hir(instructions, state);
3960
3961      /* Section 10.9 of the GLSL ES 1.00 specification states that
3962       * embedded structure definitions have been removed from the language.
3963       */
3964      if (state->es_shader && decl_list->type->specifier->structure != NULL) {
3965	 YYLTYPE loc = this->get_location();
3966	 _mesa_glsl_error(&loc, state, "Embedded structure definitions are "
3967			  "not allowed in GLSL ES 1.00.");
3968      }
3969
3970      const glsl_type *decl_type =
3971	 decl_list->type->specifier->glsl_type(& type_name, state);
3972
3973      foreach_list_typed (ast_declaration, decl, link,
3974			  &decl_list->declarations) {
3975	 const struct glsl_type *field_type = decl_type;
3976	 if (decl->is_array) {
3977	    YYLTYPE loc = decl->get_location();
3978	    field_type = process_array_type(&loc, decl_type, decl->array_size,
3979					    state);
3980	 }
3981	 fields[i].type = (field_type != NULL)
3982	    ? field_type : glsl_type::error_type;
3983	 fields[i].name = decl->identifier;
3984	 i++;
3985      }
3986   }
3987
3988   assert(i == decl_count);
3989
3990   const glsl_type *t =
3991      glsl_type::get_record_instance(fields, decl_count, this->name);
3992
3993   YYLTYPE loc = this->get_location();
3994   if (!state->symbols->add_type(name, t)) {
3995      _mesa_glsl_error(& loc, state, "struct `%s' previously defined", name);
3996   } else {
3997      const glsl_type **s = reralloc(state, state->user_structures,
3998				     const glsl_type *,
3999				     state->num_user_structures + 1);
4000      if (s != NULL) {
4001	 s[state->num_user_structures] = t;
4002	 state->user_structures = s;
4003	 state->num_user_structures++;
4004      }
4005   }
4006
4007   /* Structure type definitions do not have r-values.
4008    */
4009   return NULL;
4010}
4011
4012static struct gl_uniform_block *
4013get_next_uniform_block(struct _mesa_glsl_parse_state *state)
4014{
4015   if (state->num_uniform_blocks >= state->uniform_block_array_size) {
4016      state->uniform_block_array_size *= 2;
4017      if (state->uniform_block_array_size <= 4)
4018	 state->uniform_block_array_size = 4;
4019
4020      state->uniform_blocks = reralloc(state,
4021				       state->uniform_blocks,
4022				       struct gl_uniform_block,
4023				       state->uniform_block_array_size);
4024   }
4025
4026   memset(&state->uniform_blocks[state->num_uniform_blocks],
4027	  0, sizeof(*state->uniform_blocks));
4028   return &state->uniform_blocks[state->num_uniform_blocks++];
4029}
4030
4031ir_rvalue *
4032ast_uniform_block::hir(exec_list *instructions,
4033		       struct _mesa_glsl_parse_state *state)
4034{
4035   /* The ast_uniform_block has a list of ast_declarator_lists.  We
4036    * need to turn those into ir_variables with an association
4037    * with this uniform block.
4038    */
4039   struct gl_uniform_block *ubo = get_next_uniform_block(state);
4040   ubo->Name = ralloc_strdup(state->uniform_blocks, this->block_name);
4041
4042   if (!state->symbols->add_uniform_block(ubo)) {
4043      YYLTYPE loc = this->get_location();
4044      _mesa_glsl_error(&loc, state, "Uniform block name `%s' already taken in "
4045                       "the current scope.\n", ubo->Name);
4046   }
4047
4048   unsigned int num_variables = 0;
4049   foreach_list_typed(ast_declarator_list, decl_list, link, &declarations) {
4050      foreach_list_const(node, &decl_list->declarations) {
4051	 num_variables++;
4052      }
4053   }
4054
4055   bool block_row_major = this->layout.flags.q.row_major;
4056
4057   ubo->Uniforms = rzalloc_array(state->uniform_blocks,
4058				 struct gl_uniform_buffer_variable,
4059				 num_variables);
4060
4061   foreach_list_typed(ast_declarator_list, decl_list, link, &declarations) {
4062      exec_list declared_variables;
4063
4064      decl_list->hir(&declared_variables, state);
4065
4066      foreach_list_const(node, &declared_variables) {
4067	 struct ir_variable *var = (ir_variable *)node;
4068
4069	 struct gl_uniform_buffer_variable *ubo_var =
4070	    &ubo->Uniforms[ubo->NumUniforms++];
4071
4072	 var->uniform_block = ubo - state->uniform_blocks;
4073
4074	 ubo_var->Name = ralloc_strdup(state->uniform_blocks, var->name);
4075	 ubo_var->Type = var->type;
4076	 ubo_var->Buffer = ubo - state->uniform_blocks;
4077	 ubo_var->Offset = 0; /* Assigned at link time. */
4078
4079	 if (var->type->is_matrix() ||
4080	     (var->type->is_array() && var->type->fields.array->is_matrix())) {
4081	    ubo_var->RowMajor = block_row_major;
4082	    if (decl_list->type->qualifier.flags.q.row_major)
4083	       ubo_var->RowMajor = true;
4084	    else if (decl_list->type->qualifier.flags.q.column_major)
4085	       ubo_var->RowMajor = false;
4086	 }
4087
4088	 /* From the GL_ARB_uniform_buffer_object spec:
4089	  *
4090	  *     "Sampler types are not allowed inside of uniform
4091	  *      blocks. All other types, arrays, and structures
4092	  *      allowed for uniforms are allowed within a uniform
4093	  *      block."
4094	  */
4095	 if (var->type->contains_sampler()) {
4096	    YYLTYPE loc = decl_list->get_location();
4097	    _mesa_glsl_error(&loc, state,
4098			     "Uniform in non-default uniform block contains sampler\n");
4099	 }
4100      }
4101
4102      instructions->append_list(&declared_variables);
4103   }
4104
4105   return NULL;
4106}
4107
4108static void
4109detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
4110			       exec_list *instructions)
4111{
4112   bool gl_FragColor_assigned = false;
4113   bool gl_FragData_assigned = false;
4114   bool user_defined_fs_output_assigned = false;
4115   ir_variable *user_defined_fs_output = NULL;
4116
4117   /* It would be nice to have proper location information. */
4118   YYLTYPE loc;
4119   memset(&loc, 0, sizeof(loc));
4120
4121   foreach_list(node, instructions) {
4122      ir_variable *var = ((ir_instruction *)node)->as_variable();
4123
4124      if (!var || !var->assigned)
4125	 continue;
4126
4127      if (strcmp(var->name, "gl_FragColor") == 0)
4128	 gl_FragColor_assigned = true;
4129      else if (strcmp(var->name, "gl_FragData") == 0)
4130	 gl_FragData_assigned = true;
4131      else if (strncmp(var->name, "gl_", 3) != 0) {
4132	 if (state->target == fragment_shader &&
4133	     (var->mode == ir_var_out || var->mode == ir_var_inout)) {
4134	    user_defined_fs_output_assigned = true;
4135	    user_defined_fs_output = var;
4136	 }
4137      }
4138   }
4139
4140   /* From the GLSL 1.30 spec:
4141    *
4142    *     "If a shader statically assigns a value to gl_FragColor, it
4143    *      may not assign a value to any element of gl_FragData. If a
4144    *      shader statically writes a value to any element of
4145    *      gl_FragData, it may not assign a value to
4146    *      gl_FragColor. That is, a shader may assign values to either
4147    *      gl_FragColor or gl_FragData, but not both. Multiple shaders
4148    *      linked together must also consistently write just one of
4149    *      these variables.  Similarly, if user declared output
4150    *      variables are in use (statically assigned to), then the
4151    *      built-in variables gl_FragColor and gl_FragData may not be
4152    *      assigned to. These incorrect usages all generate compile
4153    *      time errors."
4154    */
4155   if (gl_FragColor_assigned && gl_FragData_assigned) {
4156      _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4157		       "`gl_FragColor' and `gl_FragData'\n");
4158   } else if (gl_FragColor_assigned && user_defined_fs_output_assigned) {
4159      _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4160		       "`gl_FragColor' and `%s'\n",
4161		       user_defined_fs_output->name);
4162   } else if (gl_FragData_assigned && user_defined_fs_output_assigned) {
4163      _mesa_glsl_error(&loc, state, "fragment shader writes to both "
4164		       "`gl_FragData' and `%s'\n",
4165		       user_defined_fs_output->name);
4166   }
4167}
4168