Branch: Tag:

2021-02-21

2021-02-21 14:20:41 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Compiler [Typechecker]: Add implicit zero to types.

In 8.0 compat mode and not strict types zero is now implicitly
added to types.

1852:    struct pike_type *type;    node *n;    push_finished_type(Pike_compiler->compiler_frame->current_type); +  if (!TEST_COMPAT(8,0) && +  (THIS_COMPILATION->lex.pragmas & ID_STRICT_TYPES) && +  (Pike_compiler->compiler_frame->current_type->type != PIKE_T_AUTO)) { +  if (!pike_types_le(zero_type_string, +  Pike_compiler->compiler_frame->current_type)) { +  if (Pike_compiler->compiler_pass == COMPILER_PASS_LAST) { +  ref_push_string($1->u.sval.u.string); +  yytype_report(REPORT_WARNING, NULL, 0, zero_type_string, +  NULL, 0, Pike_compiler->compiler_frame->current_type, +  1, "Type does not contain zero for variable without " +  "initializer %s. Type adjusted."); +  } +  push_type(PIKE_T_ZERO); +  push_type(T_OR); +  } +  }    n = Pike_compiler->current_attributes;    while(n) {    push_type_attribute(CDR(n)->u.sval.u.string);
5488:   /* Set compiler_frame->current_type from the type stack. */   static void update_current_type(void)   { +  if (TEST_COMPAT(8,0) || +  !(THIS_COMPILATION->lex.pragmas & ID_STRICT_TYPES)) { +  struct pike_type *t = peek_type_stack(); +  if (!t || (t->type != PIKE_T_AUTO)) { +  /* Implicit zero */ +  push_type(PIKE_T_ZERO); +  push_type(T_OR); +  } +  }    if(Pike_compiler->compiler_frame->current_type)    free_type(Pike_compiler->compiler_frame->current_type);    Pike_compiler->compiler_frame->current_type = compiler_pop_type();   }