Ian Romanick
41ec6a47ab
Track the function that is currently being defined
...
Later this will allow type checking for return statements.
2010-03-19 17:08:05 -07:00
Ian Romanick
16a246c049
Initial bits for converting AST return nodes to IR return instructions
2010-03-19 16:51:16 -07:00
Ian Romanick
9578c87ce2
Implement IR return instructions
2010-03-19 16:44:52 -07:00
Ian Romanick
3359e58eac
Use glsl_symbol_table::name_declared_this_scope
...
Prevent most illegal name reuse.
2010-03-19 15:38:52 -07:00
Ian Romanick
ac4fdc255b
Add query to determine whether a name was declared at this scope
...
This will be used to prevent a variable and a function with the same
name from being declared. As a side effect, the calls to
add_{type,name,function} should never fail.
2010-03-19 15:37:01 -07:00
Ian Romanick
38395c1aad
Use separate namespaces for types, variables, and functions
...
This will allow types and their constructors to be easily stored in
the same symbol table. This does add a potential problem that a
shader could declare a variable and a function with the same name.
This appears to be forbidden by the GLSL spec.
2010-03-19 15:34:13 -07:00
Ian Romanick
95517faf69
Add function to determine the scope where a variable is declared
2010-03-19 15:32:57 -07:00
Ian Romanick
8bde4cec6b
Use glsl_symbol_table instead of using _mesa_symbol_table directly
2010-03-19 11:57:24 -07:00
Ian Romanick
82de85e264
Add a GLSL-specific facade to _mesa_symbol_table
...
This adds some type saftey and will enable elimination of a bunch of
type casts and other ugly crap in the code.
2010-03-19 11:43:36 -07:00
Ian Romanick
b0bb781e1d
Don't track new type names during pass-1 parsing
...
This implementation was wrong anyway because it did not respect
scoping rules. This will need to be revisited soon. The most likely
result is that the grammar is going to need some significant re-work
to be able to use a IDENTIFIER in all the places where a TYPE_NAME is
currently used.
2010-03-19 11:12:33 -07:00
Ian Romanick
e309a6051d
Add multiple include protection to ir.h
2010-03-15 15:20:15 -07:00
Ian Romanick
5c2bd09888
Trivial clean-ups to ast_type_specifier(int) constructor
2010-03-15 14:31:48 -07:00
Ian Romanick
ed85a5dd4b
Add new constructors for ast_type_specifier
...
Add a constructor that uses an ast_struct_specifier and one that uses
a type name. This saves a (trivial) bit of code, but it also ensures
some of the class invariants (i.e., type_name != NULL) are met.
2010-03-15 14:28:17 -07:00
Ian Romanick
7f9d309743
Ensure that ast_type always has type_name set
...
For built-in types, type_name would be NULL. This ensures that
type_name is set even for the built-in types. This simplifies code in
a few places and centralizes the name setting code.
2010-03-15 14:18:32 -07:00
Ian Romanick
bbddcb3092
Factor ast_type_specifier code out to ast_type.cpp
2010-03-15 14:09:23 -07:00
Ian Romanick
f4749610ed
Factor guts of function matching code out to match_function_by_name
...
This function will be used for matching some types of constructors as well.
2010-03-15 13:26:02 -07:00
Ian Romanick
548fa293a3
Move ast_function_expression::hir to ast_function.cpp
2010-03-15 13:04:13 -07:00
Ian Romanick
728330e3b2
Remove DOA hir_function.c file
2010-03-15 13:02:08 -07:00
Ian Romanick
f13d4295f9
Change type of function_identifier to silence bison warning
...
When the implementation of function_call_header and
function_identifier were changed a few commits ago, the types of the
production changed. This just updates the types specified for the
productions to match reality.
2010-03-11 16:12:25 -08:00
Ian Romanick
44eb13d0b5
Add parameters to function declarations in the correct order
2010-03-11 16:11:07 -08:00
Ian Romanick
471471f834
Initial pass at resolving function calls
...
The code is still really rough and *REALLY* incomplete. This at least
passes the first few trivially simple test cases.
2010-03-11 14:57:26 -08:00
Ian Romanick
cdb8d54b68
Default function parameters to 'in' instead of auto
2010-03-11 14:48:51 -08:00
Ian Romanick
7e3ed40200
Add a handful of simple tests for function calls in constructors
2010-03-11 14:46:19 -08:00
Ian Romanick
ed45ec6a51
Add ir_call call to represent function calls.
2010-03-11 14:35:37 -08:00
Ian Romanick
d27ec2461b
Fix broken constructor of ir_instruction base class
...
Make the constructor inline-able, and don't try to initialize it as a
simple_node. It hasn't been derived from simple_node in a long time.
2010-03-11 14:23:41 -08:00
Ian Romanick
1f58518059
Track generation of errors and halt compilation appropriately
2010-03-11 14:08:33 -08:00
Ian Romanick
3821761e45
Differentiate in ast_function_expression between constructors and func. calls
2010-03-10 14:12:22 -08:00
Ian Romanick
986b8f7982
Tell emacs that C++ .h files are C++
2010-03-10 13:58:12 -08:00
Ian Romanick
7cfddf1941
Make ast_function_expression subclass of ast_expression
2010-03-10 13:26:52 -08:00
Ian Romanick
d10fe19495
Simplified constructor for identifier expressions
2010-03-10 13:25:56 -08:00
Ian Romanick
adfb0cd740
IR variable: Initial work to support GLSL built-in variables
2010-03-10 10:43:54 -08:00
Ian Romanick
f52888fac0
Include cstdlib to be sure size_t is available
2010-03-10 10:42:37 -08:00
Ian Romanick
d949a9afb0
Move top-level AST to HIR conversion to _mesa_ast_to_hir
2010-03-10 09:55:22 -08:00
Ian Romanick
8e6cd3bf54
Require the shader target be specified to the driver program
2010-03-10 09:31:30 -08:00
Ian Romanick
1c4156ffac
Use ir_print_visitor to dump IR tree
2010-03-10 09:27:03 -08:00
Ian Romanick
02ae68f496
Fix typeo in gl_FogParameters.scale (was scalre)
2010-03-10 00:52:39 -08:00
Ian Romanick
0b67823462
AST to IR: Mark 'varying' in a vertex shader as 'out'
2010-03-10 00:28:59 -08:00
Ian Romanick
654c057257
ir_variable: Initialize all attribute bits to reasonable defaults
...
This prevents variables from randomly having their 'invariant' or
'read_only' bits set, for example.
2010-03-10 00:21:27 -08:00
Ian Romanick
fe10250355
IR print visitor: Add some support for printing types and constants
2010-03-09 21:44:34 -08:00
Ian Romanick
6044ae79a0
IR print visitor: Print assignments
2010-03-09 16:40:45 -08:00
Ian Romanick
6652af36fe
Add assignment side-effect to the instruction stream
...
The actual assignment is a side-effect of the assignment expression.
Add it to the instruction stream and return the LHS of the assignment
as its rvalue.
2010-03-09 16:38:02 -08:00
Ian Romanick
78b51b0fdd
IR visitor: Add initial version of ir_visitor classes
...
The ir_visitor class is the abstract base class for all visitors.
ir_print_visitor contains the beginnings of a concrete visitor class
that will print out an IR sequence in a Lisp / Scheme-like syntax.
2010-03-09 16:26:15 -08:00
Ian Romanick
fce1150156
Convert is_glsl_type_matrix to glsl_type::is_matrix
2010-03-09 15:58:52 -08:00
Ian Romanick
a2dd22fb19
Convert is_glsl_type_vector to glsl_type::is_vector
2010-03-09 15:55:16 -08:00
Ian Romanick
cb36f8aaee
Convert is_glsl_type_scalar to glsl_type::is_scalar
2010-03-09 15:51:22 -08:00
Ian Romanick
eccf0bf5f2
Make glsl_type a class
...
Among other benefits, this cleans up a the hackery invovled in
initializing the union field in builtin_types.h.
2010-03-09 15:49:31 -08:00
Ian Romanick
3a9e989628
Remove unused function
2010-03-08 23:44:59 -08:00
Ian Romanick
0044e7edce
Conver IR structures to use exec_list instead of simple_node
2010-03-08 23:44:54 -08:00
Ian Romanick
7e4ce71923
Add yet-another linked list type
...
The use of macros to access existing linked list type makes it
unsuitable for its current use as a base class. Since this type and
the accompanying macros are used all over the place in Mesa, we can't
really change them.
2010-03-08 23:42:45 -08:00
Ian Romanick
61484ba188
Remove prototypes for *_to_hir functions that no longer exist
2010-03-08 23:06:48 -08:00