Branch: Tag:

1995-10-11

1995-10-11 13:00:52 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

committing

Rev: README:1.1
Rev: bin/create_testsuite:1.3
Rev: bin/hilfe.lpc:1.2
Rev: bin/rsif:1.2
Rev: bin/uhttpd.lpc:1.2
Rev: doc/simulated/open:1.1
Rev: lib/master.lpc:1.2
Rev: lib/simulate.lpc:1.4
Rev: lib/testsuite.lpc:1.3
Rev: src/BUGS:1.3
Rev: src/Makefile.in:1.6
Rev: src/Makefile.in.src:1.2
Rev: src/README:1.2
Rev: src/add_efun.c:1.2
Rev: src/add_efun.h:1.2
Rev: src/array.c:1.4
Rev: src/array.h:1.2
Rev: src/backend.c:1.3
Rev: src/backend.h:1.2
Rev: src/builtin_efuns.c:1.2
Rev: src/builtin_efuns.h:1.2
Rev: src/call_out.c:1.5
Rev: src/call_out.h:1.2
Rev: src/callback.c:1.2
Rev: src/callback.h:1.2
Rev: src/config.h:1.6
Rev: src/configure.in:1.9
Rev: src/debug.c:1.4
Rev: src/debug.h:1.4
Rev: src/docode.c:1.4
Rev: src/docode.h:1.2
Rev: src/dynamic_buffer.c:1.3
Rev: src/dynamic_buffer.h:1.2
Rev: src/efun.h:1.2
Rev: src/error.c:1.2
Rev: src/error.h:1.2
Rev: src/fd_control.c:1.2
Rev: src/fd_control.h:1.2
Rev: src/fsort.c:1.2
Rev: src/fsort.h:1.2
Rev: src/global.h:1.2
Rev: src/hashtable.c:1.2
Rev: src/hashtable.h:1.2
Rev: src/interpret.c:1.5
Rev: src/interpret.h:1.2
Rev: src/language.y:1.3
Rev: src/las.c:1.3
Rev: src/las.h:1.3
Rev: src/lex.c:1.3
Rev: src/lex.h:1.2
Rev: src/list.c:1.3
Rev: src/list.h:1.2
Rev: src/lpc_signal.c:1.1
Rev: src/lpc_signal.h:1.1
Rev: src/lpc_types.c:1.3
Rev: src/lpc_types.h:1.2
Rev: src/machine.h.in:1.3
Rev: src/macros.h:1.4
Rev: src/main.c:1.8
Rev: src/main.h:1.2
Rev: src/mapping.c:1.4
Rev: src/mapping.h:1.2
Rev: src/memory.c:1.3
Rev: src/memory.h:1.2
Rev: src/module.c:1.2
Rev: src/module.h:1.2
Rev: src/modules/files/Makefile.in:1.3
Rev: src/modules/files/Makefile.in.src:1.2
Rev: src/modules/files/configure.in:1.5
Rev: src/modules/files/datagram.c:1.2
Rev: src/modules/files/efuns.c:1.4
Rev: src/modules/files/file.c:1.5
Rev: src/modules/files/file.h:1.3
Rev: src/modules/files/file_machine.h.in:1.3
Rev: src/modules/files/socket.c:1.6
Rev: src/modules/math/Makefile.in:1.4
Rev: src/modules/math/Makefile.in.src:1.3
Rev: src/modules/math/math.c:1.2
Rev: src/modules/regexp/Makefile.in:1.3
Rev: src/modules/regexp/Makefile.in.src:1.2
Rev: src/modules/regexp/glue.c:1.2
Rev: src/modules/regexp/regexp.h:1.2
Rev: src/modules/sprintf/Makefile.in:1.3
Rev: src/modules/sprintf/Makefile.in.src:1.2
Rev: src/modules/sprintf/sprintf.c:1.2
Rev: src/object.c:1.3
Rev: src/object.h:1.2
Rev: src/opcodes.c:1.6
Rev: src/opcodes.h:1.2
Rev: src/operators.c:1.3
Rev: src/operators.h:1.2
Rev: src/otable.h:1.2
Rev: src/port.c:1.9
Rev: src/port.h:1.4
Rev: src/program.h:1.2
Rev: src/rusage.c:1.3
Rev: src/rusage.h:1.2
Rev: src/stralloc.c:1.3
Rev: src/stralloc.h:1.3
Rev: src/stuff.c:1.2
Rev: src/stuff.h:1.2
Rev: src/svalue.c:1.4
Rev: src/svalue.h:1.2
Rev: src/todo:1.2
Rev: src/types.h:1.6
Rev: src/ualarm.c:1.2

