LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File gateway-1.4.5.patch of Package kannel (Project home:mnhauke)

diff -ur gateway-1.4.5.orig/wmlscript/wsgram.y gateway-1.4.5/wmlscript/wsgram.y
--- gateway-1.4.5.orig/wmlscript/wsgram.y	2013-12-17 05:50:51.000000000 -0500
+++ gateway-1.4.5/wmlscript/wsgram.y	2018-08-17 15:43:57.000000000 -0500
@@ -14,18 +14,9 @@
 
 #include "wmlscript/wsint.h"
 
-/* The required yyerror() function.  This is actually not used but to
-   report the internal parser errors.  All other errors are reported
-   by using the `wserror.h' functions. */
-extern void yyerror(char *msg);
-
-#if WS_DEBUG
-/* Just for debugging purposes. */
-WsCompilerPtr global_compiler = NULL;
-#endif /* WS_DEBUG */
-
 %}
 
+
 /* The possible semantic values. */
 %union
 {
@@ -45,6 +36,19 @@
     WsExpression *expr;
 }
 
+%{
+/* The required yyerror() function.  This is actually not used but to
+   report the internal parser errors.  All other errors are reported
+   by using the `wserror.h' functions. */
+extern void yyerror(YYLTYPE* locp, WsCompiler* compiler, const char* msg);
+
+#if WS_DEBUG
+/* Just for debugging purposes. */
+WsCompilerPtr global_compiler = NULL;
+#endif /* WS_DEBUG */
+
+%}
+
 /* Tokens. */
 
 /* Language literals. */
@@ -106,6 +110,8 @@
 
 /* Generate reentrant parser. */
 %pure-parser
+%parse-param { WsCompiler* compiler }
+%lex-param   { WsCompiler* compiler }
 
 /* This grammar has one shift-reduce conflict.  It comes from the
    if-else statement. */
@@ -119,7 +125,7 @@
 	  Pragmas FunctionDeclarations
 	| FunctionDeclarations
 	| error
-		{ ws_error_syntax(pctx, @1.first_line); }
+		{ ws_error_syntax(compiler, @1.first_line); }
 	;
 
 /* Pragmas. */
@@ -132,7 +138,7 @@
 Pragma:
 	  tUSE PragmaDeclaration ';'
 	| error
-		{ ws_error_syntax(pctx, @1.first_line); }
+		{ ws_error_syntax(compiler, @1.first_line); }
 	;
 
 PragmaDeclaration:
@@ -143,7 +149,7 @@
 
 ExternalCompilationUnitPragma:
 	  tURL tIDENTIFIER tSTRING
-	  	{ ws_pragma_use(pctx, @2.first_line, $2, $3); }
+	  	{ ws_pragma_use(compiler, @2.first_line, $2, $3); }
 	;
 
 AccessControlPragma:
@@ -153,28 +159,23 @@
 AccessControlSpecifier:
 	  tDOMAIN tSTRING
 	  	{
-		    WsCompiler *compiler = (WsCompiler *) pctx;
-
 		    /* Pass this to the byte-code */
 		    if (!ws_bc_add_pragma_access_domain(compiler->bc, $2->data,
 						        $2->len))
-		        ws_error_memory(pctx);
+		        ws_error_memory(compiler);
 		    ws_lexer_free_utf8(compiler, $2);
 		}
 	| tPATH tSTRING
 	  	{
-		    WsCompiler *compiler = (WsCompiler *) pctx;
-
 		    /* Pass this to the byte-code */
 		    if (!ws_bc_add_pragma_access_path(compiler->bc, $2->data,
 						      $2->len))
-		        ws_error_memory(pctx);
+		        ws_error_memory(compiler);
 
 		    ws_lexer_free_utf8(compiler, $2);
 		}
 	| tDOMAIN tSTRING tPATH tSTRING
 	  	{
-		    WsCompiler *compiler = (WsCompiler *) pctx;
 		    WsBool success = WS_TRUE;
 
 		    /* Pass these to the byte-code */
@@ -187,7 +188,7 @@
 		        success = WS_FALSE;
 
 		    if (!success)
-		        ws_error_memory(pctx);
+		        ws_error_memory(compiler);
 
 		    ws_lexer_free_utf8(compiler, $2);
 		    ws_lexer_free_utf8(compiler, $4);
@@ -207,8 +208,6 @@
 MetaName:
 	  tNAME MetaBody
 		{
-		    WsCompiler *compiler = (WsCompiler *) pctx;
-
 		    /* Meta information for the origin servers.  Show it
                      * to the user if requested. */
 		    if (compiler->params.meta_name_cb)
@@ -225,8 +224,6 @@
 MetaHttpEquiv:
 	  tHTTP tEQUIV MetaBody
 	  	{
-		    WsCompiler *compiler = (WsCompiler *) pctx;
-
 		    /* Meta information HTTP header that should be
                      * included to an HTTP response header.  Show it to
                      * the user if requested. */
@@ -246,7 +243,6 @@
 	  tUSER tAGENT MetaBody
 		{
 		    WsBool success;
-		    WsCompiler *compiler = (WsCompiler *) pctx;
 
 		    /* Pass this pragma to the byte-code */
 		    if ($3) {
@@ -272,16 +268,16 @@
 		        ws_pragma_meta_body_free(compiler, $3);
 
 		        if (!success)
-		  	    ws_error_memory(pctx);
+		  	    ws_error_memory(compiler);
 		    }
 		}
 	;
 
 MetaBody:
 	  MetaPropertyName MetaContent
-		{ $$ = ws_pragma_meta_body(pctx, $1, $2, NULL); }
+		{ $$ = ws_pragma_meta_body(compiler, $1, $2, NULL); }
 	| MetaPropertyName MetaContent MetaScheme
-		{ $$ = ws_pragma_meta_body(pctx, $1, $2, $3); }
+		{ $$ = ws_pragma_meta_body(compiler, $1, $2, $3); }
 	;
 
 MetaPropertyName: tSTRING;
@@ -301,12 +297,12 @@
 		{
 		    char *name = ws_strdup($3);
 
-		    ws_lexer_free_block(pctx, $3);
+		    ws_lexer_free_block(compiler, $3);
 
 		    if (name)
-		        ws_function(pctx, $1, name, @3.first_line, $5, $7);
+		        ws_function(compiler, $1, name, @3.first_line, $5, $7);
 		    else
-		        ws_error_memory(pctx);
+		        ws_error_memory(compiler);
 		}
 	;
 
@@ -317,7 +313,7 @@
 
 FormalParameterListOpt:
 	  /* empty */
-		{ $$ = ws_list_new(pctx); }
+		{ $$ = ws_list_new(compiler); }
 	| FormalParameterList
 	;
 
@@ -332,17 +328,17 @@
                     char *id;
                     WsFormalParm *parm;
 
-		    id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree, $1);
-                    parm = ws_formal_parameter(pctx, @1.first_line, id);
+		    id = ws_f_strdup((compiler)->pool_stree, $1);
+                    parm = ws_formal_parameter(compiler, @1.first_line, id);
 
-		    ws_lexer_free_block(pctx, $1);
+		    ws_lexer_free_block(compiler, $1);
 
 		    if (id == NULL || parm == NULL) {
-		        ws_error_memory(pctx);
+		        ws_error_memory(compiler);
 		        $$ = NULL;
 		    } else {
-		        $$ = ws_list_new(pctx);
-		        ws_list_append(pctx, $$, parm);
+		        $$ = ws_list_new(compiler);
+		        ws_list_append(compiler, $$, parm);
 		    }
 		}
 	| FormalParameterList ',' tIDENTIFIER
@@ -350,16 +346,16 @@
                     char *id;
                     WsFormalParm *parm;
 
-		    id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree, $3);
-                    parm = ws_formal_parameter(pctx, @1.first_line, id);
+		    id = ws_f_strdup(compiler->pool_stree, $3);
+                    parm = ws_formal_parameter(compiler, @1.first_line, id);
 
