pike.git / src / language.yacc

version» Context lines:

pike.git/src/language.yacc:172:   %left F_LSH F_RSH   %left '+' '-'   %left '*' '%' '/'   %right F_NOT '~'   %nonassoc F_INC F_DEC      %{   /* This is the grammar definition of Pike. */      #include "global.h" - RCSID("$Id: language.yacc,v 1.96 1998/05/12 23:51:25 hubbe Exp $"); + RCSID("$Id: language.yacc,v 1.97 1998/05/20 02:14:28 hubbe Exp $");   #ifdef HAVE_MEMORY_H   #include <memory.h>   #endif      #include "interpret.h"   #include "array.h"   #include "object.h"   #include "stralloc.h"   #include "las.h"   #include "interpret.h"
pike.git/src/language.yacc:568:    }    '(' arguments ')'    {    int e;    /* construct the function type */    push_finished_type(compiler_frame->current_type);    while(--$3>=0) push_type(T_ARRAY);       if(compiler_frame->current_return_type)    free_string(compiler_frame->current_return_type); -  compiler_frame->current_return_type=pop_type(); +  compiler_frame->current_return_type=compiler_pop_type();       push_finished_type(compiler_frame->current_return_type);       e=$7-1;    if(varargs)    {    push_finished_type(compiler_frame->variable[e].type);    e--;    varargs=0;    pop_type_stack();
pike.git/src/language.yacc:590:    push_type(T_VOID);    }    push_type(T_MANY);    for(; e>=0; e--)    {    push_finished_type(compiler_frame->variable[e].type);    }    push_type(T_FUNCTION);       { -  struct pike_string *s=pop_type(); +  struct pike_string *s=compiler_pop_type();    $<n>$=mkstrnode(s);    free_string(s);    }       if(compiler_pass==1)    {    define_function($4->u.sval.u.string,    $<n>$->u.sval.u.string,    $1,    IDENTIFIER_PIKE_FUNCTION,
pike.git/src/language.yacc:632:    fatal("Stack error (underflow)\n");   #endif    }    pop_compiler_frame();    free_node($4);    free_node($<n>9);    }    | modifiers type_or_error optional_stars bad_identifier    '(' arguments ')' block_or_semi    { -  free_string(pop_type()); +  free_string(compiler_pop_type());    }    | modifiers type_or_error name_list ';' {}    | inheritance {}    | import {}    | constant {}    | class { free_node($1); }    | error ';'    {    reset_type_stack();    yyerrok;
pike.git/src/language.yacc:691:    MAKE_CONSTANT_SHARED_STRING(s,"");    $3=mkstrnode(s);    free_string(s);    }       if($3->u.sval.u.string->len &&    islocal($3->u.sval.u.string) >= 0)    my_yyerror("Variable '%s' appears twice in argument list.",    $3->u.sval.u.string->str);    -  add_local_name($3->u.sval.u.string, pop_type()); +  add_local_name($3->u.sval.u.string, compiler_pop_type());    free_node($3);    }    ;      func_args: '(' arguments ')' { $$=$2; }    | '(' error ')' { $$=0; yyerrok; }    | '(' error F_LEX_EOF    {    $$=0; yyerror("Missing ')'.");    yyerror("Unexpected end of file.");
pike.git/src/language.yacc:738:   modifier_list: /* empty */ { $$ = 0; }    | modifier modifier_list { $$ = $1 | $2; }    ;      optional_stars: optional_stars '*' { $$=$1 + 1; }    | /* empty */ { $$=0; }    ;      cast: '(' type ')'    { -  struct pike_string *s=pop_type(); +  struct pike_string *s=compiler_pop_type();    $$=mkstrnode(s);    free_string(s);    }    ;      type6: type | identifier_type ;      type: type '*' { push_type(T_ARRAY); }    | type2    ;      type7: type7 '*' { push_type(T_ARRAY); }    | type4    ;      simple_type: type4    { -  struct pike_string *s=pop_type(); +  struct pike_string *s=compiler_pop_type();    $$=mkstrnode(s);    free_string(s);    }    ;      simple_type2: type2    { -  struct pike_string *s=pop_type(); +  struct pike_string *s=compiler_pop_type();    $$=mkstrnode(s);    free_string(s);    }    ;      simple_identifier_type: identifier_type    { -  struct pike_string *s=pop_type(); +  struct pike_string *s=compiler_pop_type();    $$=mkstrnode(s);    free_string(s);    }    ;      identifier_type: idents    {    struct program *p;    resolv_program($1);    if((p=program_from_svalue(sp-1)))
pike.git/src/language.yacc:919:      name_list: new_name    | name_list ',' new_name    ;      new_name: optional_stars F_IDENTIFIER    {    struct pike_string *type;    push_finished_type(compiler_frame->current_type);    while($1--) push_type(T_ARRAY); -  type=pop_type(); +  type=compiler_pop_type();    define_variable($2->u.sval.u.string, type, current_modifiers);    free_string(type);    free_node($2);    }    | optional_stars bad_identifier {}    | optional_stars F_IDENTIFIER '='    {    struct pike_string *type;    push_finished_type(compiler_frame->current_type);    while($1--) push_type(T_ARRAY); -  type=pop_type(); +  type=compiler_pop_type();    $<number>$=define_variable($2->u.sval.u.string, type, current_modifiers);    free_string(type);    }    expr0    {    init_node=mknode(F_ARG_LIST,init_node,    mkcastnode(void_type_string,    mknode(F_ASSIGN,$5,    mkidentifiernode($<number>4))));    free_node($2);
pike.git/src/language.yacc:957:    {    free_node($4);    }    ;         new_local_name: optional_stars F_IDENTIFIER    {    push_finished_type($<n>0->u.sval.u.string);    while($1--) push_type(T_ARRAY); -  add_local_name($2->u.sval.u.string, pop_type()); +  add_local_name($2->u.sval.u.string, compiler_pop_type());    $$=mknode(F_ASSIGN,mkintnode(0),mklocalnode(islocal($2->u.sval.u.string)));    free_node($2);    }    | optional_stars bad_identifier { $$=0; }    | optional_stars F_IDENTIFIER '=' expr0    {    push_finished_type($<n>0->u.sval.u.string);    while($1--) push_type(T_ARRAY); -  add_local_name($2->u.sval.u.string, pop_type()); +  add_local_name($2->u.sval.u.string, compiler_pop_type());    $$=mknode(F_ASSIGN,$4,mklocalnode(islocal($2->u.sval.u.string)));    free_node($2);    }    | optional_stars bad_identifier '=' expr0    {    free_node($4);    $$=0;    }    | optional_stars F_IDENTIFIER '=' error    {
pike.git/src/language.yacc:1125:    pop_type_stack();    }else{    push_type(T_VOID);    }    push_type(T_MANY);    for(; e>=0; e--)    push_finished_type(compiler_frame->variable[e].type);       push_type(T_FUNCTION);    -  type=pop_type(); +  type=compiler_pop_type();       sprintf(buf,"__lambda_%ld_%ld",    (long)new_program->id,    local_class_counter++);    name=make_shared_string(buf);       f=dooptcode(name,    $4,    type,    ID_PRIVATE | ID_INLINE);
pike.git/src/language.yacc:1831:    yyerror("Unexpected end of file.");    }    | F_SSCANF '(' error '}' { $$=mkintnode(0); yyerror("Missing ')'."); }    | F_SSCANF '(' error ';' { $$=mkintnode(0); yyerror("Missing ')'."); }    ;      lvalue: expr4    | '[' low_lvalue_list ']' { $$=mknode(F_ARRAY_LVALUE, $2,0); }    | type6 F_IDENTIFIER    { -  add_local_name($2->u.sval.u.string,pop_type()); +  add_local_name($2->u.sval.u.string,compiler_pop_type());    $$=mklocalnode(islocal($2->u.sval.u.string));    free_node($2);    }    | bad_lvalue    { $$=mkintnode(0); }    ;   low_lvalue_list: lvalue lvalue_list { $$=mknode(F_LVALUE_LIST,$1,$2); }    ;      lvalue_list: /* empty */ { $$ = 0; }