示例#1
0
  void visitEnumStatement(EnumStatement *node) override {
    if (!node->name()) {
      for (size_t i = 0; i < node->entries()->length(); i++) {
        EnumConstant *cs = node->entries()->at(i);

        JsonObject *val = new (pool_) JsonObject();
        val->add(atom_name_, toJson(cs->name()));
        startDoc(val, "enum value", cs->name(), cs->loc());

        constants_->add(val);
      }
      return;
    }

    JsonObject *obj = new (pool_) JsonObject();
    obj->add(atom_name_, toJson(node->name()));
    startDoc(obj, "enum", node->name(), node->loc());

    JsonList *list = new (pool_) JsonList();
    for (size_t i = 0; i < node->entries()->length(); i++) {
      EnumConstant *cs = node->entries()->at(i);

      JsonObject *val = new (pool_) JsonObject();
      val->add(atom_name_, toJson(cs->name()));
      startDoc(val, "enum value", cs->name(), cs->loc());

      list->add(val);
    }
    obj->add(atom_entries_, list);

    enums_->add(obj);
  }
示例#2
0
JsonList * JsonList::fromString(string message, int & i) {
    i++;
    JsonList * r = new JsonList();
    i += skip_whitespace(message, i);

    if (message[i] == ']') {
        i++;
        return r;
    }

    while (1) {
        JsonValue * value = NULL;

        i += skip_whitespace(message, i);
        value = JsonValue::fromString(message, i);
        r->add(value);

        i += skip_whitespace(message, i);

        switch (message[i]) {
            case ',':
                i++;
                break;
            case ']':
                i++;
                return r;
                break;
            default:
                throw PARSE_ERROR("expected ] or , found " + string(1, message[i]), i);
        }
    }
}
示例#3
0
Team::operator JsonDict() const {
    JsonDict r;
    JsonList * players = new JsonList();
    for (int i = 0; i < 7; i++) {
        if (players_[i] != NULL) {
            JsonDict * item = new JsonDict(*(players_[i]));
            players->add(item);
        }
        else {
            players->add(new JsonNull());
        }
    }
    r.add("players", players);

    return r;
}
示例#4
0
  void visitTypesetDecl(TypesetDecl *decl) override {
    JsonObject *obj = new (pool_) JsonObject();
    obj->add(atom_name_, toJson(decl->name()));
    startDoc(obj, "typeset", decl->name(), decl->loc());

    JsonList *list = new (pool_) JsonList();
    for (size_t i = 0; i < decl->types()->length(); i++) {
      const TypesetDecl::Entry &entry = decl->types()->at(i);
      JsonObject *te = new (pool_) JsonObject();
      te->add(atom_type_, toJson(entry.te));
      unsigned start, end;
      if (comments_.findCommentFor(entry.loc, &start, &end)) {
        te->add(atom_doc_start_, new (pool_) JsonInt(start));
        te->add(atom_doc_end_, new (pool_) JsonInt(end));
      }
      list->add(te);
    }
    obj->add(cc_.add("types"), list);

    typesets_->add(obj);
  }
示例#5
0
  JsonList *toJson(const ParameterList *params) {
    JsonList *list = new (pool_) JsonList();
    for (size_t i = 0; i < params->length(); i++) {
      VarDecl *decl = params->at(i);
      JsonObject *obj = new (pool_) JsonObject();

      obj->add(atom_type_, toJson(decl, false));

      if (decl->name()) {
        obj->add(atom_name_, toJson(decl->name()));
        obj->add(atom_decl_, toJson(decl, true));
      } else {
        obj->add(atom_name_, toJson("..."));

        AutoString builder = BuildTypeName(decl->te(), nullptr, TypeDiagFlags::Names);
        builder = builder + " ...";
        obj->add(atom_decl_, toJson(builder.ptr()));
      }
      list->add(obj);
    }
    return list;
  }