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