Allow app to specify a base filename for error messages.
authorRyan C. Gordon <icculus@icculus.org>
Thu, 12 Feb 2009 02:41:43 -0500
changeset 578 6c8f73c845e7
parent 577 bec531dd448e
child 579 e408bfc631f5
Allow app to specify a base filename for error messages.
assemble.c
finderrors.c
mojoshader.h
mojoshader_assembler.c
mojoshader_preprocessor.c
preprocess.c
--- a/assemble.c	Thu Feb 12 02:37:59 2009 -0500
+++ b/assemble.c	Thu Feb 12 02:41:43 2009 -0500
@@ -11,7 +11,8 @@
 #include <stdlib.h>
 #include "mojoshader.h"
 
-static int assemble(const char *buf, int len, const char *outfile)
+static int assemble(const char *fname, const char *buf, int len,
+                    const char *outfile)
 {
     FILE *io = fopen(outfile, "wb");
     if (io == NULL)
@@ -23,8 +24,8 @@
     const MOJOSHADER_parseData *pd;
     int retval = 0;
 
-    pd = MOJOSHADER_assemble(buf, len, NULL, 0, NULL, 0, NULL, 0,
-                             NULL, NULL, NULL, NULL, NULL);
+    pd = MOJOSHADER_assemble(fname, buf, len, NULL, 0, NULL, 0,
+                             NULL, 0, NULL, NULL, NULL, NULL, NULL);
     if (pd->error_count > 0)
     {
         int i;
@@ -76,7 +77,7 @@
                 printf(" ... fread('%s') failed.\n", infile);
             else
             {
-                if (assemble(buf, rc, outfile))
+                if (assemble(infile, buf, rc, outfile))
                     retval = 0;
                 else
                     remove(outfile);
--- a/finderrors.c	Thu Feb 12 02:37:59 2009 -0500
+++ b/finderrors.c	Thu Feb 12 02:41:43 2009 -0500
@@ -84,7 +84,7 @@
         const MOJOSHADER_parseData *a;
 
         buf[rc] = '\0';  // make sure the source is null-terminated.
-        a = MOJOSHADER_assemble((char *) buf, rc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+        a = MOJOSHADER_assemble(fname, (char *) buf, rc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
 
         if (a->error_count > 0)
         {
--- a/mojoshader.h	Thu Feb 12 02:37:59 2009 -0500
+++ b/mojoshader.h	Thu Feb 12 02:41:43 2009 -0500
@@ -329,7 +329,8 @@
     const char *error;
 
     /*
-     * Filename where error happened.
+     * Filename where error happened. This can be NULL if the information
+     *  isn't available.
      */
     const char *filename;
 
@@ -747,7 +748,14 @@
  *
  * This function maps to D3DXPreprocessShader().
  *
- * (source) is an ASCII string of text to preprocess. It does not need to be
+ * (filename) is a NULL-terminated UTF-8 filename. It can be NULL. We do not
+ *  actually access this file, as we obtain our data from (source). This
+ *  string is copied when we need to report errors while processing (source),
+ *  as opposed to errors in a file referenced via the #include directive in
+ *  (source). If this is NULL, then errors will report the filename as NULL,
+ *  too.
+ *
+ * (source) is an string of UTF-8 text to preprocess. It does not need to be
  *  NULL-terminated.
  *
  * (sourcelen) is the length of the string pointed to by (source), in bytes.
@@ -781,8 +789,8 @@
  *  call. This allows you to preprocess several shaders on separate CPU cores
  *  at the same time.
  */
-const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *source,
-                             unsigned int sourcelen,
+const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *filename,
+                             const char *source, unsigned int sourcelen,
                              const MOJOSHADER_preprocessorDefine **defines,
                              unsigned int define_count,
                              MOJOSHADER_includeOpen include_open,
@@ -808,7 +816,14 @@
  * This function is optional. Use this to convert Direct3D shader assembly
  *  language into bytecode, which can be handled by MOJOSHADER_parse().
  *
- * (source) is an ASCII string of valid Direct3D shader assembly source code.
+ * (filename) is a NULL-terminated UTF-8 filename. It can be NULL. We do not
+ *  actually access this file, as we obtain our data from (source). This
+ *  string is copied when we need to report errors while processing (source),
+ *  as opposed to errors in a file referenced via the #include directive in
+ *  (source). If this is NULL, then errors will report the filename as NULL,
+ *  too.
+ *
+ * (source) is an UTF-8 string of valid Direct3D shader assembly source code.
  *  It does not need to be NULL-terminated.
  *
  * (sourcelen) is the length of the string pointed to by (source), in bytes.
@@ -854,8 +869,8 @@
  *  call. This allows you to assemble several shaders on separate CPU cores
  *  at the same time.
  */
-const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *source,
-                             unsigned int sourcelen,
+const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *filename,
+                             const char *source, unsigned int sourcelen,
                              const char **comments, unsigned int comment_count,
                              const MOJOSHADER_symbol *symbols,
                              unsigned int symbol_count,
--- a/mojoshader_assembler.c	Thu Feb 12 02:37:59 2009 -0500
+++ b/mojoshader_assembler.c	Thu Feb 12 02:41:43 2009 -0500
@@ -1514,7 +1514,8 @@
 } // parse_token
 
 
-static Context *build_context(const char *source, unsigned int sourcelen,
+static Context *build_context(const char *filename,
+                              const char *source, unsigned int sourcelen,
                               const MOJOSHADER_preprocessorDefine **defines,
                               unsigned int define_count,
                               MOJOSHADER_includeOpen include_open,
@@ -1537,7 +1538,7 @@
     ctx->free = f;
     ctx->malloc_data = d;
     ctx->parse_phase = MOJOSHADER_PARSEPHASE_NOTSTARTED;
-    ctx->preprocessor = preprocessor_start(NULL, source, sourcelen,
+    ctx->preprocessor = preprocessor_start(filename, source, sourcelen,
                                            include_open, include_close,
                                            defines, define_count, m, f, d);
 
@@ -1817,8 +1818,8 @@
 
 // API entry point...
 
-const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *source,
-                             unsigned int sourcelen,
+const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *filename,
+                             const char *source, unsigned int sourcelen,
                              const char **comments, unsigned int comment_count,
                              const MOJOSHADER_symbol *symbols,
                              unsigned int symbol_count,
@@ -1834,7 +1835,7 @@
     if ( ((m == NULL) && (f != NULL)) || ((m != NULL) && (f == NULL)) )
         return &MOJOSHADER_out_of_mem_data;  // supply both or neither.
 
-    ctx = build_context(source, sourcelen, defines, define_count,
+    ctx = build_context(filename, source, sourcelen, defines, define_count,
                         include_open, include_close, m, f, d);
     if (ctx == NULL)
         return &MOJOSHADER_out_of_mem_data;
--- a/mojoshader_preprocessor.c	Thu Feb 12 02:37:59 2009 -0500
+++ b/mojoshader_preprocessor.c	Thu Feb 12 02:41:43 2009 -0500
@@ -603,8 +603,8 @@
 } // build_errors
 
 
-const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *source,
-                             unsigned int sourcelen,
+const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *filename,
+                             const char *source, unsigned int sourcelen,
                              const MOJOSHADER_preprocessorDefine **defines,
                              unsigned int define_count,
                              MOJOSHADER_includeOpen include_open,
@@ -626,8 +626,7 @@
 include_open = (MOJOSHADER_includeOpen) 0x1;
 include_close = (MOJOSHADER_includeClose) 0x1;
 
-    const char *fname = "*";  // !!! FIXME
-    Preprocessor *pp = preprocessor_start(fname, source, sourcelen,
+    Preprocessor *pp = preprocessor_start(filename, source, sourcelen,
                                           include_open, include_close,
                                           defines, define_count, m, f, d);
 
--- a/preprocess.c	Thu Feb 12 02:37:59 2009 -0500
+++ b/preprocess.c	Thu Feb 12 02:41:43 2009 -0500
@@ -11,7 +11,8 @@
 #include <stdlib.h>
 #include "mojoshader.h"
 
-static int preprocess(const char *buf, int len, const char *outfile)
+static int preprocess(const char *fname, const char *buf, int len,
+                      const char *outfile)
 {
     FILE *io = fopen(outfile, "wb");
     if (io == NULL)
@@ -23,7 +24,7 @@
     const MOJOSHADER_preprocessData *pd;
     int retval = 0;
 
-    pd = MOJOSHADER_preprocess(buf, len, NULL, 0, NULL,
+    pd = MOJOSHADER_preprocess(fname, buf, len, NULL, 0, NULL,
                                NULL, NULL, NULL, NULL);
 
     if (pd->error_count > 0)
@@ -77,7 +78,7 @@
                 printf(" ... fread('%s') failed.\n", infile);
             else
             {
-                if (preprocess(buf, rc, outfile))
+                if (preprocess(infile, buf, rc, outfile))
                     retval = 0;
                 else
                     remove(outfile);