summaryrefslogtreecommitdiffstats
path: root/js/src/gdb/tests/test-jsid.cpp
blob: e679b956a3ddb4b88f175e7bbebec22484ebe899 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "gdb-tests.h"

#include "js/Id.h"  // jsid, JS::PropertyKey
#include "js/String.h"
#include "js/Symbol.h"

FRAGMENT(jsid, simple) {
  const char* chars = "moon";
  JS::Rooted<JSString*> string(cx, JS_NewStringCopyZ(cx, chars));
  JS::Rooted<JSString*> interned(cx, JS_AtomizeAndPinString(cx, chars));
  JS::Rooted<jsid> string_id(cx, JS::PropertyKey::fromPinnedString(interned));
  JS::Rooted<jsid> int_id(cx, JS::PropertyKey::Int(1729));
  JS::Rooted<jsid> unique_symbol_id(
      cx, JS::PropertyKey::Symbol(JS::NewSymbol(cx, interned)));
  JS::Rooted<jsid> registry_symbol_id(
      cx, JS::PropertyKey::Symbol(JS::GetSymbolFor(cx, interned)));
  JS::Rooted<jsid> well_known_symbol_id(
      cx, JS::GetWellKnownSymbolKey(cx, JS::SymbolCode::iterator));
  jsid void_id = JS::PropertyKey::Void();

  breakpoint();

  use(string_id);
  use(int_id);
  use(unique_symbol_id);
  use(registry_symbol_id);
  use(well_known_symbol_id);
  use(void_id);
}

void jsid_handles(JS::Handle<jsid> jsid_handle,
                  JS::MutableHandle<jsid> mutable_jsid_handle) {
  // Prevent the linker from unifying this function with others that are
  // equivalent in machine code but not type.
  fprintf(stderr, "Called " __FILE__ ":jsid_handles\n");
  breakpoint();
}

FRAGMENT(jsid, handles) {
  const char* chars = "shovel";
  JS::Rooted<JSString*> string(cx, JS_NewStringCopyZ(cx, chars));
  JS::Rooted<JSString*> interned(cx, JS_AtomizeAndPinString(cx, chars));
  JS::Rooted<jsid> string_id(cx, JS::PropertyKey::fromPinnedString(interned));
  jsid_handles(string_id, &string_id);
}