aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-04-14 10:39:03 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-04-14 10:39:03 -0700
commitfcedc35551cc6b14756499414e47c33004de3be4 (patch)
treefeb34b0985b29f45073ac81e21982a368e0a3542 /src
parent83a59c4d077ead78a8c0ccecf8d4f7970309bf76 (diff)
downloadzig-fcedc35551cc6b14756499414e47c33004de3be4.tar.gz
zig-fcedc35551cc6b14756499414e47c33004de3be4.zip
fix crash with generic function and implicit cast
Diffstat (limited to 'src')
-rw-r--r--src/ast_render.cpp8
-rw-r--r--src/parser.cpp6
2 files changed, 10 insertions, 4 deletions
diff --git a/src/ast_render.cpp b/src/ast_render.cpp
index 59a287b886..6b88579b49 100644
--- a/src/ast_render.cpp
+++ b/src/ast_render.cpp
@@ -326,9 +326,9 @@ static void render_node(AstRender *ar, AstNode *node) {
AstNode *statement = node->data.block.statements.at(i);
print_indent(ar);
render_node(ar, statement);
+ fprintf(ar->f, ";\n");
}
ar->indent -= ar->indent_size;
- fprintf(ar->f, "\n");
print_indent(ar);
fprintf(ar->f, "}");
break;
@@ -438,7 +438,11 @@ static void render_node(AstRender *ar, AstNode *node) {
fprintf(ar->f, ")");
break;
case NodeTypeArrayAccessExpr:
- zig_panic("TODO");
+ render_node(ar, node->data.array_access_expr.array_ref_expr);
+ fprintf(ar->f, "[");
+ render_node(ar, node->data.array_access_expr.subscript);
+ fprintf(ar->f, "]");
+ break;
case NodeTypeSliceExpr:
zig_panic("TODO");
case NodeTypeFieldAccessExpr:
diff --git a/src/parser.cpp b/src/parser.cpp
index 650a7e614d..0bd2f57830 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -2927,6 +2927,7 @@ static void clone_subtree_list(ZigList<AstNode *> *dest, ZigList<AstNode *> *src
dest->resize(src->length);
for (int i = 0; i < src->length; i += 1) {
dest->at(i) = ast_clone_subtree(src->at(i), next_node_index);
+ dest->at(i)->parent_field = &dest->at(i);
}
}
@@ -2958,11 +2959,12 @@ AstNode *ast_clone_subtree(AstNode *old_node, uint32_t *next_node_index) {
memcpy(new_node, old_node, sizeof(AstNode));
new_node->create_index = *next_node_index;
*next_node_index += 1;
+ new_node->parent_field = nullptr;
switch (new_node->type) {
case NodeTypeRoot:
- clone_subtree_list(&new_node->data.root.top_level_decls, &old_node->data.root.top_level_decls,
- next_node_index);
+ clone_subtree_list(&new_node->data.root.top_level_decls,
+ &old_node->data.root.top_level_decls, next_node_index);
break;
case NodeTypeFnProto:
clone_subtree_tld(&new_node->data.fn_proto.top_level_decl, &old_node->data.fn_proto.top_level_decl,