-		    ws_lexer_free_block(pctx, $3);
+		    ws_lexer_free_block(compiler, $3);
 
 		    if (id == NULL || parm == NULL) {
-		        ws_error_memory(pctx);
+		        ws_error_memory(compiler);
 		        $$ = NULL;
 		    } else
-		        ws_list_append(pctx, $1, parm);
+		        ws_list_append(compiler, $1, parm);
 		}
 	;
 
@@ -369,22 +365,22 @@
 	  Block
 		{
 		    if ($1)
-		        $$ = ws_stmt_block(pctx, $1->first_line, $1->last_line,
+		        $$ = ws_stmt_block(compiler, $1->first_line, $1->last_line,
 				           $1);
 		    else
 		        $$ = NULL;
 		}
 	| VariableStatement
 	| ';'			/* EmptyStatement */
-		{ $$ = ws_stmt_empty(pctx, @1.first_line); }
+		{ $$ = ws_stmt_empty(compiler, @1.first_line); }
 	| Expression ';'	/* ExpressionStatement */
-		{ $$ = ws_stmt_expr(pctx, $1->line, $1); }
+		{ $$ = ws_stmt_expr(compiler, $1->line, $1); }
 	| IfStatement
 	| IterationStatement
 	| tCONTINUE ';'		/* ContinueStatement */
-		{ $$ = ws_stmt_continue(pctx, @1.first_line); }
+		{ $$ = ws_stmt_continue(compiler, @1.first_line); }
 	| tBREAK ';'		/* BreakStatement */
-		{ $$ = ws_stmt_break(pctx, @1.first_line); }
+		{ $$ = ws_stmt_break(compiler, @1.first_line); }
 	| ReturnStatement
 	;
 
@@ -398,56 +394,56 @@
 		}
 	| error
 		{
-		    ws_error_syntax(pctx, @1.first_line);
+		    ws_error_syntax(compiler, @1.first_line);
 		    $$ = NULL;
 		}
 	;
 
 StatementListOpt:
 	  /* empty */
-		{ $$ = ws_list_new(pctx); }
+		{ $$ = ws_list_new(compiler); }
 	| StatementList
 	;
 
 StatementList:
 	  Statement
 		{
-		    $$ = ws_list_new(pctx);
-		    ws_list_append(pctx, $$, $1);
+		    $$ = ws_list_new(compiler);
+		    ws_list_append(compiler, $$, $1);
 		}
 	| StatementList Statement
-		{ ws_list_append(pctx, $1, $2); }
+		{ ws_list_append(compiler, $1, $2); }
 	;
 
 VariableStatement:
 	  tVAR VariableDeclarationList ';'
-		{ $$ = ws_stmt_variable(pctx, @1.first_line, $2); }
+		{ $$ = ws_stmt_variable(compiler, @1.first_line, $2); }
 	| tVAR error
-		{ ws_error_syntax(pctx, @2.first_line); }
+		{ ws_error_syntax(compiler, @2.first_line); }
 	;
 
 VariableDeclarationList:
 	  VariableDeclaration
 		{
-		    $$ = ws_list_new(pctx);
-		    ws_list_append(pctx, $$, $1);
+		    $$ = ws_list_new(compiler);
+		    ws_list_append(compiler, $$, $1);
 		}
 	| VariableDeclarationList ',' VariableDeclaration
-		{ ws_list_append(pctx, $1, $3); }
+		{ ws_list_append(compiler, $1, $3); }
 	;
 
 VariableDeclaration:
 	  tIDENTIFIER VariableInitializedOpt
 		{
-		    char *id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree,
+		    char *id = ws_f_strdup(compiler->pool_stree,
 					   $1);
 
-		    ws_lexer_free_block(pctx, $1);
+		    ws_lexer_free_block(compiler, $1);
 		    if (id == NULL) {
-		        ws_error_memory(pctx);
+		        ws_error_memory(compiler);
 		        $$ = NULL;
 		    } else
-		        $$ = ws_variable_declaration(pctx, id, $2);
+		        $$ = ws_variable_declaration(compiler, id, $2);
 		}
 	;
 
