From 074cf036a9944863551c3ad2fd531e8f3d78c878 Mon Sep 17 00:00:00 2001
From: Andrea Shepard <andrea@special-circumstanc.es>
Date: Sat, 16 Nov 2019 01:14:07 +0000
Subject: [PATCH] Use LLVM name/label macros in end.c

---
 src/parsers/end.c | 133 +++++++++++-----------------------------------
 1 file changed, 30 insertions(+), 103 deletions(-)

diff --git a/src/parsers/end.c b/src/parsers/end.c
index f2f655e0..26cba931 100644
--- a/src/parsers/end.c
+++ b/src/parsers/end.c
@@ -34,26 +34,16 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt,
   /* Allocator */
   HAllocator *mm__ = NULL;
   /* Names */
-  char *end_entry_name = NULL;
-  int end_entry_name_len = 0;
-  char *end_success_name = NULL;
-  int end_success_name_len = 0;
-  char *end_end_name = NULL;
-  int end_end_name_len = 0;
-  char *end_index_name = NULL;
-  int end_index_name_len = 0;
-  char *end_index_ptr_name = NULL;
-  int end_index_ptr_name_len = 0;
-  char *end_length_name = NULL;
-  int end_length_name_len = 0;
-  char *end_length_ptr_name = NULL;
-  int end_length_ptr_name_len = 0;
-  char *end_icmp_name = NULL;
-  int end_icmp_name_len = 0;
-  char *end_result_ptr_name = NULL;
-  int end_result_ptr_name_len = 0;
-  char *end_rv_name = NULL;
-  int end_rv_name_len = 0;
+  H_LLVM_DECLARE_NAME(end_entry);
+  H_LLVM_DECLARE_NAME(end_success);
+  H_LLVM_DECLARE_NAME(end_end);
+  H_LLVM_DECLARE_NAME(end_index);
+  H_LLVM_DECLARE_NAME(end_index_ptr);
+  H_LLVM_DECLARE_NAME(end_length);
+  H_LLVM_DECLARE_NAME(end_length_ptr);
+  H_LLVM_DECLARE_NAME(end_icmp);
+  H_LLVM_DECLARE_NAME(end_result_ptr);
+  H_LLVM_DECLARE_NAME(end_rv);
   /* Basic blocks for parsing end */
   LLVMBasicBlockRef entry, success, end;
   /* Indices for GEP */
@@ -77,17 +67,11 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt,
   mm__ = ctxt->mm__;
 
   /* Set up some basic blocks */
-  end_entry_name_len = snprintf(NULL, 0, "end_entry_%p", p);
-  end_entry_name = h_new(char, end_entry_name_len + 1);
-  snprintf(end_entry_name, end_entry_name_len + 1, "end_entry_%p", p);
+  H_LLVM_COMPUTE_NAME(end_entry, p);
   entry = LLVMAppendBasicBlock(ctxt->func, end_entry_name);
-  end_success_name_len = snprintf(NULL, 0, "end_success_%p", p);
-  end_success_name = h_new(char, end_success_name_len + 1);
-  snprintf(end_success_name, end_success_name_len + 1, "end_success_%p", p);
+  H_LLVM_COMPUTE_NAME(end_success, p);
   success = LLVMAppendBasicBlock(ctxt->func, end_success_name);
-  end_end_name_len = snprintf(NULL, 0, "end_end_%p", p);
-  end_end_name = h_new(char, end_end_name_len + 1);
-  snprintf(end_end_name, end_end_name_len + 1, "end_end_%p", p);
+  H_LLVM_COMPUTE_NAME(end_end, p);
   end = LLVMAppendBasicBlock(ctxt->func, end_end_name);
 
   /* Basic block: entry */
@@ -105,39 +89,27 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt,
   /* The index field (see HInputStream in internal.h */
   gep_indices[1] = LLVMConstInt(LLVMInt32Type(), 2, 0);
   /* GEP */
-  end_index_ptr_name_len = snprintf(NULL, 0, "end_index_ptr_%p", p);
-  end_index_ptr_name = h_new(char, end_index_ptr_name_len + 1);
-  snprintf(end_index_ptr_name, end_index_ptr_name_len + 1,
-           "end_index_ptr_%p", p);
+  H_LLVM_COMPUTE_NAME(end_index_ptr, p);
   LLVMValueRef index_ptr = LLVMBuildGEP(ctxt->builder,
       ctxt->stream, gep_indices, 2, end_index_ptr_name);
 
   /* The length field (see HInputStream in internal.h */
   gep_indices[1] = LLVMConstInt(LLVMInt32Type(), 3, 0);
   /* GEP */
-  end_length_ptr_name_len = snprintf(NULL, 0, "end_length_ptr_%p", p);
-  end_length_ptr_name = h_new(char, end_length_ptr_name_len + 1);
-  snprintf(end_length_ptr_name, end_length_ptr_name_len + 1,
-           "end_length_ptr_%p", p);
+  H_LLVM_COMPUTE_NAME(end_length_ptr, p);
   LLVMValueRef length_ptr = LLVMBuildGEP(ctxt->builder,
       ctxt->stream, gep_indices, 2, end_length_ptr_name);
 
   /* Now load them */
