Example #1
0
js_val *
bootstrap_error()
{
  js_val *error = JSNFUNC(error_new, 1);
  js_val *prototype = JSOBJ();
  prototype->proto = fh->object_proto;

  // Error
  // -----

  // Properties
  DEF(error, "prototype", prototype);

  // Error.prototype
  // ---------------
  
  // Properties
  DEF(prototype, "constructor", JSNFUNC(error_new, 1));
  DEF(prototype, "name", JSSTR("Error"));
  DEF(prototype, "message", JSSTR(""));

  // Methods
  DEF(prototype, "toString", JSNFUNC(error_proto_to_string, 0));

  fh_attach_prototype(prototype, fh->function_proto);

  return error;
}
Example #2
0
// Error.prototype.toString()
js_val *
error_proto_to_string(js_val *instance, js_args *args, eval_state *state)
{
  if (!IS_OBJ(instance))
    fh_error(state, E_TYPE, "Error.prototype.toString called on a non-object");

  js_val *name_prop = fh_get_proto(instance, "name");
  js_val *msg_prop = fh_get_proto(instance, "message");
  js_val *name = IS_UNDEF(name_prop) ? JSSTR("Error") : TO_STR(name_prop);
  js_val *msg = IS_UNDEF(msg_prop) ? JSSTR("") : TO_STR(msg_prop);

  if (strlen(name->string.ptr) == 0) return msg;
  if (strlen(msg->string.ptr) == 0) return name;
  return JSSTR(fh_str_concat(fh_str_concat(name->string.ptr, ": "), msg->string.ptr));
}
Example #3
0
// [new] URIError(message)
js_val *
error_uri_new(js_val *instance, js_args *args, eval_state *state)
{
  js_val *err = error_new(instance, args, state);
  fh_set(err, "name", JSSTR(E_URI));
  err->proto = fh_try_get_proto(E_URI);
  return err;
}
Example #4
0
js_val *
func_proto_to_string(js_val *instance, js_args *args, eval_state *state)
{
  // TODO: Need to serialize nodes to string.
  return JSSTR("[Function function]");
}
Example #5
0
js_val *
bootstrap_error(js_val *global)
{
  js_val *error = JSNFUNC(error_new, 1);
  js_val *prototype = JSOBJ();
  prototype->proto = fh->object_proto;

  // Error
  // -----

  // Properties
  DEF(error, "prototype", prototype);


  // Error.prototype
  // ---------------

  // Properties
  DEF(prototype, "constructor", JSNFUNC(error_new, 1));
  DEF(prototype, "name", JSSTR("Error"));
  DEF(prototype, "message", JSSTR(""));

  // Methods
  DEF(prototype, "toString", JSNFUNC(error_proto_to_string, 0));

  fh_attach_prototype(prototype, fh->function_proto);


  // Other Error constructors
  // ------------------------

  // EvalError
  js_val *error_eval = JSNFUNC(error_eval_new, 1);
  js_val *error_eval_proto = JSOBJ();
  error_eval_proto->proto = prototype;
  DEF(error_eval, "prototype", error_eval_proto);
  DEF(global, "EvalError", error_eval);

  // RangeError
  js_val *error_range = JSNFUNC(error_range_new, 1);
  js_val *error_range_proto = JSOBJ();
  error_range_proto->proto = prototype;
  DEF(error_range, "prototype", error_range_proto);
  DEF(global, "RangeError", error_range);

  // ReferenceError
  js_val *error_ref = JSNFUNC(error_ref_new, 1);
  js_val *error_ref_proto = JSOBJ();
  error_ref_proto->proto = prototype;
  DEF(error_ref, "prototype", error_ref_proto);
  DEF(global, "ReferenceError", error_ref);

  // SyntaxError
  js_val *error_syntax = JSNFUNC(error_syntax_new, 1);
  js_val *error_syntax_proto = JSOBJ();
  error_syntax_proto->proto = prototype;
  DEF(error_syntax, "prototype", error_syntax_proto);
  DEF(global, "SyntaxError", error_syntax);

  // TypeError
  js_val *error_type = JSNFUNC(error_type_new, 1);
  js_val *error_type_proto = JSOBJ();
  error_type_proto->proto = prototype;
  DEF(error_type, "prototype", error_type_proto);
  DEF(global, "TypeError", error_type);

  // URIError
  js_val *error_uri = JSNFUNC(error_uri_new, 1);
  js_val *error_uri_proto = JSOBJ();
  error_uri_proto->proto = prototype;
  DEF(error_uri, "prototype", error_uri_proto);
  DEF(global, "URIError", error_uri);

  return error;
}