@@ -460,29 +456,29 @@
 
 IfStatement:
 	  tIF '(' Expression ')' Statement tELSE Statement
-		{ $$ = ws_stmt_if(pctx, @1.first_line, $3, $5, $7); }
+		{ $$ = ws_stmt_if(compiler, @1.first_line, $3, $5, $7); }
 	| tIF '(' Expression ')' Statement
-		{ $$ = ws_stmt_if(pctx, @1.first_line, $3, $5, NULL); }
+		{ $$ = ws_stmt_if(compiler, @1.first_line, $3, $5, NULL); }
 	;
 
 IterationStatement:
 	  tWHILE '(' Expression ')' Statement
-		{ $$ = ws_stmt_while(pctx, @1.first_line, $3, $5); }
+		{ $$ = ws_stmt_while(compiler, @1.first_line, $3, $5); }
 	| ForStatement
 	;
 
 ForStatement:
 	  tFOR '(' ExpressionOpt ';' ExpressionOpt ';' ExpressionOpt ')'
 			Statement
-	  	{ $$ = ws_stmt_for(pctx, @1.first_line, NULL, $3, $5, $7, $9); }
+	  	{ $$ = ws_stmt_for(compiler, @1.first_line, NULL, $3, $5, $7, $9); }
 	| tFOR '(' tVAR VariableDeclarationList ';' ExpressionOpt ';'
 	       		ExpressionOpt ')' Statement
-	  	{ $$ = ws_stmt_for(pctx, @1.first_line, $4, NULL, $6, $8, $10); }
+	  	{ $$ = ws_stmt_for(compiler, @1.first_line, $4, NULL, $6, $8, $10); }
 	;
 
 ReturnStatement:
 	  tRETURN ExpressionOpt ';'
-		{ $$ = ws_stmt_return(pctx, @1.first_line, $2); }
+		{ $$ = ws_stmt_return(compiler, @1.first_line, $2); }
 	;
 
 /* Expressions. */
@@ -496,135 +492,135 @@
 Expression:
 	  AssignmentExpression
 	| Expression ',' AssignmentExpression
-		{ $$ = ws_expr_comma(pctx, @2.first_line, $1, $3); }
+		{ $$ = ws_expr_comma(compiler, @2.first_line, $1, $3); }
 	;
 
 AssignmentExpression:
 	  ConditionalExpression
 	| tIDENTIFIER	'='		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, '=', $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, '=', $3); }
 	| tIDENTIFIER	tMULA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tMULA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tMULA, $3); }
 	| tIDENTIFIER	tDIVA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tDIVA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tDIVA, $3); }
 	| tIDENTIFIER	tREMA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tREMA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tREMA, $3); }
 	| tIDENTIFIER	tADDA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tADDA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tADDA, $3); }
 	| tIDENTIFIER	tSUBA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tSUBA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tSUBA, $3); }
 	| tIDENTIFIER	tLSHIFTA	AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tLSHIFTA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tLSHIFTA, $3); }
 	| tIDENTIFIER	tRSSHIFTA	AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tRSSHIFTA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tRSSHIFTA, $3); }
 	| tIDENTIFIER	tRSZSHIFTA	AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tRSZSHIFTA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tRSZSHIFTA, $3); }
 	| tIDENTIFIER	tANDA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tANDA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tANDA, $3); }
 	| tIDENTIFIER	tXORA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tXORA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tXORA, $3); }
 	| tIDENTIFIER	tORA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tORA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tORA, $3); }
 	| tIDENTIFIER	tIDIVA		AssignmentExpression
-		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tIDIVA, $3); }
+		{ $$ = ws_expr_assign(compiler, @1.first_line, $1, tIDIVA, $3); }
 	;
 
 ConditionalExpression:
 	  LogicalORExpression
 	| LogicalORExpression '?' AssignmentExpression ':' AssignmentExpression
