#include <fcntl.h>
#include <unistd.h>
+extern "C" {
+#include <talloc.h>
+}
+
#include "ast.h"
#include "glsl_parser_extras.h"
#include "glsl_parser.h"
state.scanner = NULL;
state.translation_unit.make_empty();
state.symbols = new glsl_symbol_table;
+ state.info_log = talloc_strdup(shader, "");
state.error = false;
state.temp_index = 0;
state.loop_or_switch_nesting = NULL;
shader->symbols = state.symbols;
shader->CompileStatus = !state.error;
+
+ if (shader->InfoLog)
+ talloc_free(shader->InfoLog);
+
+ shader->InfoLog = state.info_log;
+
return;
}
sizeof(struct glsl_shader *) * (whole_program.NumShaders + 1));
assert(whole_program.Shaders != NULL);
- struct glsl_shader *shader = new glsl_shader;
- memset(shader, 0, sizeof(*shader));
+ /* talloc context should probably be whole_program */
+ struct glsl_shader *shader = talloc_zero(NULL, glsl_shader);
whole_program.Shaders[whole_program.NumShaders] = shader;
whole_program.NumShaders++;
usage_fail(argv[0]);
shader->Source = load_text_file(argv[optind], &shader->SourceLen);
+ if (shader->Source == NULL) {
+ printf("File \"%s\" does not exist.\n", argv[optind]);
+ exit(EXIT_FAILURE);
+ }
compile_shader(shader);
if (!shader->CompileStatus) {
+ printf("Info log for %s:\n%s\n", argv[optind], shader->InfoLog);
status = EXIT_FAILURE;
break;
}