diff --git a/src/docode.c b/src/docode.c index 439423e87dc83c5fab690e2e9d7f28af83a78bf3..7b276ac050c0f914150ee6aa4d4f27852232a794 100644 --- a/src/docode.c +++ b/src/docode.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: docode.c,v 1.48 1999/06/19 19:57:31 hubbe Exp $"); +RCSID("$Id: docode.c,v 1.49 1999/08/03 00:45:09 hubbe Exp $"); #include "las.h" #include "program.h" #include "language.h" @@ -1078,7 +1078,12 @@ static int do_docode2(node *n,int flags) switch(n->u.sval.type) { case T_INT: - emit(F_NUMBER,n->u.sval.u.integer); + if(!n->u.sval.u.integer && n->u.sval.subtype==NUMBER_UNDEFINED) + { + emit2(F_UNDEFINED); + }else{ + emit(F_NUMBER,n->u.sval.u.integer); + } return 1; case T_STRING: diff --git a/src/interpreter.h b/src/interpreter.h index c1bd510c328c3fc6240cd75b49e88c9b80657cfd..fc365b6bf4d157596f3950f0b09fbb0712f421ea 100644 --- a/src/interpreter.h +++ b/src/interpreter.h @@ -113,6 +113,7 @@ static int eval_instruction(unsigned char *pc) CASE(F_LDA); accumulator=GET_ARG(); break; /* Push number */ + CASE(F_UNDEFINED); push_int(0); sp[-1].subtype=NUMBER_UNDEFINED; break; CASE(F_CONST0); push_int(0); break; CASE(F_CONST1); push_int(1); break; CASE(F_CONST_1); push_int(-1); break; diff --git a/src/language.yacc b/src/language.yacc index b62a5cfbfd4a636d0cf1e651ecf18653287b7fd2..b34c32dafd2f154e4422ad2aa1420490e697e8a2 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -47,6 +47,7 @@ %token F_CLEAR_STRING_SUBTYPE %token F_CONSTANT F_FLOAT F_STRING F_ARROW_STRING %token F_NUMBER F_NEG_NUMBER F_CONST_1 F_CONST0 F_CONST1 F_BIGNUM +%token F_UNDEFINED /* * These are the predefined functions that can be accessed from Pike. */ @@ -181,7 +182,7 @@ /* This is the grammar definition of Pike. */ #include "global.h" -RCSID("$Id: language.yacc,v 1.119 1999/07/19 00:32:41 hubbe Exp $"); +RCSID("$Id: language.yacc,v 1.120 1999/08/03 00:45:12 hubbe Exp $"); #ifdef HAVE_MEMORY_H #include <memory.h> #endif diff --git a/src/lex.c b/src/lex.c index f8ccb47d309541e0cc052dafb0cf506682530b22..5ffa2ce90db6e55ad2af52f4deddc26a8f9725f5 100644 --- a/src/lex.c +++ b/src/lex.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: lex.c,v 1.64 1999/03/11 13:44:32 hubbe Exp $"); +RCSID("$Id: lex.c,v 1.65 1999/08/03 00:45:13 hubbe Exp $"); #include "language.h" #include "array.h" #include "lex.h" @@ -185,6 +185,7 @@ struct keyword instr_names[]= { "number", F_NUMBER, I_HASARG }, { "pop", F_POP_VALUE,0 }, { "pop_n_elems", F_POP_N_ELEMS, I_HASARG }, +{ "push UNDEFINED", F_UNDEFINED,0 }, { "push 0", F_CONST0,0 }, { "push 1", F_CONST1,0 }, { "push 0x7fffffff", F_BIGNUM,0 },