-		{ $$ = ws_expr_conditional(pctx, @2.first_line, $1, $3, $5); }
+		{ $$ = ws_expr_conditional(compiler, @2.first_line, $1, $3, $5); }
 	;
 
 LogicalORExpression:
 	  LogicalANDExpression
 	| LogicalORExpression tOR LogicalANDExpression
-		{ $$ = ws_expr_logical(pctx, @2.first_line, WS_ASM_SCOR, $1, $3); }
+		{ $$ = ws_expr_logical(compiler, @2.first_line, WS_ASM_SCOR, $1, $3); }
 	;
 
 LogicalANDExpression:
 	  BitwiseORExpression
 	| LogicalANDExpression tAND BitwiseORExpression
-		{ $$ = ws_expr_logical(pctx, @2.first_line, WS_ASM_SCAND, $1, $3); }
+		{ $$ = ws_expr_logical(compiler, @2.first_line, WS_ASM_SCAND, $1, $3); }
 	;
 
 BitwiseORExpression:
 	  BitwiseXORExpression
 	| BitwiseORExpression '|' BitwiseXORExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_OR, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_B_OR, $1, $3); }
 	;
 
 BitwiseXORExpression:
 	  BitwiseANDExpression
 	| BitwiseXORExpression '^' BitwiseANDExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_XOR, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_B_XOR, $1, $3); }
 	;
 
 BitwiseANDExpression:
 	  EqualityExpression
 	| BitwiseANDExpression '&' EqualityExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_AND, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_B_AND, $1, $3); }
 	;
 
 EqualityExpression:
 	  RelationalExpression
 	| EqualityExpression tEQ RelationalExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_EQ, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_EQ, $1, $3); }
 	| EqualityExpression tNE RelationalExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_NE, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_NE, $1, $3); }
 	;
 
 RelationalExpression:
 	  ShiftExpression
 	| RelationalExpression '<' ShiftExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_LT, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_LT, $1, $3); }
 	| RelationalExpression '>' ShiftExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_GT, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_GT, $1, $3); }
 	| RelationalExpression tLE ShiftExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_LE, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_LE, $1, $3); }
 	| RelationalExpression tGE ShiftExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_GE, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_GE, $1, $3); }
 	;
 
 ShiftExpression:
 	  AdditiveExpression
 	| ShiftExpression tLSHIFT AdditiveExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_LSHIFT, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_B_LSHIFT, $1, $3); }
 	| ShiftExpression tRSSHIFT AdditiveExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_RSSHIFT, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_B_RSSHIFT, $1, $3); }
 	| ShiftExpression tRSZSHIFT AdditiveExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_RSZSHIFT, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_B_RSZSHIFT, $1, $3); }
 	;
 
 AdditiveExpression:
 	  MultiplicativeExpression
 	| AdditiveExpression '+' MultiplicativeExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_ADD, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_ADD, $1, $3); }
 	| AdditiveExpression '-' MultiplicativeExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_SUB, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_SUB, $1, $3); }
 	;
 
 MultiplicativeExpression:
 	  UnaryExpression
 	| MultiplicativeExpression '*' UnaryExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_MUL, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_MUL, $1, $3); }
 	| MultiplicativeExpression '/' UnaryExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_DIV, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_DIV, $1, $3); }
 	| MultiplicativeExpression tIDIV UnaryExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_IDIV, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_IDIV, $1, $3); }
 	| MultiplicativeExpression '%' UnaryExpression
-		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_REM, $1, $3); }
+		{ $$ = ws_expr_binary(compiler, @2.first_line, WS_ASM_REM, $1, $3); }
 	;
 
 UnaryExpression:
 	  PostfixExpression
 	| tTYPEOF UnaryExpression
-		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_TYPEOF, $2); }
+		{ $$ = ws_expr_unary(compiler, @1.first_line, WS_ASM_TYPEOF, $2); }
 	| tISVALID UnaryExpression
