herb 0.7.4-aarch64-linux-gnu → 0.8.0-aarch64-linux-gnu

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8 -5
  3. data/config.yml +40 -20
  4. data/ext/herb/error_helpers.c +57 -3
  5. data/ext/herb/error_helpers.h +1 -1
  6. data/ext/herb/extconf.rb +1 -0
  7. data/ext/herb/extension.c +10 -24
  8. data/ext/herb/extension_helpers.c +12 -18
  9. data/ext/herb/extension_helpers.h +4 -4
  10. data/ext/herb/nodes.c +72 -37
  11. data/herb.gemspec +0 -2
  12. data/lib/herb/3.0/herb.so +0 -0
  13. data/lib/herb/3.1/herb.so +0 -0
  14. data/lib/herb/3.2/herb.so +0 -0
  15. data/lib/herb/3.3/herb.so +0 -0
  16. data/lib/herb/3.4/herb.so +0 -0
  17. data/lib/herb/ast/helpers.rb +11 -0
  18. data/lib/herb/ast/node.rb +15 -6
  19. data/lib/herb/ast/nodes.rb +609 -392
  20. data/lib/herb/cli.rb +31 -0
  21. data/lib/herb/colors.rb +82 -0
  22. data/lib/herb/engine/compiler.rb +140 -14
  23. data/lib/herb/engine/debug_visitor.rb +1 -5
  24. data/lib/herb/engine/parser_error_overlay.rb +1 -1
  25. data/lib/herb/engine.rb +18 -20
  26. data/lib/herb/errors.rb +166 -56
  27. data/lib/herb/location.rb +2 -2
  28. data/lib/herb/project.rb +86 -21
  29. data/lib/herb/token.rb +14 -2
  30. data/lib/herb/version.rb +1 -1
  31. data/lib/herb.rb +1 -0
  32. data/sig/herb/ast/helpers.rbs +3 -0
  33. data/sig/herb/ast/node.rbs +12 -5
  34. data/sig/herb/ast/nodes.rbs +124 -62
  35. data/sig/herb/colors.rbs +35 -0
  36. data/sig/herb/engine/compiler.rbs +23 -1
  37. data/sig/herb/errors.rbs +74 -20
  38. data/sig/herb/token.rbs +8 -0
  39. data/sig/herb_c_extension.rbs +1 -1
  40. data/sig/serialized_ast_errors.rbs +8 -0
  41. data/src/analyze.c +461 -249
  42. data/src/analyze_helpers.c +5 -0
  43. data/src/analyze_missing_end.c +147 -0
  44. data/src/analyze_transform.c +196 -0
  45. data/src/analyzed_ruby.c +23 -2
  46. data/src/ast_node.c +14 -17
  47. data/src/ast_nodes.c +179 -181
  48. data/src/ast_pretty_print.c +232 -232
  49. data/src/element_source.c +7 -6
  50. data/src/errors.c +272 -152
  51. data/src/extract.c +92 -34
  52. data/src/herb.c +37 -49
  53. data/src/html_util.c +34 -96
  54. data/src/include/analyze.h +10 -2
  55. data/src/include/analyze_helpers.h +3 -0
  56. data/src/include/analyzed_ruby.h +4 -2
  57. data/src/include/ast_node.h +4 -4
  58. data/src/include/ast_nodes.h +68 -67
  59. data/src/include/ast_pretty_print.h +2 -2
  60. data/src/include/element_source.h +3 -1
  61. data/src/include/errors.h +42 -26
  62. data/src/include/extract.h +4 -4
  63. data/src/include/herb.h +6 -7
  64. data/src/include/html_util.h +4 -5
  65. data/src/include/lexer.h +1 -3
  66. data/src/include/lexer_peek_helpers.h +21 -19
  67. data/src/include/lexer_struct.h +12 -10
  68. data/src/include/location.h +10 -13
  69. data/src/include/macros.h +4 -0
  70. data/src/include/parser.h +12 -6
  71. data/src/include/parser_helpers.h +26 -16
  72. data/src/include/position.h +3 -14
  73. data/src/include/pretty_print.h +38 -28
  74. data/src/include/prism_helpers.h +1 -1
  75. data/src/include/range.h +4 -13
  76. data/src/include/token.h +5 -11
  77. data/src/include/token_struct.h +2 -2
  78. data/src/include/utf8.h +3 -2
  79. data/src/include/util/hb_arena.h +31 -0
  80. data/src/include/util/hb_arena_debug.h +8 -0
  81. data/src/include/util/hb_array.h +33 -0
  82. data/src/include/util/hb_buffer.h +34 -0
  83. data/src/include/util/hb_string.h +29 -0
  84. data/src/include/util/hb_system.h +9 -0
  85. data/src/include/util.h +3 -14
  86. data/src/include/version.h +1 -1
  87. data/src/include/visitor.h +1 -1
  88. data/src/io.c +7 -4
  89. data/src/lexer.c +62 -88
  90. data/src/lexer_peek_helpers.c +42 -38
  91. data/src/location.c +9 -37
  92. data/src/main.c +19 -23
  93. data/src/parser.c +373 -313
  94. data/src/parser_helpers.c +60 -54
  95. data/src/parser_match_tags.c +316 -0
  96. data/src/pretty_print.c +88 -117
  97. data/src/prism_helpers.c +7 -7
  98. data/src/range.c +2 -35
  99. data/src/token.c +36 -87
  100. data/src/utf8.c +4 -4
  101. data/src/util/hb_arena.c +179 -0
  102. data/src/util/hb_arena_debug.c +237 -0
  103. data/src/{array.c → util/hb_array.c} +26 -27
  104. data/src/util/hb_buffer.c +203 -0
  105. data/src/util/hb_string.c +85 -0
  106. data/src/util/hb_system.c +30 -0
  107. data/src/util.c +29 -99
  108. data/src/visitor.c +54 -54
  109. data/templates/ext/herb/error_helpers.c.erb +3 -3
  110. data/templates/ext/herb/error_helpers.h.erb +1 -1
  111. data/templates/ext/herb/nodes.c.erb +11 -6
  112. data/templates/java/error_helpers.c.erb +75 -0
  113. data/templates/java/error_helpers.h.erb +20 -0
  114. data/templates/java/nodes.c.erb +97 -0
  115. data/templates/java/nodes.h.erb +23 -0
  116. data/templates/java/org/herb/ast/Errors.java.erb +121 -0
  117. data/templates/java/org/herb/ast/NodeVisitor.java.erb +14 -0
  118. data/templates/java/org/herb/ast/Nodes.java.erb +220 -0
  119. data/templates/java/org/herb/ast/Visitor.java.erb +56 -0
  120. data/templates/javascript/packages/core/src/visitor.ts.erb +29 -1
  121. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +8 -8
  122. data/templates/javascript/packages/node/extension/error_helpers.h.erb +1 -1
  123. data/templates/javascript/packages/node/extension/nodes.cpp.erb +9 -9
  124. data/templates/javascript/packages/node/extension/nodes.h.erb +1 -1
  125. data/templates/lib/herb/ast/nodes.rb.erb +28 -16
  126. data/templates/lib/herb/errors.rb.erb +17 -12
  127. data/templates/rust/src/ast/nodes.rs.erb +220 -0
  128. data/templates/rust/src/errors.rs.erb +216 -0
  129. data/templates/rust/src/nodes.rs.erb +374 -0
  130. data/templates/src/analyze_missing_end.c.erb +36 -0
  131. data/templates/src/analyze_transform.c.erb +24 -0
  132. data/templates/src/ast_nodes.c.erb +14 -16
  133. data/templates/src/ast_pretty_print.c.erb +36 -36
  134. data/templates/src/errors.c.erb +36 -38
  135. data/templates/src/include/ast_nodes.h.erb +11 -10
  136. data/templates/src/include/ast_pretty_print.h.erb +2 -2
  137. data/templates/src/include/errors.h.erb +9 -9
  138. data/templates/src/parser_match_tags.c.erb +38 -0
  139. data/templates/src/visitor.c.erb +4 -4
  140. data/templates/template.rb +22 -3
  141. data/templates/wasm/error_helpers.cpp.erb +9 -9
  142. data/templates/wasm/error_helpers.h.erb +1 -1
  143. data/templates/wasm/nodes.cpp.erb +9 -9
  144. data/templates/wasm/nodes.h.erb +1 -1
  145. data/vendor/prism/Rakefile +4 -1
  146. data/vendor/prism/config.yml +2 -1
  147. data/vendor/prism/include/prism/ast.h +31 -1
  148. data/vendor/prism/include/prism/diagnostic.h +1 -0
  149. data/vendor/prism/include/prism/version.h +3 -3
  150. data/vendor/prism/src/diagnostic.c +3 -1
  151. data/vendor/prism/src/prism.c +130 -71
  152. data/vendor/prism/src/util/pm_string.c +6 -8
  153. data/vendor/prism/templates/include/prism/ast.h.erb +2 -0
  154. data/vendor/prism/templates/java/org/prism/Loader.java.erb +2 -2
  155. data/vendor/prism/templates/javascript/src/deserialize.js.erb +2 -2
  156. data/vendor/prism/templates/lib/prism/serialize.rb.erb +2 -2
  157. data/vendor/prism/templates/sig/prism.rbs.erb +4 -0
  158. data/vendor/prism/templates/src/diagnostic.c.erb +1 -0
  159. metadata +34 -21
  160. data/lib/herb/libherb/array.rb +0 -51
  161. data/lib/herb/libherb/ast_node.rb +0 -50
  162. data/lib/herb/libherb/buffer.rb +0 -56
  163. data/lib/herb/libherb/extract_result.rb +0 -20
  164. data/lib/herb/libherb/lex_result.rb +0 -32
  165. data/lib/herb/libherb/libherb.rb +0 -52
  166. data/lib/herb/libherb/parse_result.rb +0 -20
  167. data/lib/herb/libherb/token.rb +0 -46
  168. data/lib/herb/libherb.rb +0 -35
  169. data/src/buffer.c +0 -232
  170. data/src/include/array.h +0 -33
  171. data/src/include/buffer.h +0 -39
  172. data/src/include/json.h +0 -28
  173. data/src/include/memory.h +0 -12
  174. data/src/json.c +0 -205
  175. data/src/memory.c +0 -53
  176. data/src/position.c +0 -33
