pike.git
/
src
/
lex.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/lex.c:1:
/*\ ||| This file a part of Pike, and is copyright by Fredrik Hubinette ||| Pike is distributed as GPL (General Public License) ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h"
-
RCSID("$Id: lex.c,v 1.
30
1997/
11
/
08
01
:
34
:
40
hubbe
Exp $");
+
RCSID("$Id: lex.c,v 1.
31
1997/
12
/
16
22
:
31
:
25
grubba
Exp $");
#include "language.h" #include "array.h" #include "lex.h" #include "stralloc.h" #include "dynamic_buffer.h" #include "constants.h" #include "hashtable.h" #include "stuff.h" #include "pike_memory.h" #include "interpret.h"
pike.git/src/lex.c:1861:
return; } s=findstring(buf); if(s && low_mapping_string_lookup(get_builtin_constants(), s)) UNGETSTR(" 1 ",3); else UNGETSTR(" 0 ",3); continue;
+
} else if (!strcmp("resolv", my_yylval.str)) {
+
int res = 0;
+
struct svalue *oldsp = sp;
+
+
SKIPWHITE();
+
if (!GOBBLE('(')) {
+
yyerror("Missing '(' in #if resolv().\n");
+
return;
}
-
+
READBUF(isidchar(C));
-
+
/* code from low_idents here */
+
if (get_master) {
+
push_text(buf);
+
current_file->refs++;
+
push_string(current_file);
+
+
SAFE_APPLY_MASTER("resolv", 2);
+
+
if ((throw_value.type != T_STRING) &&
+
(!(IS_ZERO(sp-1) && sp[-1].subtype == 1))) {
+
res = 1;
+
}
+
} else {
+
res = 0;
+
}
+
+
while(GOBBLE('.')) {
+
READBUF(isidchar(C));
+
if (res) {
+
JMP_BUF recovery;
+
+
push_text(buf);
+
+
free_svalue(&throw_value);
+
throw_value.type = T_INT;
+
+
if (SETJMP(recovery)) {
+
res = 0;
+
} else {
+
f_index(2);
+
if (IS_ZERO(sp-1) && sp[-1].subtype == 1) {
+
res = 0;
+
}
+
}
+
UNSETJMP(recovery);
+
}
+
}
+
+
if (!GOBBLE(')')) {
+
yyerror("Missing ')' in #if resolv().\n");
+
return;
+
}
+
+
if (sp > oldsp) {
+
pop_n_elems(sp - oldsp);
+
}
+
+
if (res) {
+
UNGETSTR(" 1 ", 3);
+
} else {
+
UNGETSTR(" 0 ", 3);
+
}
+
continue;
+
}
+
s=findstring(my_yylval.str); if(!s || !expand_define(s,1)) UNGETSTR(" 0 ",3); continue; } break; } }