diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-02-01 17:25:38 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-02-01 17:25:38 -0700 |
| commit | 06f6acb4b19cab55dd8637a41c11501bf8e7158e (patch) | |
| tree | 9d8226f9f2128a91b3038d9b6d739c3b36ee15cf /src/analyze.cpp | |
| parent | 122b7b99660f2ce354930749ca545b363bf7849d (diff) | |
| download | zig-06f6acb4b19cab55dd8637a41c11501bf8e7158e.tar.gz zig-06f6acb4b19cab55dd8637a41c11501bf8e7158e.zip | |
inline is a keyword instead of a directive
Diffstat (limited to 'src/analyze.cpp')
| -rw-r--r-- | src/analyze.cpp | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp index be67b9c933..c9123912fe 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -714,29 +714,32 @@ static void resolve_function_proto(CodeGen *g, AstNode *node, FnTableEntry *fn_t return; } + fn_table_entry->is_inline = fn_proto->is_inline; + bool is_naked = false; - for (int i = 0; i < fn_proto->directives->length; i += 1) { - AstNode *directive_node = fn_proto->directives->at(i); - Buf *name = &directive_node->data.directive.name; - - if (buf_eql_str(name, "attribute")) { - Buf *attr_name = &directive_node->data.directive.param; - if (fn_table_entry->fn_def_node) { - if (buf_eql_str(attr_name, "naked")) { - is_naked = true; - } else if (buf_eql_str(attr_name, "inline")) { - fn_table_entry->is_inline = true; + + if (fn_proto->directives) { + for (int i = 0; i < fn_proto->directives->length; i += 1) { + AstNode *directive_node = fn_proto->directives->at(i); + Buf *name = &directive_node->data.directive.name; + + if (buf_eql_str(name, "attribute")) { + Buf *attr_name = &directive_node->data.directive.param; + if (fn_table_entry->fn_def_node) { + if (buf_eql_str(attr_name, "naked")) { + is_naked = true; + } else { + add_node_error(g, directive_node, + buf_sprintf("invalid function attribute: '%s'", buf_ptr(name))); + } } else { add_node_error(g, directive_node, buf_sprintf("invalid function attribute: '%s'", buf_ptr(name))); } } else { add_node_error(g, directive_node, - buf_sprintf("invalid function attribute: '%s'", buf_ptr(name))); + buf_sprintf("invalid directive: '%s'", buf_ptr(name))); } - } else { - add_node_error(g, directive_node, - buf_sprintf("invalid directive: '%s'", buf_ptr(name))); } } @@ -5174,11 +5177,13 @@ void semantic_analyze(CodeGen *g) { for (int i = 0; i < import->root->data.root.top_level_decls.length; i += 1) { AstNode *child = import->root->data.root.top_level_decls.at(i); if (child->type == NodeTypeImport) { - for (int i = 0; i < child->data.import.directives->length; i += 1) { - AstNode *directive_node = child->data.import.directives->at(i); - Buf *name = &directive_node->data.directive.name; - add_node_error(g, directive_node, - buf_sprintf("invalid directive: '%s'", buf_ptr(name))); + if (child->data.import.directives) { + for (int i = 0; i < child->data.import.directives->length; i += 1) { + AstNode *directive_node = child->data.import.directives->at(i); + Buf *name = &directive_node->data.directive.name; + add_node_error(g, directive_node, + buf_sprintf("invalid directive: '%s'", buf_ptr(name))); + } } ImportTableEntry *target_import = child->data.import.import; |
