X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=parser.cpp;h=9345760ad2d83b3e4825dbe7fb3d729e40f0cbcc;hb=0904a1ceb7bc4da1adde4604e4c1e207adc48851;hp=1404273735d83f2e1f2c583e5d4905b3231008d3;hpb=e006aa82388218f0f18e93087217d1aa0c2cee83;p=xonotic%2Fgmqcc.git diff --git a/parser.cpp b/parser.cpp index 1404273..9345760 100644 --- a/parser.cpp +++ b/parser.cpp @@ -156,7 +156,7 @@ static ast_expression* parser_find_var(parser_t *parser, const char *name) { bool dummy; ast_expression *v; - v = parser_find_local(parser, name, 0, &dummy); + v = parser_find_local(parser, name, PARSER_HT_LOCALS, &dummy); if (!v) v = parser_find_global(parser, name); return v; } @@ -1188,6 +1188,12 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy) static bool parser_close_call(parser_t *parser, shunt *sy) { + if (!parser->function) + { + parseerror(parser, "cannot call functions from global scope"); + return false; + } + /* was a function call */ ast_expression *fun; ast_value *funval = nullptr; @@ -2757,6 +2763,7 @@ static bool parse_qualifiers(parser_t *parser, bool with_local, int *cvq, bool * { "noreturn", AST_FLAG_NORETURN }, { "inline", AST_FLAG_INLINE }, { "eraseable", AST_FLAG_ERASEABLE }, + { "noerase", AST_FLAG_NOERASE }, { "accumulate", AST_FLAG_ACCUMULATE }, { "last", AST_FLAG_FINAL_DECL } }; @@ -2790,7 +2797,6 @@ static bool parse_qualifiers(parser_t *parser, bool with_local, int *cvq, bool * if (i != GMQCC_ARRAY_COUNT(attributes)) goto leave; - if (!strcmp(parser_tokval(parser), "noref")) { had_noref = true; if (!parser_next(parser) || parser->tok != TOKEN_ATTRIBUTE_CLOSE) { @@ -5191,8 +5197,7 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield * store the vstring back to var for alias and * deprecation messages. */ - if (var->m_flags & AST_FLAG_DEPRECATED || - var->m_flags & AST_FLAG_ALIAS) + if (var->m_flags & AST_FLAG_DEPRECATED || var->m_flags & AST_FLAG_ALIAS) var->m_desc = vstring; if (parser_find_global(parser, var->m_name) && var->m_flags & AST_FLAG_ALIAS) {