Branch: Tag:

2014-05-22

2014-05-22 16:49:17 by Per Hedbor <ph@opera.com>

Binary size: push_constant_text -> push_text when not time-critical.

Especially in error handling, and code that does a lot of other string
operations anyway the speed gain is not wort the 100+ bytes code size
of each instance of push_constant_text

This saves about 20K of code size (main pike binary), while not really
changing the speed much.

push_constant_text that seemed to be in at least pseudo-time-critical
code was kept as they were.

On a related note, push_constant_text(":") four times in a row creates
four different string variables, for obvious reasons.

Some of the remaining push_constant_text really should have a
module/file local string variable, even though that is more bothersome
to create.

It might be nice to have this in .cmod files automatically.

798:      static void stat__sprintf(INT32 args)   { -  int n=0, x; +  int x;       if (args<1)    SIMPLE_TOO_FEW_ARGS_ERROR("_sprintf",2);
811:    switch (x)    {    case 'O': -  n++; push_constant_text("Stat("); -  -  n++; _stat_index(STAT_MODE_STRING); -  -  n++; push_constant_text(" "); -  -  n++; _stat_index(STAT_SIZE); -  n++; push_constant_text("b)"); -  f_add(n); +  push_text("Stat(%s %db)"); +  _stat_index(STAT_MODE_STRING); +  _stat_index(STAT_SIZE); +  f_sprintf(3);    return;    default:    push_int(0);