summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--prism/defines.h9
-rw-r--r--prism/templates/src/prettyprint.c.erb4
-rw-r--r--prism/util/pm_buffer.h2
3 files changed, 12 insertions, 3 deletions
diff --git a/prism/defines.h b/prism/defines.h
index 6037ae7e26..531462a560 100644
--- a/prism/defines.h
+++ b/prism/defines.h
@@ -23,6 +23,15 @@
# endif
#endif
+// PRISM_ATTRIBUTE_FORMAT
+#if defined(__GNUC__)
+# define PRISM_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((format(printf, string_index, argument_index)))
+#elif defined(__clang__)
+# define PRISM_ATTRIBUTE_FORMAT(string_index, argument_index) __attribute__((__format__(__printf__, string_index, argument_index)))
+#else
+# define PRISM_ATTRIBUTE_FORMAT(string_index, argument_index)
+#endif
+
// PRISM_ATTRIBUTE_UNUSED
#if defined(__GNUC__)
# define PRISM_ATTRIBUTE_UNUSED __attribute__((unused))
diff --git a/prism/templates/src/prettyprint.c.erb b/prism/templates/src/prettyprint.c.erb
index ecd2c227df..2309a86f1f 100644
--- a/prism/templates/src/prettyprint.c.erb
+++ b/prism/templates/src/prettyprint.c.erb
@@ -39,7 +39,7 @@ static inline void
prettyprint_location(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm_location_t *location) {
pm_line_column_t start = pm_newline_list_line_column(&parser->newline_list, location->start);
pm_line_column_t end = pm_newline_list_line_column(&parser->newline_list, location->end);
- pm_buffer_append_format(output_buffer, "(%d,%d)-(%d,%d)", start.line + 1, start.column, end.line + 1, end.column);
+ pm_buffer_append_format(output_buffer, "(%lu,%lu)-(%lu,%lu)", (unsigned long) (start.line + 1), (unsigned long) start.column, (unsigned long) (end.line + 1), (unsigned long) end.column);
}
static inline void
@@ -95,7 +95,7 @@ prettyprint_node(pm_buffer_t *output_buffer, const pm_parser_t *parser, const pm
prettyprint_source(output_buffer, pm_string_source(&cast-><%= field.name %>), pm_string_length(&cast-><%= field.name %>));
pm_buffer_append_string(output_buffer, "\"\n", 2);
<%- when Prism::NodeListField -%>
- pm_buffer_append_format(output_buffer, " (length: %d)\n", cast-><%= field.name %>.size);
+ pm_buffer_append_format(output_buffer, " (length: %lu)\n", (unsigned long) (cast-><%= field.name %>.size));
size_t last_index = cast-><%= field.name %>.size;
for (uint32_t index = 0; index < last_index; index++) {
diff --git a/prism/util/pm_buffer.h b/prism/util/pm_buffer.h
index b8b7c41a10..69edb1525a 100644
--- a/prism/util/pm_buffer.h
+++ b/prism/util/pm_buffer.h
@@ -37,7 +37,7 @@ PRISM_EXPORTED_FUNCTION size_t pm_buffer_length(pm_buffer_t *buffer);
void pm_buffer_append_zeroes(pm_buffer_t *buffer, size_t length);
// Append a formatted string to the buffer.
-void pm_buffer_append_format(pm_buffer_t *buffer, const char *format, ...);
+void pm_buffer_append_format(pm_buffer_t *buffer, const char *format, ...) PRISM_ATTRIBUTE_FORMAT(2, 3);
// Append a string to the buffer.
void pm_buffer_append_string(pm_buffer_t *buffer, const char *value, size_t length);