aboutsummaryrefslogtreecommitdiff
path: root/src/ast_render.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-12-19 02:44:14 -0500
committerAndrew Kelley <superjoe30@gmail.com>2017-12-19 02:44:14 -0500
commit2a8160e80fc0a03700b83ac9a715f97d1d637f02 (patch)
treeddaac9739e20717789574db9c200151dfb32a96c /src/ast_render.cpp
parent3f658879740e3f7aee05be33532b5ba9aaa316bf (diff)
parent9d9201c3b48873e432dc6824d42b5ca96b236daa (diff)
downloadzig-2a8160e80fc0a03700b83ac9a715f97d1d637f02.tar.gz
zig-2a8160e80fc0a03700b83ac9a715f97d1d637f02.zip
Merge branch 'export-rewrite'
introduces the `@export` builtin function which can be used in a comptime block to conditionally export a function. it also allows creation of aliases. previous export syntax is still allowed. closes #462 closes #420
Diffstat (limited to 'src/ast_render.cpp')
-rw-r--r--src/ast_render.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/ast_render.cpp b/src/ast_render.cpp
index d6a23e5f85..c22c16d90a 100644
--- a/src/ast_render.cpp
+++ b/src/ast_render.cpp
@@ -78,7 +78,6 @@ static const char *visib_mod_string(VisibMod mod) {
switch (mod) {
case VisibModPub: return "pub ";
case VisibModPrivate: return "";
- case VisibModExport: return "export ";
}
zig_unreachable();
}
@@ -112,6 +111,10 @@ static const char *extern_string(bool is_extern) {
return is_extern ? "extern " : "";
}
+static const char *export_string(bool is_export) {
+ return is_export ? "export " : "";
+}
+
//static const char *calling_convention_string(CallingConvention cc) {
// switch (cc) {
// case CallingConventionUnspecified: return "";
@@ -411,8 +414,9 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
{
const char *pub_str = visib_mod_string(node->data.fn_proto.visib_mod);
const char *extern_str = extern_string(node->data.fn_proto.is_extern);
+ const char *export_str = export_string(node->data.fn_proto.is_export);
const char *inline_str = inline_string(node->data.fn_proto.is_inline);
- fprintf(ar->f, "%s%s%sfn", pub_str, inline_str, extern_str);
+ fprintf(ar->f, "%s%s%s%sfn", pub_str, inline_str, export_str, extern_str);
if (node->data.fn_proto.name != nullptr) {
fprintf(ar->f, " ");
print_symbol(ar, node->data.fn_proto.name);
@@ -440,6 +444,16 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
}
}
fprintf(ar->f, ")");
+ if (node->data.fn_proto.align_expr) {
+ fprintf(ar->f, " align(");
+ render_node_grouped(ar, node->data.fn_proto.align_expr);
+ fprintf(ar->f, ")");
+ }
+ if (node->data.fn_proto.section_expr) {
+ fprintf(ar->f, " section(");
+ render_node_grouped(ar, node->data.fn_proto.section_expr);
+ fprintf(ar->f, ")");
+ }
AstNode *return_type_node = node->data.fn_proto.return_type;
if (return_type_node != nullptr) {
@@ -526,6 +540,16 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
fprintf(ar->f, ": ");
render_node_grouped(ar, node->data.variable_declaration.type);
}
+ if (node->data.variable_declaration.align_expr) {
+ fprintf(ar->f, "align(");
+ render_node_grouped(ar, node->data.variable_declaration.align_expr);
+ fprintf(ar->f, ") ");
+ }
+ if (node->data.variable_declaration.section_expr) {
+ fprintf(ar->f, "section(");
+ render_node_grouped(ar, node->data.variable_declaration.section_expr);
+ fprintf(ar->f, ") ");
+ }
if (node->data.variable_declaration.expr) {
fprintf(ar->f, " = ");
render_node_grouped(ar, node->data.variable_declaration.expr);