summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Haberman <jhaberman@gmail.com>2018-09-06 13:07:09 -0700
committerJoshua Haberman <jhaberman@gmail.com>2018-09-06 13:07:09 -0700
commit33d1231ead8ffbeb97e6c97b9e9a06ace64abd65 (patch)
treec3e911c436bf729dee15c31e7168e792435c34d1
parentf7713ebc391d247617b0dff788a76e5c3383ae94 (diff)
Added port_def.inc and port_undef.inc.
-rw-r--r--tools/make_c_api.lua12
-rw-r--r--upb/port_def.inc18
-rw-r--r--upb/port_undef.inc5
3 files changed, 33 insertions, 2 deletions
diff --git a/tools/make_c_api.lua b/tools/make_c_api.lua
index 11d4258..47a5b08 100644
--- a/tools/make_c_api.lua
+++ b/tools/make_c_api.lua
@@ -357,7 +357,9 @@ local function write_h_file(filedef, append)
end
end
+ append('\n')
append("/* Enums */\n\n")
+
for _, def in ipairs(sorted_defs(filedef:defs(upb.DEF_ENUM))) do
local cident = to_cident(def:full_name())
append('typedef enum {\n')
@@ -434,7 +436,7 @@ local function write_h_file(filedef, append)
append('\n\n')
end
- append('UPB_END_EXTERN_C')
+ append('UPB_END_EXTERN_C\n')
append('\n')
append('#include "upb/port_undef.inc"\n');
@@ -448,7 +450,7 @@ local function write_c_file(filedef, hfilename, append)
append('#include <stddef.h>\n')
append('#include "upb/msg.h"\n')
- append('#include "%s"\n\n', hfilename)
+ append('#include "%s"\n', hfilename)
for dep in filedef:dependencies() do
local outbase = strip_proto(dep:name())
@@ -456,6 +458,8 @@ local function write_c_file(filedef, hfilename, append)
end
append('\n')
+ append('#include "upb/port_def.inc"\n')
+ append('\n')
for msg in filedef:defs(upb.DEF_MSG) do
local msgname = to_cident(msg:full_name())
@@ -567,8 +571,12 @@ local function write_c_file(filedef, hfilename, append)
'false', -- TODO: extendable
msg:file():syntax() == upb.SYNTAX_PROTO2
)
+
append('};\n\n')
end
+
+ append('#include "upb/port_undef.inc"\n')
+ append('\n')
end
function export.write_gencode(filedef, hfilename, append_h, append_c)
diff --git a/upb/port_def.inc b/upb/port_def.inc
new file mode 100644
index 0000000..33ff78c
--- /dev/null
+++ b/upb/port_def.inc
@@ -0,0 +1,18 @@
+
+#if UINTPTR_MAX == 0xffffffff
+#define UPB_SIZE(size32, size64) size32
+#else
+#define UPB_SIZE(size32, size64) size64
+#endif
+
+#define UPB_FIELD_AT(msg, fieldtype, offset) \
+ *(fieldtype*)((const char*)(msg) + offset)
+
+#define UPB_READ_ONEOF(msg, fieldtype, offset, case_offset, case_val, default) \
+ UPB_FIELD_AT(msg, int, case_offset) == case_val \
+ ? UPB_FIELD_AT(msg, fieldtype, offset) \
+ : default
+
+#define UPB_WRITE_ONEOF(msg, fieldtype, offset, value, case_offset, case_val) \
+ UPB_FIELD_AT(msg, int, case_offset) = case_val; \
+ UPB_FIELD_AT(msg, fieldtype, offset) = value;
diff --git a/upb/port_undef.inc b/upb/port_undef.inc
new file mode 100644
index 0000000..7db97ca
--- /dev/null
+++ b/upb/port_undef.inc
@@ -0,0 +1,5 @@
+
+#undef UPB_SIZE
+#undef UPB_FIELD_AT
+#undef UPB_READ_ONEOF
+#undef UPB_WRITE_ONEOF
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback