]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
Merge branch 'master' into cooking
authorWolfgang Bumiller <blub@speed.at>
Wed, 20 Feb 2013 22:08:58 +0000 (23:08 +0100)
committerWolfgang Bumiller <blub@speed.at>
Wed, 20 Feb 2013 22:08:58 +0000 (23:08 +0100)
1  2 
lexer.c

diff --combined lexer.c
index bb601215fb11b2e97ae7a07a9e4355eec2e9ab31,d205e163f11091f05fdfd786684e83eed8dcafcb..5f23952615ce6c1aa8d3f89607aa1c75821d7c11
+++ b/lexer.c
@@@ -184,7 -184,7 +184,7 @@@ static void lex_token_new(lex_file *lex
  lex_file* lex_open(const char *file)
  {
      lex_file *lex;
 -    FILE *in = file_open(file, "rb");
 +    FILE *in = fs_file_open(file, "rb");
  
      if (!in) {
          lexerror(NULL, "open failed: '%s'\n", file);
  
      lex = (lex_file*)mem_a(sizeof(*lex));
      if (!lex) {
 -        file_close(in);
 +        fs_file_close(in);
          lexerror(NULL, "out of memory\n");
          return NULL;
      }
@@@ -258,7 -258,7 +258,7 @@@ void lex_close(lex_file *lex
          vec_free(lex->modelname);
  
      if (lex->file)
 -        file_close(lex->file);
 +        fs_file_close(lex->file);
  #if 0
      if (lex->tok)
          token_delete(lex->tok);
@@@ -992,6 -992,8 +992,8 @@@ int lex_do(lex_file *lex
          if (!lex->flags.mergelines || ch != '\\')
              break;
          ch = lex_getch(lex);
+         if (ch == '\r')
+             ch = lex_getch(lex);
          if (ch != '\n') {
              lex_ungetch(lex, ch);
              ch = '\\';
  
      if (ch == '+' || ch == '-' || /* ++, --, +=, -=  and -> as well! */
          ch == '>' || ch == '<' || /* <<, >>, <=, >=                  */
 -        ch == '=' || ch == '!' || /* ==, !=                          */
 +        ch == '=' || ch == '!' || /* <=>, ==, !=                     */
          ch == '&' || ch == '|' || /* &&, ||, &=, |=                  */
          ch == '~'                 /* ~=, ~                           */
      )  {
          lex_tokench(lex, ch);
  
          nextch = lex_getch(lex);
 -        if (nextch == '=' || (nextch == ch && ch != '!')) {
 +        if ((nextch == '=' && ch != '<') || (nextch == ch && ch != '!')) {
              lex_tokench(lex, nextch);
 +        } else if (ch == '<' && nextch == '=') {
 +            lex_tokench(lex, nextch);
 +            if ((thirdch = lex_getch(lex)) == '>')
 +                lex_tokench(lex, thirdch);
 +            else
 +                lex_ungetch(lex, thirdch);
 +
          } else if (ch == '-' && nextch == '>') {
              lex_tokench(lex, nextch);
          } else if (ch == '&' && nextch == '~') {
                  lex->tok.constval.f = -lex->tok.constval.f;
              lex_endtoken(lex);
              return lex->tok.ttype;
 -        } else
 +        } else {
              lex_ungetch(lex, nextch);
 +        }
  
          lex_endtoken(lex);
          return (lex->tok.ttype = TOKEN_OPERATOR);