diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-02-01 02:00:25 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-02-01 02:00:25 -0700 |
| commit | b3459f64e795118c4c12890ed0fec75638b74a2c (patch) | |
| tree | d5730790d1b61f71a606e30023d68cc36071cce4 /src/ast_render.cpp | |
| parent | 6b2e29c6ac58d5f4370828bfa0f54b83d1931a97 (diff) | |
| download | zig-b3459f64e795118c4c12890ed0fec75638b74a2c.tar.gz zig-b3459f64e795118c4c12890ed0fec75638b74a2c.zip | |
parseh understands macros which alias global fn ptr vars
Diffstat (limited to 'src/ast_render.cpp')
| -rw-r--r-- | src/ast_render.cpp | 60 |
1 files changed, 53 insertions, 7 deletions
diff --git a/src/ast_render.cpp b/src/ast_render.cpp index cebacaa0f7..a09b4c52be 100644 --- a/src/ast_render.cpp +++ b/src/ast_render.cpp @@ -582,15 +582,34 @@ static void render_node(AstRender *ar, AstNode *node) { break; } case NodeTypeFnDef: - zig_panic("TODO"); + for (int i = 0; i < node->data.fn_def.fn_proto->data.fn_proto.directives->length; i += 1) { + render_node(ar, node->data.fn_def.fn_proto->data.fn_proto.directives->at(i)); + } + render_node(ar, node->data.fn_def.fn_proto); + fprintf(ar->f, " "); + render_node(ar, node->data.fn_def.body); + break; case NodeTypeFnDecl: zig_panic("TODO"); case NodeTypeParamDecl: zig_panic("TODO"); case NodeTypeBlock: - zig_panic("TODO"); + fprintf(ar->f, "{\n"); + ar->indent += ar->indent_size; + for (int i = 0; i < node->data.block.statements.length; i += 1) { + AstNode *statement = node->data.block.statements.at(i); + print_indent(ar); + render_node(ar, statement); + } + ar->indent -= ar->indent_size; + fprintf(ar->f, "\n"); + print_indent(ar); + fprintf(ar->f, "}"); + break; case NodeTypeDirective: - zig_panic("TODO"); + fprintf(ar->f, "#%s(\"%s\")\n", buf_ptr(&node->data.directive.name), + buf_ptr(&node->data.directive.param)); + break; case NodeTypeReturnExpr: zig_panic("TODO"); case NodeTypeVariableDeclaration: @@ -621,7 +640,12 @@ static void render_node(AstRender *ar, AstNode *node) { case NodeTypeErrorValueDecl: zig_panic("TODO"); case NodeTypeBinOpExpr: - zig_panic("TODO"); + fprintf(ar->f, "("); + render_node(ar, node->data.bin_op_expr.op1); + fprintf(ar->f, " %s ", bin_op_str(node->data.bin_op_expr.bin_op)); + render_node(ar, node->data.bin_op_expr.op2); + fprintf(ar->f, ")"); + break; case NodeTypeUnwrapErrorExpr: zig_panic("TODO"); case NodeTypeNumberLiteral: @@ -635,7 +659,11 @@ static void render_node(AstRender *ar, AstNode *node) { } break; case NodeTypeStringLiteral: - zig_panic("TODO"); + if (node->data.string_literal.c) { + fprintf(ar->f, "c"); + } + fprintf(ar->f, "\"%s\"", buf_ptr(&node->data.string_literal.buf)); + break; case NodeTypeCharLiteral: { uint8_t c = node->data.char_literal.value; @@ -665,7 +693,20 @@ static void render_node(AstRender *ar, AstNode *node) { break; } case NodeTypeFnCallExpr: - zig_panic("TODO"); + if (node->data.fn_call_expr.is_builtin) { + fprintf(ar->f, "@"); + } + render_node(ar, node->data.fn_call_expr.fn_ref_expr); + fprintf(ar->f, "("); + for (int i = 0; i < node->data.fn_call_expr.params.length; i += 1) { + AstNode *param = node->data.fn_call_expr.params.at(i); + if (i != 0) { + fprintf(ar->f, ", "); + } + render_node(ar, param); + } + fprintf(ar->f, ")"); + break; case NodeTypeArrayAccessExpr: zig_panic("TODO"); case NodeTypeSliceExpr: @@ -739,7 +780,12 @@ static void render_node(AstRender *ar, AstNode *node) { case NodeTypeStructField: zig_panic("TODO"); case NodeTypeContainerInitExpr: - zig_panic("TODO"); + fprintf(ar->f, "("); + render_node(ar, node->data.container_init_expr.type); + fprintf(ar->f, "){"); + assert(node->data.container_init_expr.entries.length == 0); + fprintf(ar->f, "}"); + break; case NodeTypeStructValueField: zig_panic("TODO"); case NodeTypeArrayType: |
