cmd.cの削除に伴い、ユニットテストとdoxygenドキュメントを修正
[YACASL2.git] / src / token.c
index ce2a69b..dac982f 100644 (file)
@@ -53,7 +53,7 @@ OPD *opdtok(const char *str)
             setcerr(117, NULL);    /* operand is too many */
             break;
         }
-        /* 先頭が「=」の場合 */
+        /* 先頭が等号(=)の場合 */
         if(*r == '=') {
             r++;
         }
@@ -119,7 +119,7 @@ CMDLINE *linetok(const char *line)
             break;
         }
     }
-    if(*tokens != '\0') {
+    if(*tokens != '\n' && *tokens != '\0') {
         p = tokens;
         cmdl = malloc_chk(sizeof(CMDLINE), "cmdl");
         /* ラベルの取得。行の先頭が空白またはタブの場合、ラベルは空 */
@@ -143,6 +143,7 @@ CMDLINE *linetok(const char *line)
             if(cmdl->label != NULL) {         /* ラベルが定義されていて命令がない場合はエラー */
                 setcerr(105, NULL);    /* no command in the line */
             }
+            FREE(cmdl);
         } else {
             /* 命令の取得 */
             sepp = p + strcspn(p, " \t\n");
@@ -153,13 +154,13 @@ CMDLINE *linetok(const char *line)
             while(*p == ' ' || *p == '\t') {
                 p++;
             }
-            /* 改行かタブまでの文字列を取得
-               「'」で囲まれた文字列に含まれる場合があるため、空白は無視 */
+            /* 改行かタブまでの文字列を取得 */
+            /* 「'」で囲まれた文字列に含まれる場合があるため、空白は無視 */
             if((sepp = p + strcspn(p, "\t\n")) > p) {
                 *sepp = '\0';
                 cmdl->opd = opdtok(p);
             } else {
-                cmdl->opd = malloc_chk(sizeof(OPD *), "cmdl.opd");
+                cmdl->opd = malloc_chk(sizeof(OPD), "cmdl.opd");
                 cmdl->opd->opdc = 0;
             }
         }