herb 0.7.5 → 0.8.0

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 (161) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8 -5
  3. data/config.yml +26 -6
  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 +3 -3
  9. data/ext/herb/extension_helpers.h +1 -1
  10. data/ext/herb/nodes.c +72 -37
  11. data/herb.gemspec +0 -2
  12. data/lib/herb/ast/helpers.rb +11 -0
  13. data/lib/herb/ast/node.rb +15 -6
  14. data/lib/herb/ast/nodes.rb +609 -392
  15. data/lib/herb/cli.rb +31 -0
  16. data/lib/herb/colors.rb +82 -0
  17. data/lib/herb/engine/compiler.rb +140 -14
  18. data/lib/herb/engine/debug_visitor.rb +1 -5
  19. data/lib/herb/engine/parser_error_overlay.rb +1 -1
  20. data/lib/herb/engine.rb +8 -14
  21. data/lib/herb/errors.rb +166 -56
  22. data/lib/herb/location.rb +2 -2
  23. data/lib/herb/project.rb +86 -21
  24. data/lib/herb/token.rb +14 -2
  25. data/lib/herb/version.rb +1 -1
  26. data/lib/herb.rb +1 -0
  27. data/sig/herb/ast/helpers.rbs +3 -0
  28. data/sig/herb/ast/node.rbs +12 -5
  29. data/sig/herb/ast/nodes.rbs +124 -62
  30. data/sig/herb/colors.rbs +35 -0
  31. data/sig/herb/engine/compiler.rbs +23 -1
  32. data/sig/herb/errors.rbs +74 -20
  33. data/sig/herb/token.rbs +8 -0
  34. data/sig/herb_c_extension.rbs +1 -1
  35. data/sig/serialized_ast_errors.rbs +8 -0
  36. data/src/analyze.c +420 -171
  37. data/src/analyze_helpers.c +5 -0
  38. data/src/analyze_missing_end.c +147 -0
  39. data/src/analyze_transform.c +196 -0
  40. data/src/analyzed_ruby.c +23 -2
  41. data/src/ast_node.c +5 -5
  42. data/src/ast_nodes.c +179 -179
  43. data/src/ast_pretty_print.c +232 -232
  44. data/src/element_source.c +7 -6
  45. data/src/errors.c +246 -126
  46. data/src/extract.c +92 -34
  47. data/src/herb.c +37 -49
  48. data/src/html_util.c +34 -96
  49. data/src/include/analyze.h +10 -2
  50. data/src/include/analyze_helpers.h +3 -0
  51. data/src/include/analyzed_ruby.h +4 -2
  52. data/src/include/ast_node.h +2 -2
  53. data/src/include/ast_nodes.h +67 -66
  54. data/src/include/ast_pretty_print.h +2 -2
  55. data/src/include/element_source.h +3 -1
  56. data/src/include/errors.h +30 -14
  57. data/src/include/extract.h +4 -4
  58. data/src/include/herb.h +6 -7
  59. data/src/include/html_util.h +4 -5
  60. data/src/include/lexer.h +1 -3
  61. data/src/include/lexer_peek_helpers.h +14 -14
  62. data/src/include/lexer_struct.h +3 -2
  63. data/src/include/macros.h +4 -0
  64. data/src/include/parser.h +12 -6
  65. data/src/include/parser_helpers.h +25 -15
  66. data/src/include/pretty_print.h +38 -28
  67. data/src/include/token.h +5 -8
  68. data/src/include/utf8.h +3 -2
  69. data/src/include/util/hb_arena.h +31 -0
  70. data/src/include/util/hb_arena_debug.h +8 -0
  71. data/src/include/util/hb_array.h +33 -0
  72. data/src/include/util/hb_buffer.h +34 -0
  73. data/src/include/util/hb_string.h +29 -0
  74. data/src/include/util/hb_system.h +9 -0
  75. data/src/include/util.h +3 -14
  76. data/src/include/version.h +1 -1
  77. data/src/include/visitor.h +1 -1
  78. data/src/io.c +7 -4
  79. data/src/lexer.c +61 -88
  80. data/src/lexer_peek_helpers.c +35 -37
  81. data/src/main.c +19 -23
  82. data/src/parser.c +282 -201
  83. data/src/parser_helpers.c +46 -40
  84. data/src/parser_match_tags.c +316 -0
  85. data/src/pretty_print.c +82 -106
  86. data/src/token.c +18 -65
  87. data/src/utf8.c +4 -4
  88. data/src/util/hb_arena.c +179 -0
  89. data/src/util/hb_arena_debug.c +237 -0
  90. data/src/{array.c → util/hb_array.c} +26 -27
  91. data/src/util/hb_buffer.c +203 -0
  92. data/src/util/hb_string.c +85 -0
  93. data/src/util/hb_system.c +30 -0
  94. data/src/util.c +29 -99
  95. data/src/visitor.c +54 -54
  96. data/templates/ext/herb/error_helpers.c.erb +3 -3
  97. data/templates/ext/herb/error_helpers.h.erb +1 -1
  98. data/templates/ext/herb/nodes.c.erb +11 -6
  99. data/templates/java/error_helpers.c.erb +75 -0
  100. data/templates/java/error_helpers.h.erb +20 -0
  101. data/templates/java/nodes.c.erb +97 -0
  102. data/templates/java/nodes.h.erb +23 -0
  103. data/templates/java/org/herb/ast/Errors.java.erb +121 -0
  104. data/templates/java/org/herb/ast/NodeVisitor.java.erb +14 -0
  105. data/templates/java/org/herb/ast/Nodes.java.erb +220 -0
  106. data/templates/java/org/herb/ast/Visitor.java.erb +56 -0
  107. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +8 -8
  108. data/templates/javascript/packages/node/extension/error_helpers.h.erb +1 -1
  109. data/templates/javascript/packages/node/extension/nodes.cpp.erb +9 -9
  110. data/templates/javascript/packages/node/extension/nodes.h.erb +1 -1
  111. data/templates/lib/herb/ast/nodes.rb.erb +28 -16
  112. data/templates/lib/herb/errors.rb.erb +17 -12
  113. data/templates/rust/src/ast/nodes.rs.erb +220 -0
  114. data/templates/rust/src/errors.rs.erb +216 -0
  115. data/templates/rust/src/nodes.rs.erb +374 -0
  116. data/templates/src/analyze_missing_end.c.erb +36 -0
  117. data/templates/src/analyze_transform.c.erb +24 -0
  118. data/templates/src/ast_nodes.c.erb +14 -14
  119. data/templates/src/ast_pretty_print.c.erb +36 -36
  120. data/templates/src/errors.c.erb +31 -31
  121. data/templates/src/include/ast_nodes.h.erb +10 -9
  122. data/templates/src/include/ast_pretty_print.h.erb +2 -2
  123. data/templates/src/include/errors.h.erb +6 -6
  124. data/templates/src/parser_match_tags.c.erb +38 -0
  125. data/templates/src/visitor.c.erb +4 -4
  126. data/templates/template.rb +22 -3
  127. data/templates/wasm/error_helpers.cpp.erb +9 -9
  128. data/templates/wasm/error_helpers.h.erb +1 -1
  129. data/templates/wasm/nodes.cpp.erb +9 -9
  130. data/templates/wasm/nodes.h.erb +1 -1
  131. data/vendor/prism/Rakefile +4 -1
  132. data/vendor/prism/config.yml +2 -1
  133. data/vendor/prism/include/prism/ast.h +31 -1
  134. data/vendor/prism/include/prism/diagnostic.h +1 -0
  135. data/vendor/prism/include/prism/version.h +3 -3
  136. data/vendor/prism/src/diagnostic.c +3 -1
  137. data/vendor/prism/src/prism.c +130 -71
  138. data/vendor/prism/src/util/pm_string.c +6 -8
  139. data/vendor/prism/templates/include/prism/ast.h.erb +2 -0
  140. data/vendor/prism/templates/java/org/prism/Loader.java.erb +2 -2
  141. data/vendor/prism/templates/javascript/src/deserialize.js.erb +2 -2
  142. data/vendor/prism/templates/lib/prism/serialize.rb.erb +2 -2
  143. data/vendor/prism/templates/sig/prism.rbs.erb +4 -0
  144. data/vendor/prism/templates/src/diagnostic.c.erb +1 -0
  145. metadata +34 -20
  146. data/lib/herb/libherb/array.rb +0 -51
  147. data/lib/herb/libherb/ast_node.rb +0 -50
  148. data/lib/herb/libherb/buffer.rb +0 -56
  149. data/lib/herb/libherb/extract_result.rb +0 -20
  150. data/lib/herb/libherb/lex_result.rb +0 -32
  151. data/lib/herb/libherb/libherb.rb +0 -52
  152. data/lib/herb/libherb/parse_result.rb +0 -20
  153. data/lib/herb/libherb/token.rb +0 -46
  154. data/lib/herb/libherb.rb +0 -35
  155. data/src/buffer.c +0 -241
  156. data/src/include/array.h +0 -33
  157. data/src/include/buffer.h +0 -39
  158. data/src/include/json.h +0 -28
  159. data/src/include/memory.h +0 -12
  160. data/src/json.c +0 -205
  161. data/src/memory.c +0 -53
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 st
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 start
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,92 +420,92 @@ 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
511
  free(node);
