[PATCH] D48560: [clangd] JSON <-> XPC conversions

Jan Korous via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 19 07:50:26 PDT 2018


jkorous marked 12 inline comments as done.
jkorous added inline comments.


================
Comment at: xpc/XPCJSONConversions.cpp:62
+  if (objType == XPC_TYPE_UINT64)
+    return json::Expr(xpc_uint64_get_value(xpcObj));
+  if (objType == XPC_TYPE_STRING)
----------------
sammccall wrote:
> hmm, I think this shouldn't compile anymore, rather require you to explicitly do the narrowing conversion to int64 or double.
Explicitly narroving now. Thanks.


================
Comment at: xpc/XPCJSONConversions.cpp:69
+      xpcObj,
+      ^bool(size_t /* index */, xpc_object_t value) {
+        result.emplace_back(xpcToJson(value));
----------------
jkorous wrote:
> sammccall wrote:
> > this looks like objC syntax, I'm not familiar with it, but should this file be `.mm`?
> > 
> > Alternatively, it seems like you could write a C++ loop with `xpc_array_get_value` (though I don't know if there are performance concerns).
> > 
> > (and dictionary)
> Oh, sorry. These are actually C blocks - a nonstandard C extension.
> https://en.wikipedia.org/wiki/Blocks_(C_language_extension)
> https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Blocks/Articles/00_Introduction.html
> 
> There was no performance concern on my side - just liked this approach better. Didn't realize how confusing it might be, will rewrite this.
Allright, by trying to get rid of C block in dictionary conversion I remembered that there's unfortunately no sane reason how to iterate XPC dictionary without using xpc_dictionary_apply() which uses C block for functor parameter.

https://developer.apple.com/documentation/xpc/1505404-xpc_dictionary_apply?language=objc
https://developer.apple.com/documentation/xpc/xpc_dictionary_applier_t?language=objc

Anyway, even had we succeeded in removing C blocks from conversion they still would be necessary for dispatch as xpc_connection_set_event_handler() is another part of XPC API that uses it.

I guess that there's no point in removing the xpc_array_apply() then. Is that ok with you?


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D48560





More information about the cfe-commits mailing list