rem: if (!weight) return error(errVector);
add: assert(weight);
context: Type1OneMMRemover::itc_command(int command, int on_stack){  Vector<double> *weight = weight_vector();  if (!weight) return error(errVector);  Vector<double> *scratch = scratch_vector();  int base = size() - on_stack - 2;  switch (command) {   case othcITC_load: {     if (on_stack != 1)       return false;     int offset = (int)at(base);     for (int i = 0; i < weight->size(); i++)       vec(scratch, offset+i) = weight->at_u(i);     // save load command, so we expand its effects into the scratch vector     _expander_gen.gen_number(offset);     _expander_gen.gen_number(1);     _expander_gen.gen_number(othcITC_load);     _expander_gen.gen_command(cCallothersubr);     break;   }   case othcITC_put: {     if (on_stack != 2)       return false;     int offset = (int)at(base+1);     vec(scratch, offset) = at(base);     // save put command, so we expand its effects into the scratch vector     _expander_gen.gen_number(at(base));     _expander_gen.gen_number(offset);     _expander_gen.gen_number(2);     _expander_gen.gen_number(othcITC_put);     _expander_gen.gen_command(cCallothersubr);     break;   }      case othcITC_get: {     if (on_stack != 1)       return false;     int offset = (int)at(base);     double d = vec(scratch, offset);     if (!KNOWN(d)) {       _must_expand = true;       return false;     }     ps_push(d);     break;   }      case othcITC_add: {     if (on_stack != 2)       return false;     ps_push(at(base) + at(base+1));     break;   }      case othcITC_sub: {     if (on_stack != 2)       return false;     ps_push(at(base) - at(base+1));     break;   }      case othcITC_mul: {     if (on_stack != 2)       return false;     ps_push(at(base) * at(base+1));     break;   }      case othcITC_div: {     if (on_stack != 2)       return false;     ps_push(at(base) / at(base+1));     break;   }      case othcITC_ifelse: {     if (on_stack != 4)       return false;     if (at(base+2) <= at(base+3))       ps_push(at(base));     else       ps_push(at(base+1));     break;   }      default:    return false;  }    pop(on_stack + 2);  return true;}