-  end_index_name_len = snprintf(NULL, 0, "end_index_%p", p);
-  end_index_name = h_new(char, end_index_name_len + 1);
-  snprintf(end_index_name, end_index_name_len + 1, "end_index_%p", p);
+  H_LLVM_COMPUTE_NAME(end_index, p);
   LLVMValueRef index = LLVMBuildLoad(ctxt->builder,
       index_ptr, end_index_name);
-  end_length_name_len = snprintf(NULL, 0, "end_length_%p", p);
-  end_length_name = h_new(char, end_length_name_len + 1);
-  snprintf(end_length_name, end_length_name_len + 1, "end_length_%p", p);
+  H_LLVM_COMPUTE_NAME(end_length, p);
   LLVMValueRef length = LLVMBuildLoad(ctxt->builder,
       length_ptr, end_length_name);
 
   /* Compare */
-  end_icmp_name_len = snprintf(NULL, 0, "end_icmp_%p", p);
-  end_icmp_name = h_new(char, end_icmp_name_len + 1);
-  snprintf(end_icmp_name, end_icmp_name_len + 1, "end_icmp_%p", p);
+  H_LLVM_COMPUTE_NAME(end_icmp, p);
   LLVMValueRef icmp =
     LLVMBuildICmp(ctxt->builder, LLVMIntEQ, index, length, end_icmp_name);
   /* Branch on comparison */
@@ -146,10 +118,7 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt,
   /* Basic block: success */
   LLVMPositionBuilderAtEnd(ctxt->builder, success);
   /* Set up a call to h_arena_malloc() to get an HParseResult */
-  end_result_ptr_name_len = snprintf(NULL, 0, "end_result_ptr_%p", p);
-  end_result_ptr_name = h_new(char, end_result_ptr_name_len + 1);
-  snprintf(end_result_ptr_name, end_result_ptr_name_len + 1,
-           "end_result_ptr_%p", p);
+  H_LLVM_COMPUTE_NAME(end_result_ptr, p);
   make_result_args[0] = ctxt->arena;
   make_result_args[1] = LLVMConstNull(ctxt->llvm_parsedtokenptr);
   result_ptr = LLVMBuildCall(ctxt->builder,
@@ -162,9 +131,7 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt,
   /* Basic block: end */
   LLVMPositionBuilderAtEnd(ctxt->builder, end);
   /* Set up a phi depending on whether we have a token or not */
-  end_rv_name_len = snprintf(NULL, 0, "end_rv_%p", p);
-  end_rv_name = h_new(char, end_rv_name_len + 1);
-  snprintf(end_rv_name, end_rv_name_len + 1, "end_rv_%p", p);
+  H_LLVM_COMPUTE_NAME(end_rv, p);
   rv = LLVMBuildPhi(ctxt->builder, ctxt->llvm_parseresultptr, end_rv_name);
   rv_phi_incoming_blocks[0] = success;
   rv_phi_incoming_values[0] = result_ptr;
@@ -176,56 +143,16 @@ static bool end_llvm(HLLVMParserCompileContext *ctxt,
   *res = rv;
 
   /* Free names */
-
-  if (end_entry_name) {
-    h_free(end_entry_name);
-    end_entry_name = NULL;
-  }
-
-  if (end_success_name) {
-    h_free(end_entry_name);
-    end_entry_name = NULL;
-  }
-
-  if (end_end_name) {
-    h_free(end_entry_name);
-    end_entry_name = NULL;
-  }
-
-  if (end_index_name) {
-    h_free(end_index_name);
-    end_index_name = NULL;
-  }
-
-  if (end_index_ptr_name) {
-    h_free(end_index_ptr_name);
-    end_index_ptr_name = NULL;
-  }
-
-  if (end_length_name) {
-    h_free(end_length_name);
-    end_length_name = NULL;
-  }
-
-  if (end_length_ptr_name) {
-    h_free(end_length_ptr_name);
-    end_length_ptr_name = NULL;
-  }
-
-  if (end_icmp_name) {
-    h_free(end_icmp_name);
-    end_icmp_name = NULL;
-  }
-
-  if (end_result_ptr_name) {
-    h_free(end_result_ptr_name);
-    end_result_ptr_name = NULL;
-  }
-
-  if (end_rv_name) {
-    h_free(end_rv_name);
-    end_rv_name = NULL;
-  }
+  H_LLVM_FREE_NAME(end_entry);
+  H_LLVM_FREE_NAME(end_success);
+  H_LLVM_FREE_NAME(end_end);
+  H_LLVM_FREE_NAME(end_index);
+  H_LLVM_FREE_NAME(end_index_ptr);
+  H_LLVM_FREE_NAME(end_length);
+  H_LLVM_FREE_NAME(end_length_ptr);
+  H_LLVM_FREE_NAME(end_icmp);
+  H_LLVM_FREE_NAME(end_result_ptr);
+  H_LLVM_FREE_NAME(end_rv);
 
   return true;
 }
-- 
GitLab