@@ -411,9 +411,9 @@ def make_call(id_: str, lineno: int, args: symbols.ARGLIST):
411411 return make_func_call (id_ , lineno , args )
412412
413413
414- def make_param_decl (id_ : str , lineno : int , typedef , is_array = False ):
414+ def make_param_decl (id_ : str , lineno : int , typedef , is_array : bool , default_value : Optional [ symbols . SYMBOL ] = None ):
415415 """Wrapper that creates a param declaration"""
416- return SYMBOL_TABLE .declare_param (id_ , lineno , typedef , is_array )
416+ return SYMBOL_TABLE .declare_param (id_ , lineno , typedef , is_array , default_value )
417417
418418
419419def make_type (typename , lineno , implicit = False ):
@@ -2931,6 +2931,10 @@ def p_param_decl_list(p):
29312931
29322932def p_param_decl_list2 (p ):
29332933 """param_decl_list : param_decl_list COMMA param_definition"""
2934+ if p [1 ] is not None and p [3 ] is not None : # No errors in parsing
2935+ if p [3 ].default_value is None and p [1 ][- 1 ].default_value is not None :
2936+ src .api .errmsg .syntax_error_mandatory_param_after_optional (p [3 ].lineno , p [1 ][- 1 ].name , p [3 ].name )
2937+
29342938 p [0 ] = make_param_list (p [1 ], p [3 ])
29352939
29362940
@@ -2981,13 +2985,32 @@ def p_param_def_array(p):
29812985
29822986
29832987def p_param_def_type (p ):
2984- """param_def : singleid typedef"""
2988+ """param_def : singleid typedef default_arg_value """
29852989 id_ : Id = p [1 ]
29862990 typedef = p [2 ]
29872991 if typedef is not None :
29882992 src .api .check .check_type_is_explicit (id_ .lineno , id_ .name , typedef )
29892993
2990- p [0 ] = make_param_decl (id_ .name , id_ .lineno , typedef )
2994+ default_value = make_typecast (typedef , p [3 ], id_ .lineno )
2995+ p [0 ] = make_param_decl (
2996+ id_ .name ,
2997+ id_ .lineno ,
2998+ typedef ,
2999+ is_array = False ,
3000+ default_value = default_value ,
3001+ )
3002+
3003+
3004+ def p_param_def_default_arg_value (p ):
3005+ """default_arg_value :
3006+ | EQ expr
3007+ """
3008+ if len (p ) == 1 :
3009+ p [0 ] = None
3010+ return
3011+
3012+ p [0 ] = p [2 ]
3013+ return
29913014
29923015
29933016def p_function_body (p ):
0 commit comments