Merge branch 'mesa_7_7_branch'
[mesa.git] / src / glsl / pp / sl_pp_context.c
index 2ce50790313ca34e332920d17327f30ee859dfa3..74a9bdddfdc13f44e9089f952aa22a0ca7f0391e 100644 (file)
@@ -32,7 +32,8 @@
 
 
 struct sl_pp_context *
-sl_pp_context_create(void)
+sl_pp_context_create(const char *input,
+                     const struct sl_pp_purify_options *options)
 {
    struct sl_pp_context *context;
 
@@ -46,12 +47,18 @@ sl_pp_context_create(void)
       return NULL;
    }
 
-   context->getc_buf = malloc(64 * sizeof(char));
+   context->getc_buf_capacity = 64;
+   context->getc_buf = malloc(context->getc_buf_capacity * sizeof(char));
    if (!context->getc_buf) {
       sl_pp_context_destroy(context);
       return NULL;
    }
 
+   if (sl_pp_token_buffer_init(&context->tokens, context)) {
+      sl_pp_context_destroy(context);
+      return NULL;
+   }
+
    context->macro_tail = &context->macro;
    context->if_ptr = SL_PP_MAX_IF_NESTING;
    context->if_value = 1;
@@ -60,6 +67,10 @@ sl_pp_context_create(void)
    context->line = 1;
    context->file = 0;
 
+   sl_pp_purify_state_init(&context->pure, input, options);
+
+   memset(&context->process_state, 0, sizeof(context->process_state));
+
    return context;
 }
 
@@ -70,6 +81,8 @@ sl_pp_context_destroy(struct sl_pp_context *context)
       free(context->cstr_pool);
       sl_pp_macro_free(context->macro);
       free(context->getc_buf);
+      sl_pp_token_buffer_destroy(&context->tokens);
+      free(context->process_state.out);
       free(context);
    }
 }