public Object coerce(LuaValue value) {
   if (value.isnil()) return null;
   if (targetType == TARGET_TYPE_STRING) return value.tojstring();
   LuaString s = value.checkstring();
   byte[] b = new byte[s.m_length];
   s.copyInto(0, b, 0, b.length);
   return b;
 }
 public int score(LuaValue value) {
   switch (value.type()) {
     case LuaValue.TSTRING:
       return value.checkstring().isValidUtf8()
           ? (targetType == TARGET_TYPE_STRING ? 0 : 1)
           : (targetType == TARGET_TYPE_BYTES ? 0 : SCORE_WRONG_TYPE);
     case LuaValue.TNIL:
       return SCORE_NULL_VALUE;
     default:
       return targetType == TARGET_TYPE_STRING ? SCORE_WRONG_TYPE : SCORE_UNCOERCIBLE;
   }
 }