[PATCH 4/5] d3dcompiler: Add identifiers parsing.

Matteo Bruni mbruni at codeweavers.com
Mon Jun 4 10:58:23 CDT 2012


---
 dlls/d3dcompiler_43/d3dcompiler_private.h |    3 +++
 dlls/d3dcompiler_43/hlsl.l                |   12 ++++++++++++
 dlls/d3dcompiler_43/hlsl.y                |    1 +
 dlls/d3dcompiler_43/utils.c               |   19 +++++++++++++++++++
 4 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/dlls/d3dcompiler_43/d3dcompiler_private.h b/dlls/d3dcompiler_43/d3dcompiler_private.h
index 72c2511..ec6e6e4 100644
--- a/dlls/d3dcompiler_43/d3dcompiler_private.h
+++ b/dlls/d3dcompiler_43/d3dcompiler_private.h
@@ -614,6 +614,9 @@ struct hlsl_parse_ctx
 extern struct hlsl_parse_ctx hlsl_ctx DECLSPEC_HIDDEN;
 
 void hlsl_message(const char *fmt, ...) PRINTF_ATTR(1,2) DECLSPEC_HIDDEN;
+struct hlsl_ir_var *get_variable(struct hlsl_scope *scope, const char *name) DECLSPEC_HIDDEN;
+struct hlsl_type *get_type(struct hlsl_scope *scope, const char *name, BOOL recursive) DECLSPEC_HIDDEN;
+BOOL find_function(const char *name) DECLSPEC_HIDDEN;
 struct bwriter_shader *parse_hlsl_shader(const char *text, enum shader_type type, DWORD version,
         const char *entrypoint, char **messages) DECLSPEC_HIDDEN;
 
diff --git a/dlls/d3dcompiler_43/hlsl.l b/dlls/d3dcompiler_43/hlsl.l
index 0a18326..ef12ab9 100644
--- a/dlls/d3dcompiler_43/hlsl.l
+++ b/dlls/d3dcompiler_43/hlsl.l
@@ -45,6 +45,7 @@ WS                      [ \t]
 NEWLINE                 (\n)|(\r\n)
 DOUBLESLASHCOMMENT      "//"[^\n]*
 STRING                  \"[^\"]*\"
+IDENTIFIER              [A-Za-z_][A-Za-z0-9_]*
 
 ANY                     (.)
 
@@ -166,6 +167,17 @@ while                   {return KW_WHILE;               }
 column_major            {return KW_COLUMN_MAJOR;        }
 row_major               {return KW_ROW_MAJOR;           }
 
+{IDENTIFIER}            {
+                            hlsl_lval.name = d3dcompiler_strdup(yytext);
+                            if (get_variable(hlsl_ctx.cur_scope, yytext)
+                                    || find_function(yytext))
+                                return VAR_IDENTIFIER;
+                            else if (get_type(hlsl_ctx.cur_scope, yytext, TRUE))
+                                return TYPE_IDENTIFIER;
+                            else
+                                return NEW_IDENTIFIER;
+                        }
+
 [+-]?[0-9]*\.[0-9]+([eE][+-]?[0-9]+)?[h|H|f|F]? {
                             hlsl_lval.floatval = atof(yytext);
                             return C_FLOAT;
diff --git a/dlls/d3dcompiler_43/hlsl.y b/dlls/d3dcompiler_43/hlsl.y
index 8dcd0d8..b00226e 100644
--- a/dlls/d3dcompiler_43/hlsl.y
+++ b/dlls/d3dcompiler_43/hlsl.y
@@ -159,6 +159,7 @@ static void hlsl_error(const char *s)
 
 %token <intval> PRE_LINE
 
+%token <name> VAR_IDENTIFIER TYPE_IDENTIFIER NEW_IDENTIFIER
 %token <name> STRING
 %token <floatval> C_FLOAT
 %token <intval> C_INTEGER
diff --git a/dlls/d3dcompiler_43/utils.c b/dlls/d3dcompiler_43/utils.c
index 4cbad5b..d512a14 100644
--- a/dlls/d3dcompiler_43/utils.c
+++ b/dlls/d3dcompiler_43/utils.c
@@ -3,6 +3,7 @@
  * Copyright 2009 Matteo Bruni
  * Copyright 2008-2009 Henri Verbeet for CodeWeavers
  * Copyright 2010 Rico Schüller
+ * Copyright 2012 Matteo Bruni for CodeWeavers
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -759,3 +760,21 @@ void compilation_message(struct compilation_messages *msg, const char *fmt, va_l
         }
     }
 }
+
+struct hlsl_ir_var *get_variable(struct hlsl_scope *scope, const char *name)
+{
+    FIXME("stub.\n");
+    return NULL;
+}
+
+struct hlsl_type *get_type(struct hlsl_scope *scope, const char *name, BOOL recursive)
+{
+    FIXME("stub.\n");
+    return NULL;
+}
+
+BOOL find_function(const char *name)
+{
+    FIXME("stub.\n");
+    return FALSE;
+}
-- 
1.7.3.4




More information about the wine-patches mailing list