]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - parser.c
Remove license headers. The LICENSE file is sufficent
[xonotic/gmqcc.git] / parser.c
index 4a09583593a97c5cebe19090d9f5368e7ed89e7e..0370146d5dde882e6332f3ee67b011c796034093 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -1,26 +1,3 @@
-/*
- * Copyright (C) 2012, 2013, 2014
- *     Wolfgang Bumiller
- *     Dale Weiler
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
 #include <string.h>
 #include <math.h>
 
@@ -426,18 +403,7 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
                 return false;
             }
             out = (ast_expression*)ast_array_index_new(ctx, exprs[0], exprs[1]);
-            if (rotate_entfield_array_index_nodes(&out))
-            {
-#if 0
-                /* This is not broken in fteqcc anymore */
-                if (OPTS_OPTION_U32(OPTION_STANDARD) != COMPILER_GMQCC) {
-                    /* this error doesn't need to make us bail out */
-                    (void)!parsewarning(parser, WARN_EXTENSIONS,
-                                        "accessing array-field members of an entity without parenthesis\n"
-                                        " -> this is an extension from -std=gmqcc");
-                }
-#endif
-            }
+            rotate_entfield_array_index_nodes(&out);
             break;
 
         case opid1(','):
@@ -1653,9 +1619,6 @@ static bool parse_sya_operand(parser_t *parser, shunt *sy, bool with_labels)
 
 
             if (!var) {
-                char *correct = NULL;
-                size_t i;
-
                 /*
                  * sometimes people use preprocessing predefs without enabling them
                  * i've done this thousands of times already myself.  Lets check for
@@ -1666,34 +1629,6 @@ static bool parse_sya_operand(parser_t *parser, shunt *sy, bool with_labels)
                     return false;
                 }
 
-                /*
-                 * TODO: determine the best score for the identifier: be it
-                 * a variable, a field.
-                 *
-                 * We should also consider adding correction tables for
-                 * other things as well.
-                 */
-                if (OPTS_OPTION_BOOL(OPTION_CORRECTION) && strlen(parser_tokval(parser)) <= 16) {
-                    correction_t corr;
-                    correct_init(&corr);
-
-                    for (i = 0; i < vec_size(parser->correct_variables); i++) {
-                        correct = correct_str(&corr, parser->correct_variables[i], parser_tokval(parser));
-                        if (strcmp(correct, parser_tokval(parser))) {
-                            break;
-                        } else  {
-                            mem_d(correct);
-                            correct = NULL;
-                        }
-                    }
-                    correct_free(&corr);
-
-                    if (correct) {
-                        parseerror(parser, "unexpected identifier: %s (did you mean %s?)", parser_tokval(parser), correct);
-                        mem_d(correct);
-                        return false;
-                    }
-                }
                 parseerror(parser, "unexpected identifier: %s", parser_tokval(parser));
                 return false;
             }
@@ -1946,10 +1881,6 @@ static ast_expression* parse_expression_leave(parser_t *parser, bool stopatcomma
         else if (!wantop) {
             if (!parse_sya_operand(parser, &sy, with_labels))
                 goto onerr;
-#if 0
-            if (vec_size(sy.paren) && vec_last(sy.ops).isparen && vec_last(sy.paren) == PAREN_FUNC)
-                vec_last(sy.argc)++;
-#endif
             wantop = true;
         }
         else {
@@ -2045,10 +1976,6 @@ static void parser_enterblock(parser_t *parser)
     vec_push(parser->typedefs, util_htnew(TYPEDEF_HT_SIZE));
     vec_push(parser->_blocktypedefs, vec_size(parser->_typedefs));
     vec_push(parser->_block_ctx, parser_ctx(parser));
-
-    /* corrector */
-    vec_push(parser->correct_variables, correct_trie_new());
-    vec_push(parser->correct_variables_score, NULL);
 }
 
 static bool parser_leaveblock(parser_t *parser)
@@ -2062,11 +1989,8 @@ static bool parser_leaveblock(parser_t *parser)
     }
 
     util_htdel(vec_last(parser->variables));
-    correct_del(vec_last(parser->correct_variables), vec_last(parser->correct_variables_score));
 
     vec_pop(parser->variables);