-		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_ISVALID, $2); }
+		{ $$ = ws_expr_unary(compiler, @1.first_line, WS_ASM_ISVALID, $2); }
 	| tPLUSPLUS tIDENTIFIER
-		{ $$ = ws_expr_unary_var(pctx, @1.first_line, WS_TRUE, $2); }
+		{ $$ = ws_expr_unary_var(compiler, @1.first_line, WS_TRUE, $2); }
 	| tMINUSMINUS tIDENTIFIER
-		{ $$ = ws_expr_unary_var(pctx, @1.first_line, WS_FALSE, $2); }
+		{ $$ = ws_expr_unary_var(compiler, @1.first_line, WS_FALSE, $2); }
 	| '+' UnaryExpression
 		{
                     /* There is no direct way to compile unary `+'.
@@ -638,65 +634,65 @@
                      * because binary `+' accepts strings, which makes the
 		     * type conversion different.
                      */
-                    $$ = ws_expr_binary(pctx, @1.first_line, WS_ASM_SUB, $2,
-                              ws_expr_const_integer(pctx, @1.first_line, 0));
+                    $$ = ws_expr_binary(compiler, @1.first_line, WS_ASM_SUB, $2,
+                              ws_expr_const_integer(compiler, @1.first_line, 0));
 		}
 	| '-' UnaryExpression
-		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_UMINUS, $2); }
+		{ $$ = ws_expr_unary(compiler, @1.first_line, WS_ASM_UMINUS, $2); }
 	| '~' UnaryExpression
-		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_B_NOT, $2); }
+		{ $$ = ws_expr_unary(compiler, @1.first_line, WS_ASM_B_NOT, $2); }
 	| '!' UnaryExpression
-		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_NOT, $2); }
+		{ $$ = ws_expr_unary(compiler, @1.first_line, WS_ASM_NOT, $2); }
 	;
 
 PostfixExpression:
 	  CallExpression
 	| tIDENTIFIER tPLUSPLUS
-		{ $$ = ws_expr_postfix_var(pctx, @1.first_line, WS_TRUE, $1); }
+		{ $$ = ws_expr_postfix_var(compiler, @1.first_line, WS_TRUE, $1); }
 	| tIDENTIFIER tMINUSMINUS
-		{ $$ = ws_expr_postfix_var(pctx, @1.first_line, WS_FALSE, $1); }
+		{ $$ = ws_expr_postfix_var(compiler, @1.first_line, WS_FALSE, $1); }
 	;
 
 CallExpression:
 	  PrimaryExpression
 	| tIDENTIFIER Arguments                 /* LocalScriptFunctionCall */
 		{
-		    WsFunctionHash *f = ws_function_hash(pctx, $1);
+		    WsFunctionHash *f = ws_function_hash(compiler, $1);
 
 		    /* Add an usage count for the local script function. */
 		    if (f)
 		      f->usage_count++;
 
-		    $$ = ws_expr_call(pctx, @1.first_line, ' ', NULL, $1, $2);
+		    $$ = ws_expr_call(compiler, @1.first_line, ' ', NULL, $1, $2);
 		}
 	| tIDENTIFIER '#' tIDENTIFIER Arguments /* ExternalScriptFunctionCall*/
-		{ $$ = ws_expr_call(pctx, @3.first_line, '#', $1, $3, $4); }
+		{ $$ = ws_expr_call(compiler, @3.first_line, '#', $1, $3, $4); }
 	| tIDENTIFIER '.' tIDENTIFIER Arguments /* LibraryFunctionCall */
-		{ $$ = ws_expr_call(pctx, @3.first_line, '.', $1, $3, $4); }
+		{ $$ = ws_expr_call(compiler, @3.first_line, '.', $1, $3, $4); }
 	;
 
 PrimaryExpression:
 	  tIDENTIFIER
-		{ $$ = ws_expr_symbol(pctx, @1.first_line, $1); }
+		{ $$ = ws_expr_symbol(compiler, @1.first_line, $1); }
 	| tINVALID
