Use yy_scan_string and stop caring about shader->SourceLen.
We had to call strlen on the preprocessed source, which seemed a bit pointless; also, we updated shader->SourceLen but not shader->Source, which was even more confusing. Just leave both untouched.
This commit is contained in:
@@ -57,7 +57,7 @@ glcpp_warning (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
preprocess(void *talloc_ctx, const char **shader, size_t *shader_len)
|
preprocess(void *talloc_ctx, const char **shader)
|
||||||
{
|
{
|
||||||
int errors;
|
int errors;
|
||||||
glcpp_parser_t *parser = glcpp_parser_create ();
|
glcpp_parser_t *parser = glcpp_parser_create ();
|
||||||
@@ -69,7 +69,6 @@ preprocess(void *talloc_ctx, const char **shader, size_t *shader_len)
|
|||||||
|
|
||||||
talloc_steal(talloc_ctx, parser->output);
|
talloc_steal(talloc_ctx, parser->output);
|
||||||
*shader = parser->output;
|
*shader = parser->output;
|
||||||
*shader_len = strlen(parser->output);
|
|
||||||
|
|
||||||
errors = parser->error;
|
errors = parser->error;
|
||||||
glcpp_parser_destroy (parser);
|
glcpp_parser_destroy (parser);
|
||||||
|
@@ -330,11 +330,10 @@ precision return PRECISION;
|
|||||||
%%
|
%%
|
||||||
|
|
||||||
void
|
void
|
||||||
_mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state,
|
_mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state, const char *string)
|
||||||
const char *string, size_t len)
|
|
||||||
{
|
{
|
||||||
yylex_init_extra(state, & state->scanner);
|
yylex_init_extra(state, & state->scanner);
|
||||||
yy_scan_bytes(string, len, state->scanner);
|
yy_scan_string(string, state->scanner);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -102,11 +102,11 @@ extern void _mesa_glsl_warning(const YYLTYPE *locp,
|
|||||||
const char *fmt, ...);
|
const char *fmt, ...);
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
extern int preprocess(void *ctx, const char **shader, size_t *shader_len);
|
extern int preprocess(void *ctx, const char **shader);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void _mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state,
|
extern void _mesa_glsl_lexer_ctor(struct _mesa_glsl_parse_state *state,
|
||||||
const char *string, size_t len);
|
const char *string);
|
||||||
|
|
||||||
extern void _mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state);
|
extern void _mesa_glsl_lexer_dtor(struct _mesa_glsl_parse_state *state);
|
||||||
|
|
||||||
|
4
main.cpp
4
main.cpp
@@ -128,10 +128,10 @@ compile_shader(struct glsl_shader *shader)
|
|||||||
* should probably be the parser context, but there isn't one yet.
|
* should probably be the parser context, but there isn't one yet.
|
||||||
*/
|
*/
|
||||||
const char *source = shader->Source;
|
const char *source = shader->Source;
|
||||||
state.error = preprocess(shader, &source, &shader->SourceLen);
|
state.error = preprocess(shader, &source);
|
||||||
|
|
||||||
if (!state.error) {
|
if (!state.error) {
|
||||||
_mesa_glsl_lexer_ctor(& state, source, shader->SourceLen);
|
_mesa_glsl_lexer_ctor(& state, source);
|
||||||
_mesa_glsl_parse(& state);
|
_mesa_glsl_parse(& state);
|
||||||
_mesa_glsl_lexer_dtor(& state);
|
_mesa_glsl_lexer_dtor(& state);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user