diff --git a/src/language.yacc b/src/language.yacc index b9e2f54b4548ee5a36aaa8d1bd543a53793a405f..4ec773649ab5ff720da0269af875fd47f19bcbed 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -156,7 +156,7 @@ /* This is the grammar definition of Pike. */ #include "global.h" -RCSID("$Id: language.yacc,v 1.18 1997/01/19 09:08:00 hubbe Exp $"); +RCSID("$Id: language.yacc,v 1.19 1997/01/27 01:18:01 hubbe Exp $"); #ifdef HAVE_MEMORY_H #include <memory.h> #endif @@ -391,7 +391,7 @@ import: modifiers F_IMPORT idents ';' resolv_constant($3); free_node($3); use_module(sp-1); - sp--; + pop_stack(); } ; @@ -1153,8 +1153,6 @@ low_idents: F_IDENTIFIER }else if(find_module_identifier($1)){ $$=mkconstantsvaluenode(sp-1); pop_stack(); - }else if((f=lookup_efun($1))){ - $$=mkconstantsvaluenode(&f->function); }else{ $$=0; if( get_master() ) @@ -1184,15 +1182,13 @@ low_idents: F_IDENTIFIER } | F_PREDEF F_COLON_COLON F_IDENTIFIER { - struct efun *f; - f=lookup_efun($3); - if(!f) - { - my_yyerror("Unknown efun: %s.",$3->str); - $$=mkintnode(0); - }else{ - $$=mksvaluenode(&f->function); - } + struct svalue tmp; + node *tmp2; + tmp.type=T_MAPPING; + tmp.u.mapping=get_builtin_constants(); + tmp2=mkconstantsvaluenode(&tmp); + $$=index_node(tmp2, $3); + free_node(tmp2); free_string($3); } | F_IDENTIFIER F_COLON_COLON F_IDENTIFIER @@ -1222,21 +1218,21 @@ low_idents: F_IDENTIFIER setup_fake_program(); for(e=1;e<(int)fake_program.num_inherits;e++) { - if(fake_program.inherits[e].inherit_level!=1) continue; - i=low_reference_inherited_identifier(e,$2); - if(i==-1) continue; - if($$) - { - $$=mknode(F_ARG_LIST,$$,mkidentifiernode(i)); - }else{ - $$=mkidentifiernode(i); - } + if(fake_program.inherits[e].inherit_level!=1) continue; + i=low_reference_inherited_identifier(e,$2); + if(i==-1) continue; + if($$) + { + $$=mknode(F_ARG_LIST,$$,mkidentifiernode(i)); + }else{ + $$=mkidentifiernode(i); + } } if(!$$) { - $$=mkintnode(0); + $$=mkintnode(0); }else{ - if($$->token==F_ARG_LIST) $$=mkefuncallnode("aggregate",$$); + if($$->token==F_ARG_LIST) $$=mkefuncallnode("aggregate",$$); } free_string($2); } diff --git a/src/las.c b/src/las.c index 1fa17efff8171f9e15b32b9931b7bec783cd6ffc..8ba9388532c5bad1284308456a67c86677d6add5 100644 --- a/src/las.c +++ b/src/las.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: las.c,v 1.13 1997/01/22 05:19:45 hubbe Exp $"); +RCSID("$Id: las.c,v 1.14 1997/01/27 01:19:01 hubbe Exp $"); #include "language.h" #include "interpret.h" @@ -363,22 +363,17 @@ node *mkapplynode(node *func,node *args) node *mkefuncallnode(char *function, node *args) { - struct efun *fun; struct pike_string *name; + node *n; name = findstring(function); - if(!name) + if(!name || !find_module_identifier(name)) { my_yyerror("Internally used efun undefined: %s",function); return mkintnode(0); } - - fun = lookup_efun(name); - if(!fun) - { - my_yyerror("Internally used efun undefined: %s",function); - return mkintnode(0); - } - return mkapplynode(mksvaluenode(&fun->function), args); + n=mkapplynode(mksvaluenode(sp-1), args); + pop_stack(); + return n; } node *mkopernode(char *oper_id, node *arg1, node *arg2)