projects
/
YACASL2.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
e85ce71
)
strip_casl2_commentの、''があるときの動作を修正
author
j8takagi
<j8takagi@nifty.com>
Sat, 16 Feb 2019 03:03:05 +0000
(12:03 +0900)
committer
j8takagi
<j8takagi@nifty.com>
Sat, 16 Feb 2019 03:08:21 +0000
(12:08 +0900)
VERSION
patch
|
blob
|
history
src/token.c
patch
|
blob
|
history
diff --git
a/VERSION
b/VERSION
index
3c9753e
..
498e4a9
100644
(file)
--- a/
VERSION
+++ b/
VERSION
@@
-1,2
+1,2
@@
-v0.5p
6
+v0.5p
7
diff --git
a/src/token.c
b/src/token.c
index
fa531b5
..
22f33ba
100644
(file)
--- a/
src/token.c
+++ b/
src/token.c
@@
-1,8
+1,4
@@
-#include <stdio.h>
-#include <string.h>
-#include "cerr.h"
-#include "cmem.h"
-#include "assemble.h"
+#include "token.h"
/**
* @brief 「,」区切りの文字列から、オペランドのトークンを取得
/**
* @brief 「,」区切りの文字列から、オペランドのトークンを取得
@@
-56,7
+52,7
@@
OPD *opdtok(const char *str)
/* 「'」の場合 */
if(p[i] == '\'') {
/* 「''」以外の場合はquote値を反転する */
/* 「'」の場合 */
if(p[i] == '\'') {
/* 「''」以外の場合はquote値を反転する */
- if(p[i+1] != '\'' && (
i == 0
|| p[i-1] != '\'')) {
+ if(p[i+1] != '\'' && (
quoting == false
|| p[i-1] != '\'')) {
quoting = !quoting;
}
/* 「'」をカウントする。「''」の場合は1をカウント */
quoting = !quoting;
}
/* 「'」をカウントする。「''」の場合は1をカウント */
@@
-105,7
+101,7
@@
char *strip_casl2_comment(char *s)
for(i = 0; s[i]; i++) {
/* 「'」で囲まれた文字列の場合。「''」は無視 */
for(i = 0; s[i]; i++) {
/* 「'」で囲まれた文字列の場合。「''」は無視 */
- if(s[i] == '\'' && s[i+1] != '\'' && (
i == 0
|| s[i-1] != '\'')) {
+ if(s[i] == '\'' && s[i+1] != '\'' && (
quoting == false
|| s[i-1] != '\'')) {
quoting = !quoting;
/* 「'」で囲まれた文字列でない場合、文字列末尾の「;」以降を削除 */
} else if(quoting == false && s[i] == ';') {
quoting = !quoting;
/* 「'」で囲まれた文字列でない場合、文字列末尾の「;」以降を削除 */
} else if(quoting == false && s[i] == ';') {
@@
-118,10
+114,11
@@
char *strip_casl2_comment(char *s)
CMDLINE *linetok(const char *line)
{
CMDLINE *linetok(const char *line)
{
- char *tok = NULL, *p = NULL
, *lbl = NULL
;
+ char *tok = NULL, *p = NULL;
int i;
CMDLINE *cmdl = NULL;
int i;
CMDLINE *cmdl = NULL;
+ assert(line);
if(!line[0] || line[0] == '\n') {
return NULL;
}
if(!line[0] || line[0] == '\n') {
return NULL;
}
@@
-139,22
+136,20
@@
CMDLINE *linetok(const char *line)
/* ラベルの取得 */
/* 行の先頭が空白またはタブの場合、ラベルは空 */
if((i = strcspn(p, " \t")) == 0) {
/* ラベルの取得 */
/* 行の先頭が空白またはタブの場合、ラベルは空 */
if((i = strcspn(p, " \t")) == 0) {
-
lbl = strdup_chk("", "linetok.lb
l");
+
cmdl->label = strdup_chk("", "cmdl->labe
l");
} else {
} else {
-
lbl = strndup_chk(p, i, "linetok.lb
l");
+
cmdl->label = strndup_chk(p, i, "cmdl->labe
l");
/* ラベルの文字列が長すぎる場合はエラー */
if(i > LABELSIZE) {
/* ラベルの文字列が長すぎる場合はエラー */
if(i > LABELSIZE) {
- setcerr(104,
lb
l); /* label length is too long */
- FREE(
lb
l);
+ setcerr(104,
cmdl->labe
l); /* label length is too long */
+ FREE(
cmdl->labe
l);
goto linetokfin;
}
goto linetokfin;
}
- /* 文字列先頭をラベルの次の文字に移動 */
- p += i;
}
}
- /* ラベル取得の実行 */
- cmdl->label = lbl;
/* 命令の取得 */
/* 命令の取得 */
+ /* 文字列先頭をラベルの次の文字に移動 */
+ p += i;
/* 文字列先頭を、ラベルと命令の間の空白の後ろに移動 */
p += strspn(p, " \t");
/* 命令がない場合は、終了 */
/* 文字列先頭を、ラベルと命令の間の空白の後ろに移動 */
p += strspn(p, " \t");
/* 命令がない場合は、終了 */