-		{ $$ = ws_expr_const_invalid(pctx, @1.first_line); }
+		{ $$ = ws_expr_const_invalid(compiler, @1.first_line); }
 	| tTRUE
-		{ $$ = ws_expr_const_true(pctx, @1.first_line); }
+		{ $$ = ws_expr_const_true(compiler, @1.first_line); }
 	| tFALSE
-		{ $$ = ws_expr_const_false(pctx, @1.first_line); }
+		{ $$ = ws_expr_const_false(compiler, @1.first_line); }
 	| tINTEGER
-		{ $$ = ws_expr_const_integer(pctx, @1.first_line, $1); }
+		{ $$ = ws_expr_const_integer(compiler, @1.first_line, $1); }
 	| tFLOAT
-		{ $$ = ws_expr_const_float(pctx, @1.first_line, $1); }
+		{ $$ = ws_expr_const_float(compiler, @1.first_line, $1); }
 	| tSTRING
-		{ $$ = ws_expr_const_string(pctx, @1.first_line, $1); }
+		{ $$ = ws_expr_const_string(compiler, @1.first_line, $1); }
 	| '(' Expression ')'
 		{ $$ = $2; }
 	;
 
 Arguments:
 	  '(' ')'
-		{ $$ = ws_list_new(pctx); }
+		{ $$ = ws_list_new(compiler); }
 	| '(' ArgumentList ')'
 		{ $$ = $2; }
 	;
@@ -704,17 +700,17 @@
 ArgumentList:
 	  AssignmentExpression
 		{
-		    $$ = ws_list_new(pctx);
-		    ws_list_append(pctx, $$, $1);
+		    $$ = ws_list_new(compiler);
+		    ws_list_append(compiler, $$, $1);
 		}
 	| ArgumentList ',' AssignmentExpression
-		{ ws_list_append(pctx, $1, $3); }
+		{ ws_list_append(compiler, $1, $3); }
 	;
 
 %%
 
 void
-yyerror(char *msg)
+yyerror(YYLTYPE* locp, WsCompiler* compiler, const char* msg)
 {
 #if WS_DEBUG
   fprintf(stderr, "*** %s:%ld: wsc: %s - this msg will be removed ***\n",
diff -ur gateway-1.4.5.orig/wmlscript/wsint.h gateway-1.4.5/wmlscript/wsint.h
--- gateway-1.4.5.orig/wmlscript/wsint.h	2018-01-17 04:24:38.000000000 -0500
+++ gateway-1.4.5/wmlscript/wsint.h	2018-08-17 15:45:26.000000000 -0500
@@ -269,9 +269,6 @@
 
 /********************* Lexer and parser *********************************/
 
-#define YYPARSE_PARAM   pctx
-#define YYLEX_PARAM     pctx
-
 /* The lexer. */
 extern int yylex();
 
@@ -293,6 +290,6 @@
 void ws_lexer_free_utf8(WsCompiler *compiler, WsUtf8String *string);
 
 /* The parser. */
-int ws_yy_parse(void *context);
+int ws_yy_parse(WsCompiler* compiler);
 
 #endif /* not WSINT_H */
diff -ur gateway-1.4.5.orig/wmlscript/wslexer.c gateway-1.4.5/wmlscript/wslexer.c
--- gateway-1.4.5.orig/wmlscript/wslexer.c	2018-01-17 04:24:38.000000000 -0500
+++ gateway-1.4.5/wmlscript/wslexer.c	2018-08-17 15:15:28.000000000 -0500
@@ -218,9 +218,8 @@
 
 /********************* Global functions *********************************/
 
-int ws_yy_lex(YYSTYPE *yylval, YYLTYPE *yylloc, void *context)
+int ws_yy_lex(YYSTYPE *yylval, YYLTYPE *yylloc, WsCompiler* compiler)
 {
-    WsCompiler *compiler = (WsCompiler *) context;
     WsUInt32 ch, ch2;
     WsBuffer buffer;
     unsigned char *p;