Пример #1
0
void iotjs_jhandler_throw(iotjs_jhandler_t* jhandler, const iotjs_jval_t* err) {
  IOTJS_VALIDATED_STRUCT_METHOD(iotjs_jhandler_t, jhandler);
#ifndef NDEBUG
  IOTJS_ASSERT(_this->finished == false);
#endif

  iotjs_jval_destroy(&_this->jret);
  _this->jret = iotjs_jval_create_copied(err);
  jerry_value_set_error_flag(&_this->jret.unsafe.value);

#ifndef NDEBUG
  _this->finished = true;
#endif
}
Пример #2
0
static jerry_value_t AfterSync(uv_fs_t* req, int err,
                               const char* syscall_name) {
  if (err < 0) {
    jerry_value_t jerror = iotjs_create_uv_exception(err, syscall_name);
    jerry_value_set_error_flag(&jerror);
    return jerror;
  }

  switch (req->fs_type) {
    case UV_FS_CLOSE:
      break;
    case UV_FS_OPEN:
    case UV_FS_READ:
    case UV_FS_WRITE:
      return jerry_create_number(err);
    case UV_FS_FSTAT:
    case UV_FS_STAT: {
      uv_stat_t* s = &(req->statbuf);
      return MakeStatObject(s);
    }
    case UV_FS_MKDIR:
    case UV_FS_RMDIR:
    case UV_FS_UNLINK:
    case UV_FS_RENAME:
      return jerry_create_undefined();
    case UV_FS_SCANDIR: {
      int r;
      uv_dirent_t ent;
      uint32_t idx = 0;
      jerry_value_t ret = jerry_create_array(0);
      while ((r = uv_fs_scandir_next(req, &ent)) != UV_EOF) {
        jerry_value_t name = jerry_create_string((const jerry_char_t*)ent.name);
        iotjs_jval_set_property_by_index(ret, idx, name);
        jerry_release_value(name);
        idx++;
      }
      return ret;
    }
    default: {
      IOTJS_ASSERT(false);
      break;
    }
  }
  return jerry_create_undefined();
}
Пример #3
0
int
main (void)
{
  TEST_INIT ();

  jerry_init (JERRY_INIT_EMPTY);

  jerry_value_t global = jerry_get_global_object ();
  jerry_value_t callback_name = jerry_create_string ((jerry_char_t *) "callback");
  jerry_value_t func = jerry_create_external_function (callback_func);
  jerry_value_t res = jerry_set_property (global, callback_name, func);
  TEST_ASSERT (!jerry_value_is_error (res));

  jerry_release_value (res);
  jerry_release_value (func);
  jerry_release_value (callback_name);
  jerry_release_value (global);

  const char *inf_loop_code_src_p = ("while(true) {\n"
                                     "  with ({}) {\n"
                                     "    try {\n"
                                     "      callback();\n"
                                     "    } catch (e) {\n"
                                     "    } finally {\n"
                                     "    }\n"
                                     "  }\n"
                                     "}");

  jerry_value_t parsed_code_val = jerry_parse (NULL,
                                               0,
                                               (jerry_char_t *) inf_loop_code_src_p,
                                               strlen (inf_loop_code_src_p),
                                               JERRY_PARSE_NO_OPTS);

  TEST_ASSERT (!jerry_value_is_error (parsed_code_val));
  res = jerry_run (parsed_code_val);

  TEST_ASSERT (jerry_value_is_abort (res));

  jerry_release_value (res);
  jerry_release_value (parsed_code_val);

  inf_loop_code_src_p = ("function f() {"
                         "  while(true) {\n"
                         "    with ({}) {\n"
                         "      try {\n"
                         "        callback();\n"
                         "      } catch (e) {\n"
                         "      } finally {\n"
                         "      }\n"
                         "    }\n"
                         "  }"
                         "}\n"
                         "function g() {\n"
                         "  for (a in { x:5 })\n"
                         "    f();\n"
                         "}\n"
                          "\n"
                         "with({})\n"
                         " f();\n");

  parsed_code_val = jerry_parse (NULL,
                                 0,
                                 (jerry_char_t *) inf_loop_code_src_p,
                                 strlen (inf_loop_code_src_p),
                                 JERRY_PARSE_NO_OPTS);

  TEST_ASSERT (!jerry_value_is_error (parsed_code_val));
  res = jerry_run (parsed_code_val);

  TEST_ASSERT (jerry_value_is_abort (res));

  jerry_release_value (res);
  jerry_release_value (parsed_code_val);

  /* Test flag overwrites. */
  jerry_value_t value = jerry_create_string ((jerry_char_t *) "Error description");
  TEST_ASSERT (!jerry_value_is_abort (value));
  TEST_ASSERT (!jerry_value_is_error (value));

  jerry_value_set_abort_flag (&value);
  TEST_ASSERT (jerry_value_is_abort (value));
  TEST_ASSERT (jerry_value_is_error (value));

  jerry_value_set_error_flag (&value);
  TEST_ASSERT (!jerry_value_is_abort (value));
  TEST_ASSERT (jerry_value_is_error (value));

  jerry_value_set_abort_flag (&value);
  TEST_ASSERT (jerry_value_is_abort (value));
  TEST_ASSERT (jerry_value_is_error (value));

  jerry_release_value (value);

  jerry_cleanup ();
  return 0;
} /* main */