pike.git / src / language.yacc

version» Context lines:

pike.git/src/language.yacc:1247:   optional_identifier: TOK_IDENTIFIER    | bad_identifier { $$=0; }    | /* empty */ { $$=0; }    ;      new_arg_name: full_type optional_dot_dot_dot optional_identifier    {    int i;    if(Pike_compiler->varargs) yyerror("Can't define more arguments after ...");    +  if (TEST_COMPAT(8, 0) && +  !pike_types_le(zero_type_string, peek_type_stack(), 0, 0)) { +  push_type(PIKE_T_ZERO); +  push_type(T_OR); +  } +     if($2)    {    push_unlimited_array_type(T_ARRAY);    Pike_compiler->varargs=1;    }       if(!$3)    {    $3=mkstrnode(empty_pike_string);    }
pike.git/src/language.yacc:1774:    Pike_compiler->type_stackp) {    push_reverse_type(T_FUNCTION);    }    }    | /* empty */    {    push_type(T_MIXED);    push_type(T_VOID);    push_type(T_OR);    -  push_type(T_ZERO); -  push_type(T_VOID); -  push_type(T_OR); +  push_type(PIKE_T_UNKNOWN);       push_type(T_MANY);       if (!(THIS_COMPILATION->lex.pragmas & ID_STRICT_TYPES) ||    TEST_COMPAT(8, 0)) {    /* For type validation we also need this.    * Otherwise code like    *    * function foo;    * function(string:void) bar = foo;    *    * will fail.    */    push_type(PIKE_T_UNKNOWN);       push_type(T_MIXED); -  push_type(T_VOID); -  push_type(T_OR); +        push_type(T_MANY);       push_type(T_OR);    }    }    ;      function_type_list: /* Empty */ optional_comma { $$=0; }    | function_type_list2 optional_comma { $$=!$2; }