aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-02-01 17:25:38 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-02-01 17:25:38 -0700
commit06f6acb4b19cab55dd8637a41c11501bf8e7158e (patch)
tree9d8226f9f2128a91b3038d9b6d739c3b36ee15cf /src/analyze.cpp
parent122b7b99660f2ce354930749ca545b363bf7849d (diff)
downloadzig-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.cpp45
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;