bison 3.0+ support, patch from https://redmine.kannel.org/issues/699 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;