X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftoken.c;h=dac982fdfcd21f8b71fbcf0e97763835485cce05;hb=873f8e5f55818e711903331d849c86f479d7e2b7;hp=ce2a69bde1d29b492caf4f10763d10a2a148655f;hpb=6b30a23640168f0b99e70ad87ab4c5a98015ee02;p=YACASL2.git diff --git a/src/token.c b/src/token.c index ce2a69b..dac982f 100644 --- a/src/token.c +++ b/src/token.c @@ -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; } }