@@ -514,12 +514,12 @@ void ast_free_base_node(AST_NODE_T* node) {
514
514
 
515
515
  static void ast_free_document_node(AST_DOCUMENT_NODE_T* document_node) {
516
516
  if (document_node->children != NULL) {
517
- for (size_t i = 0; i < array_size(document_node->children); i++) {
518
- 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);
519
519
  if (child) { ast_node_free(child); }
520
520
  }
521
521
 
522
- array_free(&document_node->children);
522
+ hb_array_free(&document_node->children);
523
523
  }
524
524
 
525
525
  ast_free_base_node(&document_node->base);
@@ -536,12 +536,12 @@ static void ast_free_html_open_tag_node(AST_HTML_OPEN_TAG_NODE_T* html_open_tag_
536
536
  if (html_open_tag_node->tag_name != NULL) { token_free(html_open_tag_node->tag_name); }
537
537
  if (html_open_tag_node->tag_closing != NULL) { token_free(html_open_tag_node->tag_closing); }
538
538
  if (html_open_tag_node->children != NULL) {
539
- for (size_t i = 0; i < array_size(html_open_tag_node->children); i++) {
540
- 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);
541
541
  if (child) { ast_node_free(child); }
542
542
  }
543
543
 
544
- array_free(&html_open_tag_node->children);
544
+ hb_array_free(&html_open_tag_node->children);
545
545
  }
546
546
 
547
547
  ast_free_base_node(&html_open_tag_node->base);
@@ -551,12 +551,12 @@ static void ast_free_html_close_tag_node(AST_HTML_CLOSE_TAG_NODE_T* html_close_t
551
551
  if (html_close_tag_node->tag_opening != NULL) { token_free(html_close_tag_node->tag_opening); }
552
552
  if (html_close_tag_node->tag_name != NULL) { token_free(html_close_tag_node->tag_name); }
553
553
  if (html_close_tag_node->children != NULL) {
554
- for (size_t i = 0; i < array_size(html_close_tag_node->children); i++) {
555
- 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);
556
556
  if (child) { ast_node_free(child); }
557
557
  }
558
558
 
559
- array_free(&html_close_tag_node->children);
559
+ hb_array_free(&html_close_tag_node->children);
560
560
  }
561
561
  if (html_close_tag_node->tag_closing != NULL) { token_free(html_close_tag_node->tag_closing); }
562
562
 
@@ -567,12 +567,12 @@ static void ast_free_html_element_node(AST_HTML_ELEMENT_NODE_T* html_element_nod
567
567
  ast_node_free((AST_NODE_T*) html_element_node->open_tag);
568
568
  if (html_element_node->tag_name != NULL) { token_free(html_element_node->tag_name); }
569
569
  if (html_element_node->body != NULL) {
570
- for (size_t i = 0; i < array_size(html_element_node->body); i++) {
571
- 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);
572
572
  if (child) { ast_node_free(child); }
573
573
  }
574
574
 
575
- array_free(&html_element_node->body);
575
+ hb_array_free(&html_element_node->body);
576
576
  }
577
577
  ast_node_free((AST_NODE_T*) html_element_node->close_tag);
578
578
 
@@ -582,12 +582,12 @@ static void ast_free_html_element_node(AST_HTML_ELEMENT_NODE_T* html_element_nod
582
582
  static void ast_free_html_attribute_value_node(AST_HTML_ATTRIBUTE_VALUE_NODE_T* html_attribute_value_node) {
583
583
  if (html_attribute_value_node->open_quote != NULL) { token_free(html_attribute_value_node->open_quote); }
584
584
  if (html_attribute_value_node->children != NULL) {
585
- for (size_t i = 0; i < array_size(html_attribute_value_node->children); i++) {
586
- 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);
587
587
  if (child) { ast_node_free(child); }
588
588
  }
589
589
 
590
- array_free(&html_attribute_value_node->children);
590
+ hb_array_free(&html_attribute_value_node->children);
591
591
  }
592
592
  if (html_attribute_value_node->close_quote != NULL) { token_free(html_attribute_value_node->close_quote); }
593
593
 
@@ -596,12 +596,12 @@ static void ast_free_html_attribute_value_node(AST_HTML_ATTRIBUTE_VALUE_NODE_T*
596
596
 
597
597
  static void ast_free_html_attribute_name_node(AST_HTML_ATTRIBUTE_NAME_NODE_T* html_attribute_name_node) {
598
598
  if (html_attribute_name_node->children != NULL) {
599
- for (size_t i = 0; i < array_size(html_attribute_name_node->children); i++) {
600
- 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);
601
601
  if (child) { ast_node_free(child); }
602
602
  }
603
603
 
604
- array_free(&html_attribute_name_node->children);
604
+ hb_array_free(&html_attribute_name_node->children);
605
605
  }
606
606
 
607
607
  ast_free_base_node(&html_attribute_name_node->base);
@@ -624,12 +624,12 @@ static void ast_free_html_text_node(AST_HTML_TEXT_NODE_T* html_text_node) {
624
624
  static void ast_free_html_comment_node(AST_HTML_COMMENT_NODE_T* html_comment_node) {
625
625
  if (html_comment_node->comment_start != NULL) { token_free(html_comment_node->comment_start); }
626
626
  if (html_comment_node->children != NULL) {
627
- for (size_t i = 0; i < array_size(html_comment_node->children); i++) {
628
- 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);
629
629
  if (child) { ast_node_free(child); }
630
630
  }
631
631
 
632
- array_free(&html_comment_node->children);
632
+ hb_array_free(&html_comment_node->children);
633
633
  }
634
634
  if (html_comment_node->comment_end != NULL) { token_free(html_comment_node->comment_end); }
635
635
 
@@ -639,12 +639,12 @@ static void ast_free_html_comment_node(AST_HTML_COMMENT_NODE_T* html_comment_nod
639
639
  static void ast_free_html_doctype_node(AST_HTML_DOCTYPE_NODE_T* html_doctype_node) {
640
640
  if (html_doctype_node->tag_opening != NULL) { token_free(html_doctype_node->tag_opening); }
641
641
  if (html_doctype_node->children != NULL) {
642
- for (size_t i = 0; i < array_size(html_doctype_node->children); i++) {
643
- 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);
644
644
  if (child) { ast_node_free(child); }
645
645
  }
646
646
 
647
- array_free(&html_doctype_node->children);
647
+ hb_array_free(&html_doctype_node->children);
648
648
  }
649
649
  if (html_doctype_node->tag_closing != NULL) { token_free(html_doctype_node->tag_closing); }
650
650
 
@@ -654,12 +654,12 @@ static void ast_free_html_doctype_node(AST_HTML_DOCTYPE_NODE_T* html_doctype_nod
654
654
  static void ast_free_xml_declaration_node(AST_XML_DECLARATION_NODE_T* xml_declaration_node) {
655
655
  if (xml_declaration_node->tag_opening != NULL) { token_free(xml_declaration_node->tag_opening); }
656
656
  if (xml_declaration_node->children != NULL) {
657
- for (size_t i = 0; i < array_size(xml_declaration_node->children); i++) {
658
- 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);
659
659
  if (child) { ast_node_free(child); }
660
660
  }
661
661
 
662
- array_free(&xml_declaration_node->children);
662
+ hb_array_free(&xml_declaration_node->children);
663
663
  }
664
664
  if (xml_declaration_node->tag_closing != NULL) { token_free(xml_declaration_node->tag_closing); }
665
665
 
@@ -669,12 +669,12 @@ static void ast_free_xml_declaration_node(AST_XML_DECLARATION_NODE_T* xml_declar
669
669
  static void ast_free_cdata_node(AST_CDATA_NODE_T* cdata_node) {
670
670
  if (cdata_node->tag_opening != NULL) { token_free(cdata_node->tag_opening); }
671
671
  if (cdata_node->children != NULL) {
672
- for (size_t i = 0; i < array_size(cdata_node->children); i++) {
673
- 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);
674
674
  if (child) { ast_node_free(child); }
675
675
  }
676
676
 
677
- array_free(&cdata_node->children);
677
+ hb_array_free(&cdata_node->children);
678
678
  }
679
679
  if (cdata_node->tag_closing != NULL) { token_free(cdata_node->tag_closing); }
680
680
 
@@ -711,12 +711,12 @@ static void ast_free_erb_else_node(AST_ERB_ELSE_NODE_T* erb_else_node) {
711
711
  if (erb_else_node->content != NULL) { token_free(erb_else_node->content); }
712
712
  if (erb_else_node->tag_closing != NULL) { token_free(erb_else_node->tag_closing); }
713
713
  if (erb_else_node->statements != NULL) {
714
- for (size_t i = 0; i < array_size(erb_else_node->statements); i++) {
715
- 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);
716
716
  if (child) { ast_node_free(child); }
717
717
  }
718
718
 
719
- array_free(&erb_else_node->statements);
719
+ hb_array_free(&erb_else_node->statements);
720
720
  }
721
721
 
722
722
  ast_free_base_node(&erb_else_node->base);
@@ -727,12 +727,12 @@ static void ast_free_erb_if_node(AST_ERB_IF_NODE_T* erb_if_node) {
727
727
  if (erb_if_node->content != NULL) { token_free(erb_if_node->content); }
728
728
  if (erb_if_node->tag_closing != NULL) { token_free(erb_if_node->tag_closing); }
729
729
  if (erb_if_node->statements != NULL) {
730
- for (size_t i = 0; i < array_size(erb_if_node->statements); i++) {
731
- 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);
732
732
  if (child) { ast_node_free(child); }
733
733
  }
734
734
 
735
- array_free(&erb_if_node->statements);
735
+ hb_array_free(&erb_if_node->statements);
736
736
  }
737
737
  ast_node_free((AST_NODE_T*) erb_if_node->subsequent);
738
738
  ast_node_free((AST_NODE_T*) erb_if_node->end_node);
@@ -745,12 +745,12 @@ static void ast_free_erb_block_node(AST_ERB_BLOCK_NODE_T* erb_block_node) {
745
745
  if (erb_block_node->content != NULL) { token_free(erb_block_node->content); }
746
746
  if (erb_block_node->tag_closing != NULL) { token_free(erb_block_node->tag_closing); }
747
747
  if (erb_block_node->body != NULL) {
748
- for (size_t i = 0; i < array_size(erb_block_node->body); i++) {
749
- 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);
750
750
  if (child) { ast_node_free(child); }
751
751
  }
752
752
 
753
- array_free(&erb_block_node->body);
753
+ hb_array_free(&erb_block_node->body);
754
754
  }
755
755
  ast_node_free((AST_NODE_T*) erb_block_node->end_node);
756
756
 
@@ -762,12 +762,12 @@ static void ast_free_erb_when_node(AST_ERB_WHEN_NODE_T* erb_when_node) {
762
762
  if (erb_when_node->content != NULL) { token_free(erb_when_node->content); }
763
763
  if (erb_when_node->tag_closing != NULL) { token_free(erb_when_node->tag_closing); }
764
764
  if (erb_when_node->statements != NULL) {
765
- for (size_t i = 0; i < array_size(erb_when_node->statements); i++) {
766
- 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);
767
767
  if (child) { ast_node_free(child); }
768
768
  }
769
769
 
770
- array_free(&erb_when_node->statements);
770
+ hb_array_free(&erb_when_node->statements);
771
771
  }
772
772
 
773
773
  ast_free_base_node(&erb_when_node->base);
@@ -778,20 +778,20 @@ static void ast_free_erb_case_node(AST_ERB_CASE_NODE_T* erb_case_node) {
778
778
  if (erb_case_node->content != NULL) { token_free(erb_case_node->content); }
779
779
  if (erb_case_node->tag_closing != NULL) { token_free(erb_case_node->tag_closing); }
780
780
  if (erb_case_node->children != NULL) {
781
- for (size_t i = 0; i < array_size(erb_case_node->children); i++) {
782
- 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);
783
783
  if (child) { ast_node_free(child); }
784
784
  }
785
785
 
786
- array_free(&erb_case_node->children);
786
+ hb_array_free(&erb_case_node->children);
787
787
  }
788
788
  if (erb_case_node->conditions != NULL) {
789
- for (size_t i = 0; i < array_size(erb_case_node->conditions); i++) {
790
- 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);
791
791
  if (child) { ast_node_free(child); }
792
792
  }
793
793
 
794
- array_free(&erb_case_node->conditions);
794
+ hb_array_free(&erb_case_node->conditions);
795
795
  }
796
796
  ast_node_free((AST_NODE_T*) erb_case_node->else_clause);
797
797
  ast_node_free((AST_NODE_T*) erb_case_node->end_node);
@@ -804,20 +804,20 @@ static void ast_free_erb_case_match_node(AST_ERB_CASE_MATCH_NODE_T* erb_case_mat
804
804
  if (erb_case_match_node->content != NULL) { token_free(erb_case_match_node->content); }
805
805
  if (erb_case_match_node->tag_closing != NULL) { token_free(erb_case_match_node->tag_closing); }
806
806
  if (erb_case_match_node->children != NULL) {
807
- for (size_t i = 0; i < array_size(erb_case_match_node->children); i++) {
808
- 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);
809
809
  if (child) { ast_node_free(child); }
810
810
  }
811
811
 
812
- array_free(&erb_case_match_node->children);
812
+ hb_array_free(&erb_case_match_node->children);
813
813
  }
814
814
  if (erb_case_match_node->conditions != NULL) {
815
- for (size_t i = 0; i < array_size(erb_case_match_node->conditions); i++) {
816
- 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);
817
817
  if (child) { ast_node_free(child); }
818
818
  }
819
819
 
820
- array_free(&erb_case_match_node->conditions);
820
+ hb_array_free(&erb_case_match_node->conditions);
821
821
  }
822
822
  ast_node_free((AST_NODE_T*) erb_case_match_node->else_clause);
823
823
  ast_node_free((AST_NODE_T*) erb_case_match_node->end_node);
@@ -830,12 +830,12 @@ static void ast_free_erb_while_node(AST_ERB_WHILE_NODE_T* erb_while_node) {
830
830
  if (erb_while_node->content != NULL) { token_free(erb_while_node->content); }
831
831
  if (erb_while_node->tag_closing != NULL) { token_free(erb_while_node->tag_closing); }
832
832
  if (erb_while_node->statements != NULL) {
833
- for (size_t i = 0; i < array_size(erb_while_node->statements); i++) {
834
- 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);
835
835
  if (child) { ast_node_free(child); }
836
836
  }
837
837
 
838
- array_free(&erb_while_node->statements);
838
+ hb_array_free(&erb_while_node->statements);
839
839
  }
840
840
  ast_node_free((AST_NODE_T*) erb_while_node->end_node);
841
841
 
@@ -847,12 +847,12 @@ static void ast_free_erb_until_node(AST_ERB_UNTIL_NODE_T* erb_until_node) {
847
847
  if (erb_until_node->content != NULL) { token_free(erb_until_node->content); }
848
848
  if (erb_until_node->tag_closing != NULL) { token_free(erb_until_node->tag_closing); }
849
849
  if (erb_until_node->statements != NULL) {
850
- for (size_t i = 0; i < array_size(erb_until_node->statements); i++) {
851
- 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);
852
852
  if (child) { ast_node_free(child); }
853
853
  }
854
854
 
855
- array_free(&erb_until_node->statements);
855
+ hb_array_free(&erb_until_node->statements);
856
856
  }
857
857
  ast_node_free((AST_NODE_T*) erb_until_node->end_node);
858
858
 
@@ -864,12 +864,12 @@ static void ast_free_erb_for_node(AST_ERB_FOR_NODE_T* erb_for_node) {
864
864
  if (erb_for_node->content != NULL) { token_free(erb_for_node->content); }
865
865
  if (erb_for_node->tag_closing != NULL) { token_free(erb_for_node->tag_closing); }
866
866
  if (erb_for_node->statements != NULL) {
867
- for (size_t i = 0; i < array_size(erb_for_node->statements); i++) {
868
- 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);
869
869
  if (child) { ast_node_free(child); }
870
870
  }
871
871
 
872
- array_free(&erb_for_node->statements);
872
+ hb_array_free(&erb_for_node->statements);
873
873
  }
874
874
  ast_node_free((AST_NODE_T*) erb_for_node->end_node);
875
875
 
@@ -881,12 +881,12 @@ static void ast_free_erb_rescue_node(AST_ERB_RESCUE_NODE_T* erb_rescue_node) {
881
881
  if (erb_rescue_node->content != NULL) { token_free(erb_rescue_node->content); }
882
882
  if (erb_rescue_node->tag_closing != NULL) { token_free(erb_rescue_node->tag_closing); }
883
883
  if (erb_rescue_node->statements != NULL) {
884
- for (size_t i = 0; i < array_size(erb_rescue_node->statements); i++) {
885
- 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);
886
886
  if (child) { ast_node_free(child); }
887
887
  }
888
888
 
889
- array_free(&erb_rescue_node->statements);
889
+ hb_array_free(&erb_rescue_node->statements);
890
890
  }
891
891
  ast_node_free((AST_NODE_T*) erb_rescue_node->subsequent);
892
892
 
@@ -898,12 +898,12 @@ static void ast_free_erb_ensure_node(AST_ERB_ENSURE_NODE_T* erb_ensure_node) {
898
898
  if (erb_ensure_node->content != NULL) { token_free(erb_ensure_node->content); }
899
899
  if (erb_ensure_node->tag_closing != NULL) { token_free(erb_ensure_node->tag_closing); }
900
900
  if (erb_ensure_node->statements != NULL) {
901
- for (size_t i = 0; i < array_size(erb_ensure_node->statements); i++) {
902
- 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);
903
903
  if (child) { ast_node_free(child); }
904
904
  }
905
905
 
906
- array_free(&erb_ensure_node->statements);
906
+ hb_array_free(&erb_ensure_node->statements);
907
907
  }
908
908
 
909
909
  ast_free_base_node(&erb_ensure_node->base);
@@ -914,12 +914,12 @@ static void ast_free_erb_begin_node(AST_ERB_BEGIN_NODE_T* erb_begin_node) {
914
914
  if (erb_begin_node->content != NULL) { token_free(erb_begin_node->content); }
915
915
  if (erb_begin_node->tag_closing != NULL) { token_free(erb_begin_node->tag_closing); }
916
916
  if (erb_begin_node->statements != NULL) {
917
- for (size_t i = 0; i < array_size(erb_begin_node->statements); i++) {
918
- 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);
919
919
  if (child) { ast_node_free(child); }
920
920
  }
921
921
 
922
- array_free(&erb_begin_node->statements);
922
+ hb_array_free(&erb_begin_node->statements);
923
923
  }
924
924
  ast_node_free((AST_NODE_T*) erb_begin_node->rescue_clause);
925
925
  ast_node_free((AST_NODE_T*) erb_begin_node->else_clause);
@@ -934,12 +934,12 @@ static void ast_free_erb_unless_node(AST_ERB_UNLESS_NODE_T* erb_unless_node) {
934
934
  if (erb_unless_node->content != NULL) { token_free(erb_unless_node->content); }
935
935
  if (erb_unless_node->tag_closing != NULL) { token_free(erb_unless_node->tag_closing); }
936
936
  if (erb_unless_node->statements != NULL) {
937
- for (size_t i = 0; i < array_size(erb_unless_node->statements); i++) {
938
- 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);
939
939
  if (child) { ast_node_free(child); }
940
940
  }
941
941
 
942
- array_free(&erb_unless_node->statements);
942
+ hb_array_free(&erb_unless_node->statements);
943
943
  }
944
944
  ast_node_free((AST_NODE_T*) erb_unless_node->else_clause);
945
945
  ast_node_free((AST_NODE_T*) erb_unless_node->end_node);
@@ -960,12 +960,12 @@ static void ast_free_erb_in_node(AST_ERB_IN_NODE_T* erb_in_node) {
960
960
  if (erb_in_node->content != NULL) { token_free(erb_in_node->content); }
961
961
  if (erb_in_node->tag_closing != NULL) { token_free(erb_in_node->tag_closing); }
962
962
  if (erb_in_node->statements != NULL) {
963
- for (size_t i = 0; i < array_size(erb_in_node->statements); i++) {
964
- 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);
965
965
  if (child) { ast_node_free(child); }
966
966
  }
967
967
 
968
- array_free(&erb_in_node->statements);
968
+ hb_array_free(&erb_in_node->statements);
969
969
  }
970
970
 
971
971
  ast_free_base_node(&erb_in_node->base);