projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
オペランドに文字定数が指定された場合の動作を修正
[YACASL2.git]
/
src
/
word.c
diff --git
a/src/word.c
b/src/word.c
index
d2deaee
..
0e80452
100644
(file)
--- a/
src/word.c
+++ b/
src/word.c
@@
-14,7
+14,7
@@
WORD n2word(const char *str)
}
/* nが-32768〜32767の範囲にないときは、その下位16ビットを格納 */
if(n < -32768 || n > 32767) {
}
/* nが-32768〜32767の範囲にないときは、その下位16ビットを格納 */
if(n < -32768 || n > 32767) {
- n = n
% 0x10000
;
+ n = n
& 0xFFFF
;
}
return (WORD)n;
}
}
return (WORD)n;
}
@@
-23,7
+23,7
@@
WORD n2word(const char *str)
WORD h2word(const char *str)
{
assert(*str == '#');
WORD h2word(const char *str)
{
assert(*str == '#');
- WORD w = 0x0;
+ WORD w
ord
= 0x0;
char *check;
str++;
if(*str == '-' || strlen(str) > 4) {
char *check;
str++;
if(*str == '-' || strlen(str) > 4) {
@@
-31,21
+31,25
@@
WORD h2word(const char *str)
return 0;
}
/* WORD値に変換 */
return 0;
}
/* WORD値に変換 */
- w = (WORD)strtol(str, &check, 16);
+ w
ord
= (WORD)strtol(str, &check, 16);
if(*check != '\0') {
setcerr(115, str-1); /* not hex */
return 0x0;
}
if(*check != '\0') {
setcerr(115, str-1); /* not hex */
return 0x0;
}
- return w;
+ return w
ord
;
}
/* 10進数または16進数の文字列をWORD値に変換 */
}
/* 10進数または16進数の文字列をWORD値に変換 */
-WORD
a
2word(const char *str)
+WORD
nh
2word(const char *str)
{
{
- WORD word = 0x0;
+ WORD word;
+ if(!isdigit(*str) && *str != '-' && *str != '#') {
+ setcerr(114, str); /* not integer */
+ return 0x0;
+ }
if(*str == '#') {
word = h2word(str);
if(*str == '#') {
word = h2word(str);
- } else
if(isdigit(*str) || *str == '-')
{
+ } else {
word = n2word(str);
}
return word;
word = n2word(str);
}
return word;