1: + /*\ + ||| This file a part of uLPC, and is copyright by Fredrik Hubinette + ||| uLPC is distributed as GPL (General Public License) + ||| See the files COPYING and DISCLAIMER for more information. + \*/   #include <setjmp.h>   #include "global.h"   #include "language.h"
905:       switch(n->token)    { -  case F_LOCAL: -  case F_GLOBAL: +  case F_LAND: +  case F_LOR: +  if(!match_types(CAR(n)->type,mixed_type_string)) +  yyerror("Bad conditional expression.\n");    -  +  if(!match_types(CDR(n)->type,mixed_type_string)) +  yyerror("Bad conditional expression.\n"); +  +  if(CAR(n)->type == CDR(n)->type) +  { +  copy_shared_string(n->type,CAR(n)->type); +  }else{ +  copy_shared_string(n->type,mixed_type_string); +  } +  break; +     case F_INDEX:    type_a=CAR(n)->type;    type_b=CDR(n)->type;
934:    copy_shared_string(n->type, mixed_type_string);    }    free_string(s); -  return; +  break;    }       case '?': -  +  if(!match_types(CAR(n)->type,mixed_type_string)) +  yyerror("Bad conditional expression.\n"); +     if(!CADR(n) || !CDDR(n))    {    copy_shared_string(n->type,void_type_string);
951:    }       copy_shared_string(n->type,mixed_type_string); -  return; +  break;    -  +  case F_RETURN: +  if(local_variables && +  local_variables->current_return_type && +  !match_types(local_variables->current_return_type,CAR(n)->type) && +  !( +  local_variables->current_return_type==void_type_string && +  CAR(n)->token == F_CONSTANT && +  IS_ZERO(& CAR(n)->u.sval) +  ) +  ) +  { +  yyerror("Wrong return type."); +  } +  +  /* Fall through */ +     case F_INC_LOOP:    case F_DEC_LOOP:    case F_DEC_NEQ_LOOP:    case F_INC_NEQ_LOOP:    case F_CASE: -  case F_DO: -  case F_FOR: -  case F_RETURN: +     case F_CONTINUE:    case F_BREAK:    copy_shared_string(n->type,void_type_string); -  return; +  break;    -  +  case F_DO: +  if(!match_types(CDR(n)->type,mixed_type_string)) +  yyerror("Bad conditional expression do - while().\n"); +  copy_shared_string(n->type,void_type_string); +  break; +  +  case F_FOR: +  if(!match_types(CAR(n)->type,mixed_type_string)) +  yyerror("Bad conditional expression for().\n"); +  copy_shared_string(n->type,void_type_string); +  break; +  +  case F_SWITCH: +  if(!match_types(CAR(n)->type,mixed_type_string)) +  yyerror("Bad switch expression.\n"); +  copy_shared_string(n->type,void_type_string); +  break; +     case F_CONSTANT:    n->type = get_type_of_svalue(& n->u.sval); -  return; +  break;    -  +  /* Not yet checked, but we know what they should return */ +  case F_NOT: +  case F_LT: +  case F_LE: +  case F_EQ: +  case F_NE: +  case F_GT: +  case F_GE: +  case F_MOD: +  case F_XOR: +  case F_LSH: +  case F_RSH: +  case F_COMPL: +  copy_shared_string(n->type,int_type_string); +  break; +     case F_ARG_LIST:    if(!CAR(n) || CAR(n)->type==void_type_string)    {