| author | |
| committer | |
| log | fcedc35551cc6b14756499414e47c33004de3be4 |
| tree | feb34b0985b29f45073ac81e21982a368e0a3542 |
| parent | 83a59c4d077ead78a8c0ccecf8d4f7970309bf76 |
4 files changed, 22 insertions(+), 5 deletions(-)
src/ast_render.cpp+6-2| ... | @@ -326,9 +326,9 @@ static void render_node(AstRender *ar, AstNode *node) { | ... | @@ -326,9 +326,9 @@ static void render_node(AstRender *ar, AstNode *node) { |
| 326 | AstNode *statement = node->data.block.statements.at(i); | 326 | AstNode *statement = node->data.block.statements.at(i); |
| 327 | print_indent(ar); | 327 | print_indent(ar); |
| 328 | render_node(ar, statement); | 328 | render_node(ar, statement); |
| 329 | fprintf(ar->f, ";\n"); | ||
| 329 | } | 330 | } |
| 330 | ar->indent -= ar->indent_size; | 331 | ar->indent -= ar->indent_size; |
| 331 | fprintf(ar->f, "\n"); | ||
| 332 | print_indent(ar); | 332 | print_indent(ar); |
| 333 | fprintf(ar->f, "}"); | 333 | fprintf(ar->f, "}"); |
| 334 | break; | 334 | break; |
| ... | @@ -438,7 +438,11 @@ static void render_node(AstRender *ar, AstNode *node) { | ... | @@ -438,7 +438,11 @@ static void render_node(AstRender *ar, AstNode *node) { |
| 438 | fprintf(ar->f, ")"); | 438 | fprintf(ar->f, ")"); |
| 439 | break; | 439 | break; |
| 440 | case NodeTypeArrayAccessExpr: | 440 | case NodeTypeArrayAccessExpr: |
| 441 | zig_panic("TODO"); | 441 | render_node(ar, node->data.array_access_expr.array_ref_expr); |
| 442 | fprintf(ar->f, "["); | ||
| 443 | render_node(ar, node->data.array_access_expr.subscript); | ||
| 444 | fprintf(ar->f, "]"); | ||
| 445 | break; | ||
| 442 | case NodeTypeSliceExpr: | 446 | case NodeTypeSliceExpr: |
| 443 | zig_panic("TODO"); | 447 | zig_panic("TODO"); |
| 444 | case NodeTypeFieldAccessExpr: | 448 | case NodeTypeFieldAccessExpr: |
src/parser.cpp+4-2| ... | @@ -2927,6 +2927,7 @@ static void clone_subtree_list(ZigList<AstNode *> *dest, ZigList<AstNode *> *src | ... | @@ -2927,6 +2927,7 @@ static void clone_subtree_list(ZigList<AstNode *> *dest, ZigList<AstNode *> *src |
| 2927 | dest->resize(src->length); | 2927 | dest->resize(src->length); |
| 2928 | for (int i = 0; i < src->length; i += 1) { | 2928 | for (int i = 0; i < src->length; i += 1) { |
| 2929 | dest->at(i) = ast_clone_subtree(src->at(i), next_node_index); | 2929 | dest->at(i) = ast_clone_subtree(src->at(i), next_node_index); |
| 2930 | dest->at(i)->parent_field = &dest->at(i); | ||
| 2930 | } | 2931 | } |
| 2931 | } | 2932 | } |
| 2932 | 2933 | ||
| ... | @@ -2958,11 +2959,12 @@ AstNode *ast_clone_subtree(AstNode *old_node, uint32_t *next_node_index) { | ... | @@ -2958,11 +2959,12 @@ AstNode *ast_clone_subtree(AstNode *old_node, uint32_t *next_node_index) { |
| 2958 | memcpy(new_node, old_node, sizeof(AstNode)); | 2959 | memcpy(new_node, old_node, sizeof(AstNode)); |
| 2959 | new_node->create_index = *next_node_index; | 2960 | new_node->create_index = *next_node_index; |
| 2960 | *next_node_index += 1; | 2961 | *next_node_index += 1; |
| 2962 | new_node->parent_field = nullptr; | ||
| 2961 | 2963 | ||
| 2962 | switch (new_node->type) { | 2964 | switch (new_node->type) { |
| 2963 | case NodeTypeRoot: | 2965 | case NodeTypeRoot: |
| 2964 | clone_subtree_list(&new_node->data.root.top_level_decls, &old_node->data.root.top_level_decls, | 2966 | clone_subtree_list(&new_node->data.root.top_level_decls, |
| 2965 | next_node_index); | 2967 | &old_node->data.root.top_level_decls, next_node_index); |
| 2966 | break; | 2968 | break; |
| 2967 | case NodeTypeFnProto: | 2969 | case NodeTypeFnProto: |
| 2968 | clone_subtree_tld(&new_node->data.fn_proto.top_level_decl, &old_node->data.fn_proto.top_level_decl, | 2970 | clone_subtree_tld(&new_node->data.fn_proto.top_level_decl, &old_node->data.fn_proto.top_level_decl, |
test/run_tests.cpp+1-1| ... | @@ -1667,7 +1667,7 @@ extern void (*fn_ptr)(void); | ... | @@ -1667,7 +1667,7 @@ extern void (*fn_ptr)(void); |
| 1667 | )SOURCE", 2, | 1667 | )SOURCE", 2, |
| 1668 | "pub extern var fn_ptr: ?extern fn();", | 1668 | "pub extern var fn_ptr: ?extern fn();", |
| 1669 | R"SOURCE(pub inline fn foo() { | 1669 | R"SOURCE(pub inline fn foo() { |
| 1670 | (??fn_ptr)() | 1670 | (??fn_ptr)(); |
| 1671 | })SOURCE"); | 1671 | })SOURCE"); |
| 1672 | 1672 | ||
| 1673 | 1673 |
test/self_hosted.zig+11| ... | @@ -975,3 +975,14 @@ pub fn vec3(x: f32, y: f32, z: f32) -> Vec3 { | ... | @@ -975,3 +975,14 @@ pub fn vec3(x: f32, y: f32, z: f32) -> Vec3 { |
| 975 | .data = []f32 { x, y, z, }, | 975 | .data = []f32 { x, y, z, }, |
| 976 | } | 976 | } |
| 977 | } | 977 | } |
| 978 | |||
| 979 | |||
| 980 | #attribute("test") | ||
| 981 | fn generic_fn_with_implicit_cast() { | ||
| 982 | assert(get_first_byte(u8)([]u8 {13}) == 13); | ||
| 983 | assert(get_first_byte(u16)([]u16 {0, 13}) == 0); | ||
| 984 | } | ||
| 985 | fn get_byte(ptr: ?&u8) -> u8 {*??ptr} | ||
| 986 | fn get_first_byte(T: type)(mem: []T) -> u8 { | ||
| 987 | get_byte((&u8)(&mem[0])) | ||
| 988 | } |