data/src/ast_nodes.c CHANGED
@@ -7,15 +7,15 @@
7
7
  #include <prism.h>
8
8
 
9
9
  #include "include/analyzed_ruby.h"
10
- #include "include/array.h"
11
10
  #include "include/ast_node.h"
12
11
  #include "include/ast_nodes.h"
13
12
  #include "include/errors.h"
14
13
  #include "include/token.h"
15
14
  #include "include/util.h"
15
+ #include "include/util/hb_array.h"
16
16
 
17
17
 
18
- AST_DOCUMENT_NODE_T* ast_document_node_init(array_T* children, position_T* start_position, position_T* end_position, array_T* errors) {
18
+ AST_DOCUMENT_NODE_T* ast_document_node_init(hb_array_T* children, position_T start_position, position_T end_position, hb_array_T* errors) {
19
19
  AST_DOCUMENT_NODE_T* document_node = malloc(sizeof(AST_DOCUMENT_NODE_T));
20
20
 
21
21
  ast_node_init(&document_node->base, AST_DOCUMENT_NODE, start_position, end_position, errors);
@@ -25,7 +25,7 @@ AST_DOCUMENT_NODE_T* ast_document_node_init(array_T* children, position_T* start
25
25
  return document_node;
26
26
  }
27
27
 
28
- AST_LITERAL_NODE_T* ast_literal_node_init(const char* content, position_T* start_position, position_T* end_position, array_T* errors) {
28
+ AST_LITERAL_NODE_T* ast_literal_node_init(const char* content, position_T start_position, position_T end_position, hb_array_T* errors) {
29
29
  AST_LITERAL_NODE_T* literal_node = malloc(sizeof(AST_LITERAL_NODE_T));
30
30
 
31
31
  ast_node_init(&literal_node->base, AST_LITERAL_NODE, start_position, end_position, errors);
@@ -35,7 +35,7 @@ AST_LITERAL_NODE_T* ast_literal_node_init(const char* content, position_T* start
35
35
  return literal_node;
36
36
  }
37
37
 
38
- AST_HTML_OPEN_TAG_NODE_T* ast_html_open_tag_node_init(token_T* tag_opening, token_T* tag_name, token_T* tag_closing, array_T* children, bool is_void, position_T* start_position, position_T* end_position, array_T* errors) {
38
+ AST_HTML_OPEN_TAG_NODE_T* ast_html_open_tag_node_init(token_T* tag_opening, token_T* tag_name, token_T* tag_closing, hb_array_T* children, bool is_void, position_T start_position, position_T end_position, hb_array_T* errors) {
39
39
  AST_HTML_OPEN_TAG_NODE_T* html_open_tag_node = malloc(sizeof(AST_HTML_OPEN_TAG_NODE_T));
40
40
 
41
41
  ast_node_init(&html_open_tag_node->base, AST_HTML_OPEN_TAG_NODE, start_position, end_position, errors);
@@ -49,7 +49,7 @@ AST_HTML_OPEN_TAG_NODE_T* ast_html_open_tag_node_init(token_T* tag_opening, toke
49
49
  return html_open_tag_node;
50
50
  }
51
51
 
52
- AST_HTML_CLOSE_TAG_NODE_T* ast_html_close_tag_node_init(token_T* tag_opening, token_T* tag_name, array_T* children, token_T* tag_closing, position_T* start_position, position_T* end_position, array_T* errors) {
52
+ AST_HTML_CLOSE_TAG_NODE_T* ast_html_close_tag_node_init(token_T* tag_opening, token_T* tag_name, hb_array_T* children, token_T* tag_closing, position_T start_position, position_T end_position, hb_array_T* errors) {
53
53
  AST_HTML_CLOSE_TAG_NODE_T* html_close_tag_node = malloc(sizeof(AST_HTML_CLOSE_TAG_NODE_T));
54
54
 
55
55
  ast_node_init(&html_close_tag_node->base, AST_HTML_CLOSE_TAG_NODE, start_position, end_position, errors);
@@ -62,7 +62,7 @@ AST_HTML_CLOSE_TAG_NODE_T* ast_html_close_tag_node_init(token_T* tag_opening, to
62
62
  return html_close_tag_node;
63
63
  }
64
64
 
65
- AST_HTML_ELEMENT_NODE_T* ast_html_element_node_init(struct AST_HTML_OPEN_TAG_NODE_STRUCT* open_tag, token_T* tag_name, array_T* body, struct AST_HTML_CLOSE_TAG_NODE_STRUCT* close_tag, bool is_void, element_source_t source, position_T* start_position, position_T* end_position, array_T* errors) {
65
+ AST_HTML_ELEMENT_NODE_T* ast_html_element_node_init(struct AST_HTML_OPEN_TAG_NODE_STRUCT* open_tag, token_T* tag_name, hb_array_T* body, struct AST_HTML_CLOSE_TAG_NODE_STRUCT* close_tag, bool is_void, element_source_t source, position_T start_position, position_T end_position, hb_array_T* errors) {
66
66
  AST_HTML_ELEMENT_NODE_T* html_element_node = malloc(sizeof(AST_HTML_ELEMENT_NODE_T));
67
67
 
68
68
  ast_node_init(&html_element_node->base, AST_HTML_ELEMENT_NODE, start_position, end_position, errors);
@@ -77,7 +77,7 @@ AST_HTML_ELEMENT_NODE_T* ast_html_element_node_init(struct AST_HTML_OPEN_TAG_NOD
77
77
  return html_element_node;
78
78
  }
79
79
 
80
- AST_HTML_ATTRIBUTE_VALUE_NODE_T* ast_html_attribute_value_node_init(token_T* open_quote, array_T* children, token_T* close_quote, bool quoted, position_T* start_position, position_T* end_position, array_T* errors) {
80
+ AST_HTML_ATTRIBUTE_VALUE_NODE_T* ast_html_attribute_value_node_init(token_T* open_quote, hb_array_T* children, token_T* close_quote, bool quoted, position_T start_position, position_T end_position, hb_array_T* errors) {
81
81
  AST_HTML_ATTRIBUTE_VALUE_NODE_T* html_attribute_value_node = malloc(sizeof(AST_HTML_ATTRIBUTE_VALUE_NODE_T));
82
82
 
83
83
  ast_node_init(&html_attribute_value_node->base, AST_HTML_ATTRIBUTE_VALUE_NODE, start_position, end_position, errors);
@@ -90,7 +90,7 @@ AST_HTML_ATTRIBUTE_VALUE_NODE_T* ast_html_attribute_value_node_init(token_T* ope
90
90
  return html_attribute_value_node;
91
91
  }
92
92
 
93
- AST_HTML_ATTRIBUTE_NAME_NODE_T* ast_html_attribute_name_node_init(array_T* children, position_T* start_position, position_T* end_position, array_T* errors) {
93
+ AST_HTML_ATTRIBUTE_NAME_NODE_T* ast_html_attribute_name_node_init(hb_array_T* children, position_T start_position, position_T end_position, hb_array_T* errors) {
94
94
  AST_HTML_ATTRIBUTE_NAME_NODE_T* html_attribute_name_node = malloc(sizeof(AST_HTML_ATTRIBUTE_NAME_NODE_T));
95
95
 
96
96
  ast_node_init(&html_attribute_name_node->base, AST_HTML_ATTRIBUTE_NAME_NODE, start_position, end_position, errors);
@@ -100,7 +100,7 @@ AST_HTML_ATTRIBUTE_NAME_NODE_T* ast_html_attribute_name_node_init(array_T* child
100
100
  return html_attribute_name_node;
101
101
  }
102
102
 
103
- AST_HTML_ATTRIBUTE_NODE_T* ast_html_attribute_node_init(struct AST_HTML_ATTRIBUTE_NAME_NODE_STRUCT* name, token_T* equals, struct AST_HTML_ATTRIBUTE_VALUE_NODE_STRUCT* value, position_T* start_position, position_T* end_position, array_T* errors) {
103
+ AST_HTML_ATTRIBUTE_NODE_T* ast_html_attribute_node_init(struct AST_HTML_ATTRIBUTE_NAME_NODE_STRUCT* name, token_T* equals, struct AST_HTML_ATTRIBUTE_VALUE_NODE_STRUCT* value, position_T start_position, position_T end_position, hb_array_T* errors) {
104
104
  AST_HTML_ATTRIBUTE_NODE_T* html_attribute_node = malloc(sizeof(AST_HTML_ATTRIBUTE_NODE_T));
105
105
 
106
106
  ast_node_init(&html_attribute_node->base, AST_HTML_ATTRIBUTE_NODE, start_position, end_position, errors);
@@ -112,7 +112,7 @@ AST_HTML_ATTRIBUTE_NODE_T* ast_html_attribute_node_init(struct AST_HTML_ATTRIBUT
112
112
  return html_attribute_node;
113
113
  }
114
114
 
115
- AST_HTML_TEXT_NODE_T* ast_html_text_node_init(const char* content, position_T* start_position, position_T* end_position, array_T* errors) {
115
+ AST_HTML_TEXT_NODE_T* ast_html_text_node_init(const char* content, position_T start_position, position_T end_position, hb_array_T* errors) {
116
116
  AST_HTML_TEXT_NODE_T* html_text_node = malloc(sizeof(AST_HTML_TEXT_NODE_T));
117
117
 
118
118
  ast_node_init(&html_text_node->base, AST_HTML_TEXT_NODE, start_position, end_position, errors);
@@ -122,7 +122,7 @@ AST_HTML_TEXT_NODE_T* ast_html_text_node_init(const char* content, position_T* s
122
122
  return html_text_node;
123
123
  }
124
124
 
125
- AST_HTML_COMMENT_NODE_T* ast_html_comment_node_init(token_T* comment_start, array_T* children, token_T* comment_end, position_T* start_position, position_T* end_position, array_T* errors) {
125
+ AST_HTML_COMMENT_NODE_T* ast_html_comment_node_init(token_T* comment_start, hb_array_T* children, token_T* comment_end, position_T start_position, position_T end_position, hb_array_T* errors) {
126
126
  AST_HTML_COMMENT_NODE_T* html_comment_node = malloc(sizeof(AST_HTML_COMMENT_NODE_T));
127
127
 
128
128
  ast_node_init(&html_comment_node->base, AST_HTML_COMMENT_NODE, start_position, end_position, errors);
@@ -134,7 +134,7 @@ AST_HTML_COMMENT_NODE_T* ast_html_comment_node_init(token_T* comment_start, arra
134
134
  return html_comment_node;
135
135
  }
136
136
 
137
- AST_HTML_DOCTYPE_NODE_T* ast_html_doctype_node_init(token_T* tag_opening, array_T* children, token_T* tag_closing, position_T* start_position, position_T* end_position, array_T* errors) {
137
+ AST_HTML_DOCTYPE_NODE_T* ast_html_doctype_node_init(token_T* tag_opening, hb_array_T* children, token_T* tag_closing, position_T start_position, position_T end_position, hb_array_T* errors) {
138
138
  AST_HTML_DOCTYPE_NODE_T* html_doctype_node = malloc(sizeof(AST_HTML_DOCTYPE_NODE_T));
139
139
 
140
140
  ast_node_init(&html_doctype_node->base, AST_HTML_DOCTYPE_NODE, start_position, end_position, errors);
@@ -146,7 +146,7 @@ AST_HTML_DOCTYPE_NODE_T* ast_html_doctype_node_init(token_T* tag_opening, array_
146
146
  return html_doctype_node;
147
147
  }
148
148
 
149
- AST_XML_DECLARATION_NODE_T* ast_xml_declaration_node_init(token_T* tag_opening, array_T* children, token_T* tag_closing, position_T* start_position, position_T* end_position, array_T* errors) {
149
+ AST_XML_DECLARATION_NODE_T* ast_xml_declaration_node_init(token_T* tag_opening, hb_array_T* children, token_T* tag_closing, position_T start_position, position_T end_position, hb_array_T* errors) {
150
150
  AST_XML_DECLARATION_NODE_T* xml_declaration_node = malloc(sizeof(AST_XML_DECLARATION_NODE_T));
151
151
 
152
152
  ast_node_init(&xml_declaration_node->base, AST_XML_DECLARATION_NODE, start_position, end_position, errors);
@@ -158,7 +158,7 @@ AST_XML_DECLARATION_NODE_T* ast_xml_declaration_node_init(token_T* tag_opening,
158
158
  return xml_declaration_node;
159
159
  }
160
160
 
161
- AST_CDATA_NODE_T* ast_cdata_node_init(token_T* tag_opening, array_T* children, token_T* tag_closing, position_T* start_position, position_T* end_position, array_T* errors) {
161
+ AST_CDATA_NODE_T* ast_cdata_node_init(token_T* tag_opening, hb_array_T* children, token_T* tag_closing, position_T start_position, position_T end_position, hb_array_T* errors) {
162
162
  AST_CDATA_NODE_T* cdata_node = malloc(sizeof(AST_CDATA_NODE_T));
163
163
 
164
164
  ast_node_init(&cdata_node->base, AST_CDATA_NODE, start_position, end_position, errors);
@@ -170,7 +170,7 @@ AST_CDATA_NODE_T* ast_cdata_node_init(token_T* tag_opening, array_T* children, t
170
170
  return cdata_node;
171
171
  }
172
172
 
173
- AST_WHITESPACE_NODE_T* ast_whitespace_node_init(token_T* value, position_T* start_position, position_T* end_position, array_T* errors) {
173
+ AST_WHITESPACE_NODE_T* ast_whitespace_node_init(token_T* value, position_T start_position, position_T end_position, hb_array_T* errors) {
174
174
  AST_WHITESPACE_NODE_T* whitespace_node = malloc(sizeof(AST_WHITESPACE_NODE_T));
175
175
 
176
176
  ast_node_init(&whitespace_node->base, AST_WHITESPACE_NODE, start_position, end_position, errors);
@@ -180,7 +180,7 @@ AST_WHITESPACE_NODE_T* ast_whitespace_node_init(token_T* value, position_T* star
180
180
  return whitespace_node;
181
181
  }
182
182
 
183
- AST_ERB_CONTENT_NODE_T* ast_erb_content_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, analyzed_ruby_T* analyzed_ruby, bool parsed, bool valid, position_T* start_position, position_T* end_position, array_T* errors) {
183
+ AST_ERB_CONTENT_NODE_T* ast_erb_content_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, analyzed_ruby_T* analyzed_ruby, bool parsed, bool valid, position_T start_position, position_T end_position, hb_array_T* errors) {
184
184
  AST_ERB_CONTENT_NODE_T* erb_content_node = malloc(sizeof(AST_ERB_CONTENT_NODE_T));
185
185
 
186
186
  ast_node_init(&erb_content_node->base, AST_ERB_CONTENT_NODE, start_position, end_position, errors);
@@ -195,7 +195,7 @@ AST_ERB_CONTENT_NODE_T* ast_erb_content_node_init(token_T* tag_opening, token_T*
195
195
  return erb_content_node;
196
196
  }
197
197
 
198
- AST_ERB_END_NODE_T* ast_erb_end_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, position_T* start_position, position_T* end_position, array_T* errors) {
198
+ AST_ERB_END_NODE_T* ast_erb_end_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, position_T start_position, position_T end_position, hb_array_T* errors) {
199
199
  AST_ERB_END_NODE_T* erb_end_node = malloc(sizeof(AST_ERB_END_NODE_T));
200
200
 
201
201
  ast_node_init(&erb_end_node->base, AST_ERB_END_NODE, start_position, end_position, errors);
@@ -207,7 +207,7 @@ AST_ERB_END_NODE_T* ast_erb_end_node_init(token_T* tag_opening, token_T* content
207
207
  return erb_end_node;
208
208
  }
209
209
 
210
- AST_ERB_ELSE_NODE_T* ast_erb_else_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, position_T* start_position, position_T* end_position, array_T* errors) {
210
+ AST_ERB_ELSE_NODE_T* ast_erb_else_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, position_T start_position, position_T end_position, hb_array_T* errors) {
211
211
  AST_ERB_ELSE_NODE_T* erb_else_node = malloc(sizeof(AST_ERB_ELSE_NODE_T));
212
212
 
213
213
  ast_node_init(&erb_else_node->base, AST_ERB_ELSE_NODE, start_position, end_position, errors);
@@ -220,7 +220,7 @@ AST_ERB_ELSE_NODE_T* ast_erb_else_node_init(token_T* tag_opening, token_T* conte
220
220
  return erb_else_node;
221
221
  }
222
222
 
223
- AST_ERB_IF_NODE_T* ast_erb_if_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, struct AST_NODE_STRUCT* subsequent, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
223
+ AST_ERB_IF_NODE_T* ast_erb_if_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, struct AST_NODE_STRUCT* subsequent, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
224
224
  AST_ERB_IF_NODE_T* erb_if_node = malloc(sizeof(AST_ERB_IF_NODE_T));
225
225
 
226
226
  ast_node_init(&erb_if_node->base, AST_ERB_IF_NODE, start_position, end_position, errors);
@@ -235,7 +235,7 @@ AST_ERB_IF_NODE_T* ast_erb_if_node_init(token_T* tag_opening, token_T* content,
235
235
  return erb_if_node;
236
236
  }
237
237
 
238
- AST_ERB_BLOCK_NODE_T* ast_erb_block_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* body, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
238
+ AST_ERB_BLOCK_NODE_T* ast_erb_block_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* body, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
239
239
  AST_ERB_BLOCK_NODE_T* erb_block_node = malloc(sizeof(AST_ERB_BLOCK_NODE_T));
240
240
 
241
241
  ast_node_init(&erb_block_node->base, AST_ERB_BLOCK_NODE, start_position, end_position, errors);
@@ -249,7 +249,7 @@ AST_ERB_BLOCK_NODE_T* ast_erb_block_node_init(token_T* tag_opening, token_T* con
249
249
  return erb_block_node;
250
250
  }
251
251
 
252
- AST_ERB_WHEN_NODE_T* ast_erb_when_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, position_T* start_position, position_T* end_position, array_T* errors) {
252
+ AST_ERB_WHEN_NODE_T* ast_erb_when_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, position_T start_position, position_T end_position, hb_array_T* errors) {
253
253
  AST_ERB_WHEN_NODE_T* erb_when_node = malloc(sizeof(AST_ERB_WHEN_NODE_T));
254
254
 
255
255
  ast_node_init(&erb_when_node->base, AST_ERB_WHEN_NODE, start_position, end_position, errors);
@@ -262,7 +262,7 @@ AST_ERB_WHEN_NODE_T* ast_erb_when_node_init(token_T* tag_opening, token_T* conte
262
262
  return erb_when_node;
263
263
  }
264
264
 
265
- AST_ERB_CASE_NODE_T* ast_erb_case_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* children, array_T* conditions, struct AST_ERB_ELSE_NODE_STRUCT* else_clause, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
265
+ AST_ERB_CASE_NODE_T* ast_erb_case_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* children, hb_array_T* conditions, struct AST_ERB_ELSE_NODE_STRUCT* else_clause, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
266
266
  AST_ERB_CASE_NODE_T* erb_case_node = malloc(sizeof(AST_ERB_CASE_NODE_T));
267
267
 
268
268
  ast_node_init(&erb_case_node->base, AST_ERB_CASE_NODE, start_position, end_position, errors);
@@ -278,7 +278,7 @@ AST_ERB_CASE_NODE_T* ast_erb_case_node_init(token_T* tag_opening, token_T* conte
278
278
  return erb_case_node;
279
279
  }
280
280
 
281
- AST_ERB_CASE_MATCH_NODE_T* ast_erb_case_match_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* children, array_T* conditions, struct AST_ERB_ELSE_NODE_STRUCT* else_clause, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
281
+ AST_ERB_CASE_MATCH_NODE_T* ast_erb_case_match_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* children, hb_array_T* conditions, struct AST_ERB_ELSE_NODE_STRUCT* else_clause, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
282
282
  AST_ERB_CASE_MATCH_NODE_T* erb_case_match_node = malloc(sizeof(AST_ERB_CASE_MATCH_NODE_T));
283
283
 
284
284
  ast_node_init(&erb_case_match_node->base, AST_ERB_CASE_MATCH_NODE, start_position, end_position, errors);
@@ -294,7 +294,7 @@ AST_ERB_CASE_MATCH_NODE_T* ast_erb_case_match_node_init(token_T* tag_opening, to
294
294
  return erb_case_match_node;
295
295
  }
296
296
 
297
- AST_ERB_WHILE_NODE_T* ast_erb_while_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
297
+ AST_ERB_WHILE_NODE_T* ast_erb_while_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
298
298
  AST_ERB_WHILE_NODE_T* erb_while_node = malloc(sizeof(AST_ERB_WHILE_NODE_T));
299
299
 
300
300
  ast_node_init(&erb_while_node->base, AST_ERB_WHILE_NODE, start_position, end_position, errors);
@@ -308,7 +308,7 @@ AST_ERB_WHILE_NODE_T* ast_erb_while_node_init(token_T* tag_opening, token_T* con
308
308
  return erb_while_node;
309
309
  }
310
310
 
311
- AST_ERB_UNTIL_NODE_T* ast_erb_until_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
311
+ AST_ERB_UNTIL_NODE_T* ast_erb_until_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
312
312
  AST_ERB_UNTIL_NODE_T* erb_until_node = malloc(sizeof(AST_ERB_UNTIL_NODE_T));
313
313
 
314
314
  ast_node_init(&erb_until_node->base, AST_ERB_UNTIL_NODE, start_position, end_position, errors);
@@ -322,7 +322,7 @@ AST_ERB_UNTIL_NODE_T* ast_erb_until_node_init(token_T* tag_opening, token_T* con
322
322
  return erb_until_node;
323
323
  }
324
324
 
325
- AST_ERB_FOR_NODE_T* ast_erb_for_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
325
+ AST_ERB_FOR_NODE_T* ast_erb_for_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
326
326
  AST_ERB_FOR_NODE_T* erb_for_node = malloc(sizeof(AST_ERB_FOR_NODE_T));
327
327
 
328
328
  ast_node_init(&erb_for_node->base, AST_ERB_FOR_NODE, start_position, end_position, errors);
@@ -336,7 +336,7 @@ AST_ERB_FOR_NODE_T* ast_erb_for_node_init(token_T* tag_opening, token_T* content
336
336
  return erb_for_node;
337
337
  }
338
338
 
339
- AST_ERB_RESCUE_NODE_T* ast_erb_rescue_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, struct AST_ERB_RESCUE_NODE_STRUCT* subsequent, position_T* start_position, position_T* end_position, array_T* errors) {
339
+ AST_ERB_RESCUE_NODE_T* ast_erb_rescue_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, struct AST_ERB_RESCUE_NODE_STRUCT* subsequent, position_T start_position, position_T end_position, hb_array_T* errors) {
340
340
  AST_ERB_RESCUE_NODE_T* erb_rescue_node = malloc(sizeof(AST_ERB_RESCUE_NODE_T));
341
341
 
342
342
  ast_node_init(&erb_rescue_node->base, AST_ERB_RESCUE_NODE, start_position, end_position, errors);
@@ -350,7 +350,7 @@ AST_ERB_RESCUE_NODE_T* ast_erb_rescue_node_init(token_T* tag_opening, token_T* c
350
350
  return erb_rescue_node;
351
351
  }
352
352
 
353
- AST_ERB_ENSURE_NODE_T* ast_erb_ensure_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, position_T* start_position, position_T* end_position, array_T* errors) {
353
+ AST_ERB_ENSURE_NODE_T* ast_erb_ensure_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, position_T start_position, position_T end_position, hb_array_T* errors) {
354
354
  AST_ERB_ENSURE_NODE_T* erb_ensure_node = malloc(sizeof(AST_ERB_ENSURE_NODE_T));
355
355
 
356
356
  ast_node_init(&erb_ensure_node->base, AST_ERB_ENSURE_NODE, start_position, end_position, errors);
@@ -363,7 +363,7 @@ AST_ERB_ENSURE_NODE_T* ast_erb_ensure_node_init(token_T* tag_opening, token_T* c
363
363
  return erb_ensure_node;
364
364
  }
365
365
 
366
- AST_ERB_BEGIN_NODE_T* ast_erb_begin_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, struct AST_ERB_RESCUE_NODE_STRUCT* rescue_clause, struct AST_ERB_ELSE_NODE_STRUCT* else_clause, struct AST_ERB_ENSURE_NODE_STRUCT* ensure_clause, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
366
+ AST_ERB_BEGIN_NODE_T* ast_erb_begin_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, struct AST_ERB_RESCUE_NODE_STRUCT* rescue_clause, struct AST_ERB_ELSE_NODE_STRUCT* else_clause, struct AST_ERB_ENSURE_NODE_STRUCT* ensure_clause, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
367
367
  AST_ERB_BEGIN_NODE_T* erb_begin_node = malloc(sizeof(AST_ERB_BEGIN_NODE_T));
368
368
 
369
369
  ast_node_init(&erb_begin_node->base, AST_ERB_BEGIN_NODE, start_position, end_position, errors);
@@ -380,7 +380,7 @@ AST_ERB_BEGIN_NODE_T* ast_erb_begin_node_init(token_T* tag_opening, token_T* con
380
380
  return erb_begin_node;
381
381
  }
382
382
 
383
- AST_ERB_UNLESS_NODE_T* ast_erb_unless_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, struct AST_ERB_ELSE_NODE_STRUCT* else_clause, struct AST_ERB_END_NODE_STRUCT* end_node, position_T* start_position, position_T* end_position, array_T* errors) {
383
+ AST_ERB_UNLESS_NODE_T* ast_erb_unless_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, struct AST_ERB_ELSE_NODE_STRUCT* else_clause, struct AST_ERB_END_NODE_STRUCT* end_node, position_T start_position, position_T end_position, hb_array_T* errors) {
384
384
  AST_ERB_UNLESS_NODE_T* erb_unless_node = malloc(sizeof(AST_ERB_UNLESS_NODE_T));
385
385
 
386
386
  ast_node_init(&erb_unless_node->base, AST_ERB_UNLESS_NODE, start_position, end_position, errors);
@@ -395,7 +395,7 @@ AST_ERB_UNLESS_NODE_T* ast_erb_unless_node_init(token_T* tag_opening, token_T* c
395
395
  return erb_unless_node;
396
396
  }
397
397
 
398
- AST_ERB_YIELD_NODE_T* ast_erb_yield_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, position_T* start_position, position_T* end_position, array_T* errors) {
398
+ AST_ERB_YIELD_NODE_T* ast_erb_yield_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, position_T start_position, position_T end_position, hb_array_T* errors) {
399
399
  AST_ERB_YIELD_NODE_T* erb_yield_node = malloc(sizeof(AST_ERB_YIELD_NODE_T));
400
400
 
401
401
  ast_node_init(&erb_yield_node->base, AST_ERB_YIELD_NODE, start_position, end_position, errors);
@@ -407,7 +407,7 @@ AST_ERB_YIELD_NODE_T* ast_erb_yield_node_init(token_T* tag_opening, token_T* con
407
407
  return erb_yield_node;
408
408
  }
409
409
 
410
- AST_ERB_IN_NODE_T* ast_erb_in_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, array_T* statements, position_T* start_position, position_T* end_position, array_T* errors) {
410
+ AST_ERB_IN_NODE_T* ast_erb_in_node_init(token_T* tag_opening, token_T* content, token_T* tag_closing, hb_array_T* statements, position_T start_position, position_T end_position, hb_array_T* errors) {
411
411
  AST_ERB_IN_NODE_T* erb_in_node = malloc(sizeof(AST_ERB_IN_NODE_T));
412
412
 
413
413
  ast_node_init(&erb_in_node->base, AST_ERB_IN_NODE, start_position, end_position, errors);
@@ -420,108 +420,106 @@ AST_ERB_IN_NODE_T* ast_erb_in_node_init(token_T* tag_opening, token_T* content,
420
420
  return erb_in_node;
421
421
  }
422
422
 
423
- const char* ast_node_type_to_string(AST_NODE_T* node) {
423
+ hb_string_T ast_node_type_to_string(AST_NODE_T* node) {
424
424
  switch (node->type) {
425
- case AST_DOCUMENT_NODE: return "AST_DOCUMENT_NODE";
426
- case AST_LITERAL_NODE: return "AST_LITERAL_NODE";
427
- case AST_HTML_OPEN_TAG_NODE: return "AST_HTML_OPEN_TAG_NODE";
428
- case AST_HTML_CLOSE_TAG_NODE: return "AST_HTML_CLOSE_TAG_NODE";
429
- case AST_HTML_ELEMENT_NODE: return "AST_HTML_ELEMENT_NODE";
430
- case AST_HTML_ATTRIBUTE_VALUE_NODE: return "AST_HTML_ATTRIBUTE_VALUE_NODE";
431
- case AST_HTML_ATTRIBUTE_NAME_NODE: return "AST_HTML_ATTRIBUTE_NAME_NODE";
432
- case AST_HTML_ATTRIBUTE_NODE: return "AST_HTML_ATTRIBUTE_NODE";
433
- case AST_HTML_TEXT_NODE: return "AST_HTML_TEXT_NODE";
434
- case AST_HTML_COMMENT_NODE: return "AST_HTML_COMMENT_NODE";
435
- case AST_HTML_DOCTYPE_NODE: return "AST_HTML_DOCTYPE_NODE";
436
- case AST_XML_DECLARATION_NODE: return "AST_XML_DECLARATION_NODE";
437
- case AST_CDATA_NODE: return "AST_CDATA_NODE";
438
- case AST_WHITESPACE_NODE: return "AST_WHITESPACE_NODE";
439
- case AST_ERB_CONTENT_NODE: return "AST_ERB_CONTENT_NODE";
440
- case AST_ERB_END_NODE: return "AST_ERB_END_NODE";
441
- case AST_ERB_ELSE_NODE: return "AST_ERB_ELSE_NODE";
442
- case AST_ERB_IF_NODE: return "AST_ERB_IF_NODE";
443
- case AST_ERB_BLOCK_NODE: return "AST_ERB_BLOCK_NODE";
444
- case AST_ERB_WHEN_NODE: return "AST_ERB_WHEN_NODE";
445
- case AST_ERB_CASE_NODE: return "AST_ERB_CASE_NODE";
446
- case AST_ERB_CASE_MATCH_NODE: return "AST_ERB_CASE_MATCH_NODE";
447
- case AST_ERB_WHILE_NODE: return "AST_ERB_WHILE_NODE";
448
- case AST_ERB_UNTIL_NODE: return "AST_ERB_UNTIL_NODE";
449
- case AST_ERB_FOR_NODE: return "AST_ERB_FOR_NODE";
450
- case AST_ERB_RESCUE_NODE: return "AST_ERB_RESCUE_NODE";
451
- case AST_ERB_ENSURE_NODE: return "AST_ERB_ENSURE_NODE";
452
- case AST_ERB_BEGIN_NODE: return "AST_ERB_BEGIN_NODE";
453
- case AST_ERB_UNLESS_NODE: return "AST_ERB_UNLESS_NODE";
454
- case AST_ERB_YIELD_NODE: return "AST_ERB_YIELD_NODE";
455
- case AST_ERB_IN_NODE: return "AST_ERB_IN_NODE";
425
+ case AST_DOCUMENT_NODE: return hb_string("AST_DOCUMENT_NODE");
426
+ case AST_LITERAL_NODE: return hb_string("AST_LITERAL_NODE");
427
+ case AST_HTML_OPEN_TAG_NODE: return hb_string("AST_HTML_OPEN_TAG_NODE");
428
+ case AST_HTML_CLOSE_TAG_NODE: return hb_string("AST_HTML_CLOSE_TAG_NODE");
429
+ case AST_HTML_ELEMENT_NODE: return hb_string("AST_HTML_ELEMENT_NODE");
430
+ case AST_HTML_ATTRIBUTE_VALUE_NODE: return hb_string("AST_HTML_ATTRIBUTE_VALUE_NODE");
431
+ case AST_HTML_ATTRIBUTE_NAME_NODE: return hb_string("AST_HTML_ATTRIBUTE_NAME_NODE");
432
+ case AST_HTML_ATTRIBUTE_NODE: return hb_string("AST_HTML_ATTRIBUTE_NODE");
433
+ case AST_HTML_TEXT_NODE: return hb_string("AST_HTML_TEXT_NODE");
434
+ case AST_HTML_COMMENT_NODE: return hb_string("AST_HTML_COMMENT_NODE");
435
+ case AST_HTML_DOCTYPE_NODE: return hb_string("AST_HTML_DOCTYPE_NODE");
436
+ case AST_XML_DECLARATION_NODE: return hb_string("AST_XML_DECLARATION_NODE");
437
+ case AST_CDATA_NODE: return hb_string("AST_CDATA_NODE");
438
+ case AST_WHITESPACE_NODE: return hb_string("AST_WHITESPACE_NODE");
439
+ case AST_ERB_CONTENT_NODE: return hb_string("AST_ERB_CONTENT_NODE");
440
+ case AST_ERB_END_NODE: return hb_string("AST_ERB_END_NODE");
441
+ case AST_ERB_ELSE_NODE: return hb_string("AST_ERB_ELSE_NODE");
442
+ case AST_ERB_IF_NODE: return hb_string("AST_ERB_IF_NODE");
443
+ case AST_ERB_BLOCK_NODE: return hb_string("AST_ERB_BLOCK_NODE");
444
+ case AST_ERB_WHEN_NODE: return hb_string("AST_ERB_WHEN_NODE");
445
+ case AST_ERB_CASE_NODE: return hb_string("AST_ERB_CASE_NODE");
446
+ case AST_ERB_CASE_MATCH_NODE: return hb_string("AST_ERB_CASE_MATCH_NODE");
447
+ case AST_ERB_WHILE_NODE: return hb_string("AST_ERB_WHILE_NODE");
448
+ case AST_ERB_UNTIL_NODE: return hb_string("AST_ERB_UNTIL_NODE");
449
+ case AST_ERB_FOR_NODE: return hb_string("AST_ERB_FOR_NODE");
450
+ case AST_ERB_RESCUE_NODE: return hb_string("AST_ERB_RESCUE_NODE");
451
+ case AST_ERB_ENSURE_NODE: return hb_string("AST_ERB_ENSURE_NODE");
452
+ case AST_ERB_BEGIN_NODE: return hb_string("AST_ERB_BEGIN_NODE");
453
+ case AST_ERB_UNLESS_NODE: return hb_string("AST_ERB_UNLESS_NODE");
454
+ case AST_ERB_YIELD_NODE: return hb_string("AST_ERB_YIELD_NODE");
455
+ case AST_ERB_IN_NODE: return hb_string("AST_ERB_IN_NODE");
456
456
  }
457
457
 
458
- return "Unknown ast_node_type_T";
458
+ return hb_string("Unknown ast_node_type_T");
459
459
  }
460
460
 
461
- const char* ast_node_human_type(AST_NODE_T* node) {
461
+ hb_string_T ast_node_human_type(AST_NODE_T* node) {
462
462
  switch (node->type) {
463
- case AST_DOCUMENT_NODE: return "DocumentNode";
464
- case AST_LITERAL_NODE: return "LiteralNode";
465
- case AST_HTML_OPEN_TAG_NODE: return "HTMLOpenTagNode";
466
- case AST_HTML_CLOSE_TAG_NODE: return "HTMLCloseTagNode";
467
- case AST_HTML_ELEMENT_NODE: return "HTMLElementNode";
468
- case AST_HTML_ATTRIBUTE_VALUE_NODE: return "HTMLAttributeValueNode";
469
- case AST_HTML_ATTRIBUTE_NAME_NODE: return "HTMLAttributeNameNode";
470
- case AST_HTML_ATTRIBUTE_NODE: return "HTMLAttributeNode";
471
- case AST_HTML_TEXT_NODE: return "HTMLTextNode";
472
- case AST_HTML_COMMENT_NODE: return "HTMLCommentNode";
473
- case AST_HTML_DOCTYPE_NODE: return "HTMLDoctypeNode";
474
- case AST_XML_DECLARATION_NODE: return "XMLDeclarationNode";
475
- case AST_CDATA_NODE: return "CDATANode";
476
- case AST_WHITESPACE_NODE: return "WhitespaceNode";
477
- case AST_ERB_CONTENT_NODE: return "ERBContentNode";
478
- case AST_ERB_END_NODE: return "ERBEndNode";
479
- case AST_ERB_ELSE_NODE: return "ERBElseNode";
480
- case AST_ERB_IF_NODE: return "ERBIfNode";
481
- case AST_ERB_BLOCK_NODE: return "ERBBlockNode";
482
- case AST_ERB_WHEN_NODE: return "ERBWhenNode";
483
- case AST_ERB_CASE_NODE: return "ERBCaseNode";
484
- case AST_ERB_CASE_MATCH_NODE: return "ERBCaseMatchNode";
485
- case AST_ERB_WHILE_NODE: return "ERBWhileNode";
486
- case AST_ERB_UNTIL_NODE: return "ERBUntilNode";
487
- case AST_ERB_FOR_NODE: return "ERBForNode";
488
- case AST_ERB_RESCUE_NODE: return "ERBRescueNode";
489
- case AST_ERB_ENSURE_NODE: return "ERBEnsureNode";
490
- case AST_ERB_BEGIN_NODE: return "ERBBeginNode";
491
- case AST_ERB_UNLESS_NODE: return "ERBUnlessNode";
492
- case AST_ERB_YIELD_NODE: return "ERBYieldNode";
493
- case AST_ERB_IN_NODE: return "ERBInNode";
463
+ case AST_DOCUMENT_NODE: return hb_string("DocumentNode");
464
+ case AST_LITERAL_NODE: return hb_string("LiteralNode");
465
+ case AST_HTML_OPEN_TAG_NODE: return hb_string("HTMLOpenTagNode");
466
+ case AST_HTML_CLOSE_TAG_NODE: return hb_string("HTMLCloseTagNode");
467
+ case AST_HTML_ELEMENT_NODE: return hb_string("HTMLElementNode");
468
+ case AST_HTML_ATTRIBUTE_VALUE_NODE: return hb_string("HTMLAttributeValueNode");
469
+ case AST_HTML_ATTRIBUTE_NAME_NODE: return hb_string("HTMLAttributeNameNode");
470
+ case AST_HTML_ATTRIBUTE_NODE: return hb_string("HTMLAttributeNode");
471
+ case AST_HTML_TEXT_NODE: return hb_string("HTMLTextNode");
472
+ case AST_HTML_COMMENT_NODE: return hb_string("HTMLCommentNode");
473
+ case AST_HTML_DOCTYPE_NODE: return hb_string("HTMLDoctypeNode");
474
+ case AST_XML_DECLARATION_NODE: return hb_string("XMLDeclarationNode");
475
+ case AST_CDATA_NODE: return hb_string("CDATANode");
476
+ case AST_WHITESPACE_NODE: return hb_string("WhitespaceNode");
477
+ case AST_ERB_CONTENT_NODE: return hb_string("ERBContentNode");
478
+ case AST_ERB_END_NODE: return hb_string("ERBEndNode");
479
+ case AST_ERB_ELSE_NODE: return hb_string("ERBElseNode");
480
+ case AST_ERB_IF_NODE: return hb_string("ERBIfNode");
481
+ case AST_ERB_BLOCK_NODE: return hb_string("ERBBlockNode");
482
+ case AST_ERB_WHEN_NODE: return hb_string("ERBWhenNode");
483
+ case AST_ERB_CASE_NODE: return hb_string("ERBCaseNode");
484
+ case AST_ERB_CASE_MATCH_NODE: return hb_string("ERBCaseMatchNode");
485
+ case AST_ERB_WHILE_NODE: return hb_string("ERBWhileNode");
486
+ case AST_ERB_UNTIL_NODE: return hb_string("ERBUntilNode");
487
+ case AST_ERB_FOR_NODE: return hb_string("ERBForNode");
488
+ case AST_ERB_RESCUE_NODE: return hb_string("ERBRescueNode");
489
+ case AST_ERB_ENSURE_NODE: return hb_string("ERBEnsureNode");
490
+ case AST_ERB_BEGIN_NODE: return hb_string("ERBBeginNode");
491
+ case AST_ERB_UNLESS_NODE: return hb_string("ERBUnlessNode");
492
+ case AST_ERB_YIELD_NODE: return hb_string("ERBYieldNode");
493
+ case AST_ERB_IN_NODE: return hb_string("ERBInNode");
494
494
  }
495
495
 
496
- return "Unknown ast_node_type_T";
496
+ return hb_string("Unknown ast_node_type_T");
497
497
  }
498
498
 
499
499
  void ast_free_base_node(AST_NODE_T* node) {
500
500
  if (node == NULL) { return; }
501
501
 
502
502
  if (node->errors) {
503
- for (size_t i = 0; i < array_size(node->errors); i++) {
504
- ERROR_T* child = array_get(node->errors, i);
503
+ for (size_t i = 0; i < hb_array_size(node->errors); i++) {
504
+ ERROR_T* child = hb_array_get(node->errors, i);
505
505
  if (child != NULL) { error_free(child); }
506
506
  }
507
507
 
508
- array_free(&node->errors);
508
+ hb_array_free(&node->errors);
509
509
  }
510
510
 
511
- if (node->location) { location_free(node->location); }
512
-
513
511
  free(node);
514
512
  }
515
513
 
516
514
 
517
515
  static void ast_free_document_node(AST_DOCUMENT_NODE_T* document_node) {
518
516
  if (document_node->children != NULL) {
519
- for (size_t i = 0; i < array_size(document_node->children); i++) {
520
- AST_NODE_T* child = array_get(document_node->children, i);
517
+ for (size_t i = 0; i < hb_array_size(document_node->children); i++) {
518
+ AST_NODE_T* child = hb_array_get(document_node->children, i);
521
519
  if (child) { ast_node_free(child); }
522
520
  }
523
521
 
524
- array_free(&document_node->children);
522
+ hb_array_free(&document_node->children);
525
523
  }
526
524
 
527
525
  ast_free_base_node(&document_node->base);
@@ -538,12 +536,12 @@ static void ast_free_html_open_tag_node(AST_HTML_OPEN_TAG_NODE_T* html_open_tag_
538
536
  if (html_open_tag_node->tag_name != NULL) { token_free(html_open_tag_node->tag_name); }
539
537
  if (html_open_tag_node->tag_closing != NULL) { token_free(html_open_tag_node->tag_closing); }
540
538
  if (html_open_tag_node->children != NULL) {
541
- for (size_t i = 0; i < array_size(html_open_tag_node->children); i++) {
542
- AST_NODE_T* child = array_get(html_open_tag_node->children, i);
539
+ for (size_t i = 0; i < hb_array_size(html_open_tag_node->children); i++) {
540
+ AST_NODE_T* child = hb_array_get(html_open_tag_node->children, i);
543
541
  if (child) { ast_node_free(child); }
544
542
  }
545
543
 
546
- array_free(&html_open_tag_node->children);
544
+ hb_array_free(&html_open_tag_node->children);
547
545
  }
548
546
 
549
547
  ast_free_base_node(&html_open_tag_node->base);
@@ -553,12 +551,12 @@ static void ast_free_html_close_tag_node(AST_HTML_CLOSE_TAG_NODE_T* html_close_t
553
551
  if (html_close_tag_node->tag_opening != NULL) { token_free(html_close_tag_node->tag_opening); }
554
552
  if (html_close_tag_node->tag_name != NULL) { token_free(html_close_tag_node->tag_name); }
555
553
  if (html_close_tag_node->children != NULL) {
556
- for (size_t i = 0; i < array_size(html_close_tag_node->children); i++) {
557
- AST_NODE_T* child = array_get(html_close_tag_node->children, i);
554
+ for (size_t i = 0; i < hb_array_size(html_close_tag_node->children); i++) {
555
+ AST_NODE_T* child = hb_array_get(html_close_tag_node->children, i);
558
556
  if (child) { ast_node_free(child); }
559
557
  }
560
558
 
561
- array_free(&html_close_tag_node->children);
559
+ hb_array_free(&html_close_tag_node->children);
562
560
  }
563
561
  if (html_close_tag_node->tag_closing != NULL) { token_free(html_close_tag_node->tag_closing); }
564
562
 
@@ -569,12 +567,12 @@ static void ast_free_html_element_node(AST_HTML_ELEMENT_NODE_T* html_element_nod
569
567
  ast_node_free((AST_NODE_T*) html_element_node->open_tag);
570
568
  if (html_element_node->tag_name != NULL) { token_free(html_element_node->tag_name); }
571
569
  if (html_element_node->body != NULL) {
572
- for (size_t i = 0; i < array_size(html_element_node->body); i++) {
573
- AST_NODE_T* child = array_get(html_element_node->body, i);
570
+ for (size_t i = 0; i < hb_array_size(html_element_node->body); i++) {
571
+ AST_NODE_T* child = hb_array_get(html_element_node->body, i);
574
572
  if (child) { ast_node_free(child); }
575
573
  }
576
574
 
577
- array_free(&html_element_node->body);
575
+ hb_array_free(&html_element_node->body);
578
576
  }
579
577
  ast_node_free((AST_NODE_T*) html_element_node->close_tag);
580
578
 
@@ -584,12 +582,12 @@ static void ast_free_html_element_node(AST_HTML_ELEMENT_NODE_T* html_element_nod
584
582
  static void ast_free_html_attribute_value_node(AST_HTML_ATTRIBUTE_VALUE_NODE_T* html_attribute_value_node) {
585
583
  if (html_attribute_value_node->open_quote != NULL) { token_free(html_attribute_value_node->open_quote); }
586
584
  if (html_attribute_value_node->children != NULL) {
587
- for (size_t i = 0; i < array_size(html_attribute_value_node->children); i++) {
588
- AST_NODE_T* child = array_get(html_attribute_value_node->children, i);
585
+ for (size_t i = 0; i < hb_array_size(html_attribute_value_node->children); i++) {
586
+ AST_NODE_T* child = hb_array_get(html_attribute_value_node->children, i);
589
587
  if (child) { ast_node_free(child); }
590
588
  }
591
589
 
592
- array_free(&html_attribute_value_node->children);
590
+ hb_array_free(&html_attribute_value_node->children);
593
591
  }
594
592
  if (html_attribute_value_node->close_quote != NULL) { token_free(html_attribute_value_node->close_quote); }
595
593
 
@@ -598,12 +596,12 @@ static void ast_free_html_attribute_value_node(AST_HTML_ATTRIBUTE_VALUE_NODE_T*
598
596
 
599
597
  static void ast_free_html_attribute_name_node(AST_HTML_ATTRIBUTE_NAME_NODE_T* html_attribute_name_node) {
600
598
  if (html_attribute_name_node->children != NULL) {
601
- for (size_t i = 0; i < array_size(html_attribute_name_node->children); i++) {
602
- AST_NODE_T* child = array_get(html_attribute_name_node->children, i);
599
+ for (size_t i = 0; i < hb_array_size(html_attribute_name_node->children); i++) {
600
+ AST_NODE_T* child = hb_array_get(html_attribute_name_node->children, i);
603
601
  if (child) { ast_node_free(child); }
604
602
  }
605
603
 
606
- array_free(&html_attribute_name_node->children);
604
+ hb_array_free(&html_attribute_name_node->children);
607
605
  }
608
606
 
609
607
  ast_free_base_node(&html_attribute_name_node->base);
@@ -626,12 +624,12 @@ static void ast_free_html_text_node(AST_HTML_TEXT_NODE_T* html_text_node) {
626
624
  static void ast_free_html_comment_node(AST_HTML_COMMENT_NODE_T* html_comment_node) {
627
625
  if (html_comment_node->comment_start != NULL) { token_free(html_comment_node->comment_start); }
628
626
  if (html_comment_node->children != NULL) {
629
- for (size_t i = 0; i < array_size(html_comment_node->children); i++) {
630
- AST_NODE_T* child = array_get(html_comment_node->children, i);
627
+ for (size_t i = 0; i < hb_array_size(html_comment_node->children); i++) {
628
+ AST_NODE_T* child = hb_array_get(html_comment_node->children, i);
631
629
  if (child) { ast_node_free(child); }
632
630
  }
633
631
 
634
- array_free(&html_comment_node->children);
632
+ hb_array_free(&html_comment_node->children);
635
633
  }
636
634
  if (html_comment_node->comment_end != NULL) { token_free(html_comment_node->comment_end); }
637
635
 
@@ -641,12 +639,12 @@ static void ast_free_html_comment_node(AST_HTML_COMMENT_NODE_T* html_comment_nod
641
639
  static void ast_free_html_doctype_node(AST_HTML_DOCTYPE_NODE_T* html_doctype_node) {
642
640
  if (html_doctype_node->tag_opening != NULL) { token_free(html_doctype_node->tag_opening); }
643
641
  if (html_doctype_node->children != NULL) {
644
- for (size_t i = 0; i < array_size(html_doctype_node->children); i++) {
645
- AST_NODE_T* child = array_get(html_doctype_node->children, i);
642
+ for (size_t i = 0; i < hb_array_size(html_doctype_node->children); i++) {
643
+ AST_NODE_T* child = hb_array_get(html_doctype_node->children, i);
646
644
  if (child) { ast_node_free(child); }
647
645
  }
648
646
 
649
- array_free(&html_doctype_node->children);
647
+ hb_array_free(&html_doctype_node->children);
650
648
  }
651
649
  if (html_doctype_node->tag_closing != NULL) { token_free(html_doctype_node->tag_closing); }
652
650
 
@@ -656,12 +654,12 @@ static void ast_free_html_doctype_node(AST_HTML_DOCTYPE_NODE_T* html_doctype_nod
656
654
  static void ast_free_xml_declaration_node(AST_XML_DECLARATION_NODE_T* xml_declaration_node) {
657
655
  if (xml_declaration_node->tag_opening != NULL) { token_free(xml_declaration_node->tag_opening); }
658
656
  if (xml_declaration_node->children != NULL) {
659
- for (size_t i = 0; i < array_size(xml_declaration_node->children); i++) {
660
- AST_NODE_T* child = array_get(xml_declaration_node->children, i);
657
+ for (size_t i = 0; i < hb_array_size(xml_declaration_node->children); i++) {
658
+ AST_NODE_T* child = hb_array_get(xml_declaration_node->children, i);
661
659
  if (child) { ast_node_free(child); }
662
660
  }
663
661
 
664
- array_free(&xml_declaration_node->children);
662
+ hb_array_free(&xml_declaration_node->children);
665
663
  }
666
664
  if (xml_declaration_node->tag_closing != NULL) { token_free(xml_declaration_node->tag_closing); }
667
665
 
@@ -671,12 +669,12 @@ static void ast_free_xml_declaration_node(AST_XML_DECLARATION_NODE_T* xml_declar
671
669
  static void ast_free_cdata_node(AST_CDATA_NODE_T* cdata_node) {
672
670
  if (cdata_node->tag_opening != NULL) { token_free(cdata_node->tag_opening); }
673
671
  if (cdata_node->children != NULL) {
674
- for (size_t i = 0; i < array_size(cdata_node->children); i++) {
675
- AST_NODE_T* child = array_get(cdata_node->children, i);
672
+ for (size_t i = 0; i < hb_array_size(cdata_node->children); i++) {
673
+ AST_NODE_T* child = hb_array_get(cdata_node->children, i);
676
674
  if (child) { ast_node_free(child); }
677
675
  }
678
676
 
679
- array_free(&cdata_node->children);
677
+ hb_array_free(&cdata_node->children);
680
678
  }
681
679
  if (cdata_node->tag_closing != NULL) { token_free(cdata_node->tag_closing); }
682
680
 
@@ -713,12 +711,12 @@ static void ast_free_erb_else_node(AST_ERB_ELSE_NODE_T* erb_else_node) {
713
711
  if (erb_else_node->content != NULL) { token_free(erb_else_node->content); }
714
712
  if (erb_else_node->tag_closing != NULL) { token_free(erb_else_node->tag_closing); }
715
713
  if (erb_else_node->statements != NULL) {
716
- for (size_t i = 0; i < array_size(erb_else_node->statements); i++) {
717
- AST_NODE_T* child = array_get(erb_else_node->statements, i);
714
+ for (size_t i = 0; i < hb_array_size(erb_else_node->statements); i++) {
715
+ AST_NODE_T* child = hb_array_get(erb_else_node->statements, i);
718
716
  if (child) { ast_node_free(child); }
719
717
  }
720
718
 
721
- array_free(&erb_else_node->statements);
719
+ hb_array_free(&erb_else_node->statements);
722
720
  }
723
721
 
724
722
  ast_free_base_node(&erb_else_node->base);
@@ -729,12 +727,12 @@ static void ast_free_erb_if_node(AST_ERB_IF_NODE_T* erb_if_node) {
729
727
  if (erb_if_node->content != NULL) { token_free(erb_if_node->content); }
730
728
  if (erb_if_node->tag_closing != NULL) { token_free(erb_if_node->tag_closing); }
731
729
  if (erb_if_node->statements != NULL) {
732
- for (size_t i = 0; i < array_size(erb_if_node->statements); i++) {
733
- AST_NODE_T* child = array_get(erb_if_node->statements, i);
730
+ for (size_t i = 0; i < hb_array_size(erb_if_node->statements); i++) {
731
+ AST_NODE_T* child = hb_array_get(erb_if_node->statements, i);
734
732
  if (child) { ast_node_free(child); }
735
733
  }
736
734
 
737
- array_free(&erb_if_node->statements);
735
+ hb_array_free(&erb_if_node->statements);
738
736
  }
739
737
  ast_node_free((AST_NODE_T*) erb_if_node->subsequent);
740
738
  ast_node_free((AST_NODE_T*) erb_if_node->end_node);
@@ -747,12 +745,12 @@ static void ast_free_erb_block_node(AST_ERB_BLOCK_NODE_T* erb_block_node) {
747
745
  if (erb_block_node->content != NULL) { token_free(erb_block_node->content); }
748
746
  if (erb_block_node->tag_closing != NULL) { token_free(erb_block_node->tag_closing); }
749
747
  if (erb_block_node->body != NULL) {
750
- for (size_t i = 0; i < array_size(erb_block_node->body); i++) {
751
- AST_NODE_T* child = array_get(erb_block_node->body, i);
748
+ for (size_t i = 0; i < hb_array_size(erb_block_node->body); i++) {
749
+ AST_NODE_T* child = hb_array_get(erb_block_node->body, i);
752
750
  if (child) { ast_node_free(child); }
753
751
  }
754
752
 
755
- array_free(&erb_block_node->body);
753
+ hb_array_free(&erb_block_node->body);
756
754
  }
757
755
  ast_node_free((AST_NODE_T*) erb_block_node->end_node);
758
756
 
@@ -764,12 +762,12 @@ static void ast_free_erb_when_node(AST_ERB_WHEN_NODE_T* erb_when_node) {
764
762
  if (erb_when_node->content != NULL) { token_free(erb_when_node->content); }
765
763
  if (erb_when_node->tag_closing != NULL) { token_free(erb_when_node->tag_closing); }
766
764
  if (erb_when_node->statements != NULL) {
767
- for (size_t i = 0; i < array_size(erb_when_node->statements); i++) {
768
- AST_NODE_T* child = array_get(erb_when_node->statements, i);
765
+ for (size_t i = 0; i < hb_array_size(erb_when_node->statements); i++) {
766
+ AST_NODE_T* child = hb_array_get(erb_when_node->statements, i);
769
767
  if (child) { ast_node_free(child); }
770
768
  }
771
769
 
772
- array_free(&erb_when_node->statements);
770
+ hb_array_free(&erb_when_node->statements);
773
771
  }
774
772
 
775
773
  ast_free_base_node(&erb_when_node->base);
@@ -780,20 +778,20 @@ static void ast_free_erb_case_node(AST_ERB_CASE_NODE_T* erb_case_node) {
780
778
  if (erb_case_node->content != NULL) { token_free(erb_case_node->content); }
781
779
  if (erb_case_node->tag_closing != NULL) { token_free(erb_case_node->tag_closing); }
782
780
  if (erb_case_node->children != NULL) {
783
- for (size_t i = 0; i < array_size(erb_case_node->children); i++) {
784
- AST_NODE_T* child = array_get(erb_case_node->children, i);
781
+ for (size_t i = 0; i < hb_array_size(erb_case_node->children); i++) {
782
+ AST_NODE_T* child = hb_array_get(erb_case_node->children, i);
785
783
  if (child) { ast_node_free(child); }
786
784
  }
787
785
 
788
- array_free(&erb_case_node->children);
786
+ hb_array_free(&erb_case_node->children);
789
787
  }
790
788
  if (erb_case_node->conditions != NULL) {
791
- for (size_t i = 0; i < array_size(erb_case_node->conditions); i++) {
792
- AST_NODE_T* child = array_get(erb_case_node->conditions, i);
789
+ for (size_t i = 0; i < hb_array_size(erb_case_node->conditions); i++) {
790
+ AST_NODE_T* child = hb_array_get(erb_case_node->conditions, i);
793
791
  if (child) { ast_node_free(child); }
794
792
  }
795
793
 
796
- array_free(&erb_case_node->conditions);
794
+ hb_array_free(&erb_case_node->conditions);
797
795
  }
798
796
  ast_node_free((AST_NODE_T*) erb_case_node->else_clause);
799
797
  ast_node_free((AST_NODE_T*) erb_case_node->end_node);
@@ -806,20 +804,20 @@ static void ast_free_erb_case_match_node(AST_ERB_CASE_MATCH_NODE_T* erb_case_mat
806
804
  if (erb_case_match_node->content != NULL) { token_free(erb_case_match_node->content); }
807
805
  if (erb_case_match_node->tag_closing != NULL) { token_free(erb_case_match_node->tag_closing); }
808
806
  if (erb_case_match_node->children != NULL) {
809
- for (size_t i = 0; i < array_size(erb_case_match_node->children); i++) {
810
- AST_NODE_T* child = array_get(erb_case_match_node->children, i);
807
+ for (size_t i = 0; i < hb_array_size(erb_case_match_node->children); i++) {
808
+ AST_NODE_T* child = hb_array_get(erb_case_match_node->children, i);
811
809
  if (child) { ast_node_free(child); }
812
810
  }
813
811
 
814
- array_free(&erb_case_match_node->children);
812
+ hb_array_free(&erb_case_match_node->children);
815
813
  }
816
814
  if (erb_case_match_node->conditions != NULL) {
817
- for (size_t i = 0; i < array_size(erb_case_match_node->conditions); i++) {
818
- AST_NODE_T* child = array_get(erb_case_match_node->conditions, i);
815
+ for (size_t i = 0; i < hb_array_size(erb_case_match_node->conditions); i++) {
816
+ AST_NODE_T* child = hb_array_get(erb_case_match_node->conditions, i);
819
817
  if (child) { ast_node_free(child); }
820
818
  }
821
819
 
822
- array_free(&erb_case_match_node->conditions);
820
+ hb_array_free(&erb_case_match_node->conditions);
823
821
  }
824
822
  ast_node_free((AST_NODE_T*) erb_case_match_node->else_clause);
825
823
  ast_node_free((AST_NODE_T*) erb_case_match_node->end_node);
@@ -832,12 +830,12 @@ static void ast_free_erb_while_node(AST_ERB_WHILE_NODE_T* erb_while_node) {
832
830
  if (erb_while_node->content != NULL) { token_free(erb_while_node->content); }
833
831
  if (erb_while_node->tag_closing != NULL) { token_free(erb_while_node->tag_closing); }
834
832
  if (erb_while_node->statements != NULL) {
835
- for (size_t i = 0; i < array_size(erb_while_node->statements); i++) {
836
- AST_NODE_T* child = array_get(erb_while_node->statements, i);
833
+ for (size_t i = 0; i < hb_array_size(erb_while_node->statements); i++) {
834
+ AST_NODE_T* child = hb_array_get(erb_while_node->statements, i);
837
835
  if (child) { ast_node_free(child); }
838
836
  }
839
837
 
840
- array_free(&erb_while_node->statements);
838
+ hb_array_free(&erb_while_node->statements);
841
839
  }
842
840
  ast_node_free((AST_NODE_T*) erb_while_node->end_node);
843
841
 
@@ -849,12 +847,12 @@ static void ast_free_erb_until_node(AST_ERB_UNTIL_NODE_T* erb_until_node) {
849
847
  if (erb_until_node->content != NULL) { token_free(erb_until_node->content); }
850
848
  if (erb_until_node->tag_closing != NULL) { token_free(erb_until_node->tag_closing); }
851
849
  if (erb_until_node->statements != NULL) {
852
- for (size_t i = 0; i < array_size(erb_until_node->statements); i++) {
853
- AST_NODE_T* child = array_get(erb_until_node->statements, i);
850
+ for (size_t i = 0; i < hb_array_size(erb_until_node->statements); i++) {
851
+ AST_NODE_T* child = hb_array_get(erb_until_node->statements, i);
854
852
  if (child) { ast_node_free(child); }
855
853
  }
856
854
 
857
- array_free(&erb_until_node->statements);
855
+ hb_array_free(&erb_until_node->statements);
858
856
  }
859
857
  ast_node_free((AST_NODE_T*) erb_until_node->end_node);
860
858
 
@@ -866,12 +864,12 @@ static void ast_free_erb_for_node(AST_ERB_FOR_NODE_T* erb_for_node) {
866
864
  if (erb_for_node->content != NULL) { token_free(erb_for_node->content); }
867
865
  if (erb_for_node->tag_closing != NULL) { token_free(erb_for_node->tag_closing); }
868
866
  if (erb_for_node->statements != NULL) {
869
- for (size_t i = 0; i < array_size(erb_for_node->statements); i++) {
870
- AST_NODE_T* child = array_get(erb_for_node->statements, i);
867
+ for (size_t i = 0; i < hb_array_size(erb_for_node->statements); i++) {
868
+ AST_NODE_T* child = hb_array_get(erb_for_node->statements, i);
871
869
  if (child) { ast_node_free(child); }
872
870
  }
873
871
 
874
- array_free(&erb_for_node->statements);
872
+ hb_array_free(&erb_for_node->statements);
875
873
  }
876
874
  ast_node_free((AST_NODE_T*) erb_for_node->end_node);
877
875
 
@@ -883,12 +881,12 @@ static void ast_free_erb_rescue_node(AST_ERB_RESCUE_NODE_T* erb_rescue_node) {
883
881
  if (erb_rescue_node->content != NULL) { token_free(erb_rescue_node->content); }
884
882
  if (erb_rescue_node->tag_closing != NULL) { token_free(erb_rescue_node->tag_closing); }
885
883
  if (erb_rescue_node->statements != NULL) {
886
- for (size_t i = 0; i < array_size(erb_rescue_node->statements); i++) {
887
- AST_NODE_T* child = array_get(erb_rescue_node->statements, i);
884
+ for (size_t i = 0; i < hb_array_size(erb_rescue_node->statements); i++) {
885
+ AST_NODE_T* child = hb_array_get(erb_rescue_node->statements, i);
888
886
  if (child) { ast_node_free(child); }
889
887
  }
890
888
 
891
- array_free(&erb_rescue_node->statements);
889
+ hb_array_free(&erb_rescue_node->statements);
892
890
  }
893
891
  ast_node_free((AST_NODE_T*) erb_rescue_node->subsequent);
894
892
 
@@ -900,12 +898,12 @@ static void ast_free_erb_ensure_node(AST_ERB_ENSURE_NODE_T* erb_ensure_node) {
900
898
  if (erb_ensure_node->content != NULL) { token_free(erb_ensure_node->content); }
901
899
  if (erb_ensure_node->tag_closing != NULL) { token_free(erb_ensure_node->tag_closing); }
902
900
  if (erb_ensure_node->statements != NULL) {
903
- for (size_t i = 0; i < array_size(erb_ensure_node->statements); i++) {
904
- AST_NODE_T* child = array_get(erb_ensure_node->statements, i);
901
+ for (size_t i = 0; i < hb_array_size(erb_ensure_node->statements); i++) {
902
+ AST_NODE_T* child = hb_array_get(erb_ensure_node->statements, i);
905
903
  if (child) { ast_node_free(child); }
906
904
  }
907
905
 
908
- array_free(&erb_ensure_node->statements);
906
+ hb_array_free(&erb_ensure_node->statements);
909
907
  }
910
908
 
911
909
  ast_free_base_node(&erb_ensure_node->base);
@@ -916,12 +914,12 @@ static void ast_free_erb_begin_node(AST_ERB_BEGIN_NODE_T* erb_begin_node) {
916
914
  if (erb_begin_node->content != NULL) { token_free(erb_begin_node->content); }
917
915
  if (erb_begin_node->tag_closing != NULL) { token_free(erb_begin_node->tag_closing); }
918
916
  if (erb_begin_node->statements != NULL) {
919
- for (size_t i = 0; i < array_size(erb_begin_node->statements); i++) {
920
- AST_NODE_T* child = array_get(erb_begin_node->statements, i);
917
+ for (size_t i = 0; i < hb_array_size(erb_begin_node->statements); i++) {
918
+ AST_NODE_T* child = hb_array_get(erb_begin_node->statements, i);
921
919
  if (child) { ast_node_free(child); }
922
920
  }
923
921
 
924
- array_free(&erb_begin_node->statements);
922
+ hb_array_free(&erb_begin_node->statements);
925
923
  }
926
924
  ast_node_free((AST_NODE_T*) erb_begin_node->rescue_clause);
927
925
  ast_node_free((AST_NODE_T*) erb_begin_node->else_clause);
@@ -936,12 +934,12 @@ static void ast_free_erb_unless_node(AST_ERB_UNLESS_NODE_T* erb_unless_node) {
936
934
  if (erb_unless_node->content != NULL) { token_free(erb_unless_node->content); }
937
935
  if (erb_unless_node->tag_closing != NULL) { token_free(erb_unless_node->tag_closing); }
938
936
  if (erb_unless_node->statements != NULL) {
939
- for (size_t i = 0; i < array_size(erb_unless_node->statements); i++) {
940
- AST_NODE_T* child = array_get(erb_unless_node->statements, i);
937
+ for (size_t i = 0; i < hb_array_size(erb_unless_node->statements); i++) {
938
+ AST_NODE_T* child = hb_array_get(erb_unless_node->statements, i);
941
939
  if (child) { ast_node_free(child); }
942
940
  }
943
941
 
944
- array_free(&erb_unless_node->statements);
942
+ hb_array_free(&erb_unless_node->statements);
945
943
  }
946
944
  ast_node_free((AST_NODE_T*) erb_unless_node->else_clause);
947
945
  ast_node_free((AST_NODE_T*) erb_unless_node->end_node);
@@ -962,12 +960,12 @@ static void ast_free_erb_in_node(AST_ERB_IN_NODE_T* erb_in_node) {
962
960
  if (erb_in_node->content != NULL) { token_free(erb_in_node->content); }
963
961
  if (erb_in_node->tag_closing != NULL) { token_free(erb_in_node->tag_closing); }
964
962
  if (erb_in_node->statements != NULL) {
965
- for (size_t i = 0; i < array_size(erb_in_node->statements); i++) {
966
- AST_NODE_T* child = array_get(erb_in_node->statements, i);
963
+ for (size_t i = 0; i < hb_array_size(erb_in_node->statements); i++) {
964
+ AST_NODE_T* child = hb_array_get(erb_in_node->statements, i);
967
965
  if (child) { ast_node_free(child); }
968
966
  }
969
967
 
970
- array_free(&erb_in_node->statements);
968
+ hb_array_free(&erb_in_node->statements);
971
969
  }
972
970
 
973
971
  ast_free_base_node(&erb_in_node->base);