Răsfoiți Sursa

fix: 修复了部分syntaxError的错误

syntaxError参数被误修改为LINEFILE宏
导致发生内存溢出
SongZihuan 4 ani în urmă
părinte
comite
5a03a0cbdd
2 a modificat fișierele cu 6 adăugiri și 6 ștergeri
  1. 4 4
      VirtulMathCore/parser/__grammar.c
  2. 2 2
      VirtulMathCore/parser/syntax.c

+ 4 - 4
VirtulMathCore/parser/__grammar.c

@@ -45,7 +45,7 @@ inline void twoOperation(P_FUNC, PasersFunction callBack, GetSymbolFunction getS
 
         callBack(CP_FUNC);  // 获得右值
         if (!call_success(pm) || readBackToken(pm) != call_type){  // 若非正确数值
-            syntaxError(pm, syntax_error, line, LINEFILE);
+            syntaxError(pm, syntax_error, line, 5, "ERROR from ", self_name, "(get right ", call_name, ")");
             freeToken(left_token, true);
             freeStatement(st);
             goto return_;
@@ -93,9 +93,9 @@ int readBackToken(ParserMessage *pm){
     Token *tmp = popNewToken(pm->tm);
     int type = tmp->token_type;
     if (type == -2)
-        syntaxError(pm, lexical_error, tmp->line, LINEFILE);
+        syntaxError(pm, lexical_error, tmp->line, 1, "lexical make some error");
     else if (type == -3)
-        syntaxError(pm, int_error, tmp->line, LINEFILE);
+        syntaxError(pm, int_error, tmp->line, 1, "KeyInterrupt");
     addBackToken(pm->tm->ts, tmp);
     return type;
 }
@@ -232,7 +232,7 @@ bool parserParameter(P_FUNC, Parameter **pt, bool enter, bool is_formal, bool is
         if (readBackToken(pm) != T_POLYNOMIAL) {
             if (status == s_3) {
                 long int line = pm->tm->ts->token_list->line;
-                syntaxError(pm, syntax_error, line, LINEFILE);
+                syntaxError(pm, syntax_error, line, 1, "Don't get a parameter after *");
                 goto error_;
             }
             break;

+ 2 - 2
VirtulMathCore/parser/syntax.c

@@ -106,7 +106,7 @@ void stringMather(wint_t p, LexMather *mather){
         else
             mather->status = LEXMATHER_END_1;
     else if (mather->status == LEXMATHER_ING_5){
-        wchar_t new = (wchar_t)(-1);
+        wint_t new = WEOF;
         switch (p) {
             case L'n':
                 new = L'\n';
@@ -140,7 +140,7 @@ void stringMather(wint_t p, LexMather *mather){
                 mather->status = LEXMATHER_MISTAKE;
                 break;
         }
-        if (new != (wchar_t)(-1)) {
+        if (new != WEOF) {
             mather->str = memWideCharcpy(mather->str, 1, true, true, new);
             mather->status = LEXMATHER_ING_1;
             mather->len ++;