X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=parser.cpp;h=9345760ad2d83b3e4825dbe7fb3d729e40f0cbcc;hp=c795e40a39c9c6dd6e8354b5a76e6d83ea394c0e;hb=c74fabffda68fb97716afe9d70744a071f717795;hpb=e920766b10ebed3fc7fad0373aab6dde507e2341 diff --git a/parser.cpp b/parser.cpp index c795e40..9345760 100644 --- a/parser.cpp +++ b/parser.cpp @@ -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) {