-    vec_pop(parser->correct_variables);
-    vec_pop(parser->correct_variables_score);
     if (!vec_size(parser->_blocklocals)) {
         parseerror(parser, "internal error: parser_leaveblock with no block (2)");
         return false;
@@ -2101,26 +2025,12 @@ static void parser_addlocal(parser_t *parser, const char *name, ast_expression *
 {
     vec_push(parser->_locals, e);
     util_htset(vec_last(parser->variables), name, (void*)e);
-
-    /* corrector */
-    correct_add (
-         vec_last(parser->correct_variables),
-        &vec_last(parser->correct_variables_score),
-        name
-    );
 }
 
 static void parser_addglobal(parser_t *parser, const char *name, ast_expression *e)
 {
     vec_push(parser->globals, e);
     util_htset(parser->htglobals, name, e);
-
-    /* corrector */
-    correct_add (
-         parser->correct_variables[0],
-        &parser->correct_variables_score[0],
-        name
-    );
 }
 
 static ast_expression* process_condition(parser_t *parser, ast_expression *cond, bool *_ifnot)
@@ -2573,13 +2483,6 @@ static bool parse_for_go(parser_t *parser, ast_block *block, ast_expression **ou
         typevar = parser_find_typedef(parser, parser_tokval(parser), 0);
 
     if (typevar || parser->tok == TOKEN_TYPENAME) {
-#if 0
-        if (OPTS_OPTION_U32(OPTION_STANDARD) != COMPILER_GMQCC) {
-            if (parsewarning(parser, WARN_EXTENSIONS,
-                             "current standard does not allow variable declarations in for-loop initializers"))
-                goto onerr;
-        }
-#endif
         if (!parse_variable(parser, block, true, CV_VAR, typevar, false, false, 0, NULL))
             goto onerr;
     }
@@ -2588,16 +2491,17 @@ static bool parse_for_go(parser_t *parser, ast_block *block, ast_expression **ou
         initexpr = parse_expression_leave(parser, false, false, false);
         if (!initexpr)
             goto onerr;
-    }
 
-    /* move on to condition */
-    if (parser->tok != ';') {
-        parseerror(parser, "expected semicolon after for-loop initializer");
-        goto onerr;
-    }
-    if (!parser_next(parser)) {
-        parseerror(parser, "expected for-loop condition");
-        goto onerr;
+        /* move on to condition */
+        if (parser->tok != ';') {
+            parseerror(parser, "expected semicolon after for-loop initializer");
+            goto onerr;
+        }
+
+        if (!parser_next(parser)) {
+            parseerror(parser, "expected for-loop condition");
+            goto onerr;
+        }
     }
 
     /* parse the condition */
@@ -5509,22 +5413,8 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
                             return false;
                         }
 
-                        /*
-                         * add alias to aliases table and to corrector
-                         * so corrections can apply for aliases as well.
-                         */
                         util_htset(parser->aliases, var->name, find);
 
-                        /*
-                         * add to corrector so corrections can work
-                         * even for aliases too.
-                         */
-                        correct_add (
-                             vec_last(parser->correct_variables),
-                            &vec_last(parser->correct_variables_score),
-                            var->name
-                        );
-
                         /* generate aliases for vector components */
                         if (isvector) {
                             char *buffer[3];
@@ -5540,26 +5430,6 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
                             mem_d(buffer[0]);
                             mem_d(buffer[1]);
                             mem_d(buffer[2]);
-
-                            /*
-                             * add to corrector so corrections can work
-                             * even for aliases too.
-                             */
-                            correct_add (
-                                 vec_last(parser->correct_variables),
-                                &vec_last(parser->correct_variables_score),
-                                me[0]->name
-                            );
-                            correct_add (
-                                 vec_last(parser->correct_variables),
-                                &vec_last(parser->correct_variables_score),
-                                me[1]->name
-                            );
-                            correct_add (
-                                 vec_last(parser->correct_variables),
-                                &vec_last(parser->correct_variables_score),
-                                me[2]->name
-                            );
                         }
                     }
                 }
@@ -5582,13 +5452,6 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
                     /* Add it to the local scope */
                     util_htset(vec_last(parser->variables), var->name, (void*)var);
 
-                    /* corrector */
-                    correct_add (
-                         vec_last(parser->correct_variables),
-                        &vec_last(parser->correct_variables_score),
-                        var->name
-                    );
-
                     /* now rename the global */
                     ln = strlen(var->name);
                     vec_append(defname, ln, var->name);
@@ -5620,13 +5483,6 @@ static bool parse_variable(parser_t *parser, ast_block *localblock, bool nofield
                         for (i = 0; i < 3; ++i) {
                             util_htset(vec_last(parser->variables), me[i]->name, (void*)(me[i]));
 
-                            /* corrector */
-                            correct_add(
-                                 vec_last(parser->correct_variables),
-                                &vec_last(parser->correct_variables_score),
-                                me[i]->name
-                            );
-
                             vec_shrinkto(defname, prefix_len);
                             ln = strlen(me[i]->name);
                             vec_append(defname, ln, me[i]->name);
@@ -6163,10 +6019,6 @@ parser_t *parser_create()
 
     parser->aliases = util_htnew(PARSER_HT_SIZE);
 
-    /* corrector */
-    vec_push(parser->correct_variables, correct_trie_new());
-    vec_push(parser->correct_variables_score, NULL);
-
     empty_ctx.file   = "<internal>";
     empty_ctx.line   = 0;
     empty_ctx.column = 0;
@@ -6279,13 +6131,6 @@ static void parser_remove_ast(parser_t *parser)
     vec_free(parser->_blocklocals);
     vec_free(parser->_locals);
 
-    /* corrector */
-    for (i = 0; i < vec_size(parser->correct_variables); ++i) {
-        correct_del(parser->correct_variables[i], parser->correct_variables_score[i]);
-    }
-    vec_free(parser->correct_variables);
-    vec_free(parser->correct_variables_score);
-
     for (i = 0; i < vec_size(parser->_typedefs); ++i)
         ast_delete(parser->_typedefs[i]);
     vec_free(parser->_typedefs);