mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Release calc version 2.11.0t9.4.5
This commit is contained in:
18
BUGS
18
BUGS
@@ -31,7 +31,9 @@ The calc web site is located at:
|
|||||||
If you have tried all of the above and things still are not right,
|
If you have tried all of the above and things still are not right,
|
||||||
then it may be time to send in a bug report. You can send bug reports to:
|
then it may be time to send in a bug report. You can send bug reports to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
calc-bugs at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
When you send your report, please include the following information:
|
When you send your report, please include the following information:
|
||||||
|
|
||||||
@@ -62,7 +64,12 @@ Stack traces from core dumps are useful to send as well.
|
|||||||
Send any comments, compiler warning messages, suggestions and most
|
Send any comments, compiler warning messages, suggestions and most
|
||||||
importantly, fixes (in the form of a context diff patch) to:
|
importantly, fixes (in the form of a context diff patch) to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
calc-tester at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
|
You should use the above calc-bugs address for bug reports, if you are
|
||||||
|
not currently a member of the calc-tester mailing list.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
@@ -146,6 +153,7 @@ Other items of note:
|
|||||||
|
|
||||||
DEBUG= -g
|
DEBUG= -g
|
||||||
|
|
||||||
or set:
|
* The sparcv9 support for 64 bit Solaris under gcc-2.96 is able
|
||||||
|
to compile calc, but calc dumps core very early on in startup.
|
||||||
DEBUG=
|
It is said that sparcv9 support in gcc-2.96 is very unofficial.
|
||||||
|
There is no work-a-round for this compile problem.
|
||||||
|
7
CHANGES
7
CHANGES
@@ -227,6 +227,13 @@ Following is the change from calc version 2.11.0t8.9.1 to date:
|
|||||||
Fixed some insure code inspection tool issues that were discovered
|
Fixed some insure code inspection tool issues that were discovered
|
||||||
and investigated by Michel van der List <vanderlistmj@sbphrd.com>.
|
and investigated by Michel van der List <vanderlistmj@sbphrd.com>.
|
||||||
|
|
||||||
|
Made an effort to ensure that the v_subtype of VALUES are initialized
|
||||||
|
to V_NOSUBTYPE thruout the source code.
|
||||||
|
|
||||||
|
Established a separate calc-bugs address from the calc-tester
|
||||||
|
maining list. Using anti-spam address forms in order to try and
|
||||||
|
stay under the radar of spammers as much as one can do so.
|
||||||
|
|
||||||
|
|
||||||
Following is the change from calc version 2.11.0t8 to 2.11.0t8.9:
|
Following is the change from calc version 2.11.0t8 to 2.11.0t8.9:
|
||||||
|
|
||||||
|
12
README
12
README
@@ -74,7 +74,9 @@ for a wish/todo list. Code contributions are welcome.
|
|||||||
|
|
||||||
To join the calc-tester mailing list. Send a request to:
|
To join the calc-tester mailing list. Send a request to:
|
||||||
|
|
||||||
calc-tester-request@postofc.corp.sgi.com
|
calc-tester-request at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
Your message body (not the subject) should consist of:
|
Your message body (not the subject) should consist of:
|
||||||
|
|
||||||
@@ -85,6 +87,14 @@ Your message body (not the subject) should consist of:
|
|||||||
where ``address'' is your EMail address and ``your_full_name'' is
|
where ``address'' is your EMail address and ``your_full_name'' is
|
||||||
your full name.
|
your full name.
|
||||||
|
|
||||||
|
Calc bug reports, however should be sent to:
|
||||||
|
|
||||||
|
calc-bugs at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
|
but see the BUGS file first.
|
||||||
|
|
||||||
The calc web site is located at:
|
The calc web site is located at:
|
||||||
|
|
||||||
http://reality.sgi.com/chongo/tech/comp/calc/
|
http://reality.sgi.com/chongo/tech/comp/calc/
|
||||||
|
1
addop.c
1
addop.c
@@ -114,6 +114,7 @@ beginfunc(char *name, BOOL newflag)
|
|||||||
fp->f_localcount = 0;
|
fp->f_localcount = 0;
|
||||||
fp->f_opcodecount = 0;
|
fp->f_opcodecount = 0;
|
||||||
fp->f_savedvalue.v_type = V_NULL;
|
fp->f_savedvalue.v_type = V_NULL;
|
||||||
|
fp->f_savedvalue.v_subtype = V_NOSUBTYPE;
|
||||||
fp->f_name = namestr(&funcnames, newindex);
|
fp->f_name = namestr(&funcnames, newindex);
|
||||||
curfunc = fp;
|
curfunc = fp;
|
||||||
initlocals();
|
initlocals();
|
||||||
|
@@ -80,6 +80,7 @@ associndex(ASSOC *ap, BOOL create, long dim, VALUE *indices)
|
|||||||
*/
|
*/
|
||||||
if (!create) {
|
if (!create) {
|
||||||
val.v_type = V_NULL;
|
val.v_type = V_NULL;
|
||||||
|
val.v_subtype = V_NOSUBTYPE;
|
||||||
return &val;
|
return &val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,6 +293,7 @@ assoccopy(ASSOC *oldap)
|
|||||||
ep->e_dim = oldep->e_dim;
|
ep->e_dim = oldep->e_dim;
|
||||||
ep->e_hash = oldep->e_hash;
|
ep->e_hash = oldep->e_hash;
|
||||||
ep->e_value.v_type = V_NULL;
|
ep->e_value.v_type = V_NULL;
|
||||||
|
ep->e_value.v_subtype = V_NOSUBTYPE;
|
||||||
for (i = 0; i < ep->e_dim; i++)
|
for (i = 0; i < ep->e_dim; i++)
|
||||||
copyvalue(&oldep->e_indices[i], &ep->e_indices[i]);
|
copyvalue(&oldep->e_indices[i], &ep->e_indices[i]);
|
||||||
copyvalue(&oldep->e_value, &ep->e_value);
|
copyvalue(&oldep->e_value, &ep->e_value);
|
||||||
|
1
blkcpy.c
1
blkcpy.c
@@ -330,6 +330,7 @@ copyblk2mat(BLOCK *blk, long ssi, long num, MATRIX *dmat, long dsi)
|
|||||||
i = num;
|
i = num;
|
||||||
while (i-- > 0) {
|
while (i-- > 0) {
|
||||||
vp->v_type = V_NUM;
|
vp->v_type = V_NUM;
|
||||||
|
vp->v_subtype = V_NOSUBTYPE;
|
||||||
vp->v_num = itoq((long) *op++);
|
vp->v_num = itoq((long) *op++);
|
||||||
vp++;
|
vp++;
|
||||||
}
|
}
|
||||||
|
41
calc.man
41
calc.man
@@ -570,7 +570,11 @@ The majority of
|
|||||||
was written by David I. Bell.
|
was written by David I. Bell.
|
||||||
.sp
|
.sp
|
||||||
.B Calc
|
.B Calc
|
||||||
archives and calc-tester mailing list maintained by Landon Curt Noll.
|
The Calc primary mirror, calc mailing list and calc bug report
|
||||||
|
processing is performed by Landon Curt Noll.
|
||||||
|
.sp
|
||||||
|
Landon Curt Noll maintains the master reference source, performs
|
||||||
|
release control functions as well as other calc maintenance functions.
|
||||||
.sp
|
.sp
|
||||||
Thanks for suggestions and encouragement from Peter Miller,
|
Thanks for suggestions and encouragement from Peter Miller,
|
||||||
Neil Justusson, and Landon Noll.
|
Neil Justusson, and Landon Noll.
|
||||||
@@ -610,9 +614,36 @@ scripts that you would like you see included
|
|||||||
in future distributions to:
|
in future distributions to:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
calc-tester@postofc.corp.sgi.com
|
.nf
|
||||||
|
calc-tester at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
.fi
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
|
Bug reports are sent to:
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
calc-bugs at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
See the
|
||||||
|
.I BUGS
|
||||||
|
source file or use the
|
||||||
|
.I calc
|
||||||
|
command:
|
||||||
|
.sp
|
||||||
|
.in +0.5i
|
||||||
|
.nf
|
||||||
|
help bugs
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
|
.sp
|
||||||
|
for more information about bug reporting.
|
||||||
|
.sp
|
||||||
Landon Noll maintains the the
|
Landon Noll maintains the the
|
||||||
.B calc
|
.B calc
|
||||||
web site is located at:
|
web site is located at:
|
||||||
@@ -626,7 +657,11 @@ One may join the
|
|||||||
testing group by sending a request to:
|
testing group by sending a request to:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
calc-tester-request@postofc.corp.sgi.com
|
.nf
|
||||||
|
calc-tester-request at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
.fi
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
Your message body (not the subject) should consist of:
|
Your message body (not the subject) should consist of:
|
||||||
|
1
config.c
1
config.c
@@ -1000,6 +1000,7 @@ config_value(CONFIG *cfg, int type, VALUE *vp)
|
|||||||
* convert element to value
|
* convert element to value
|
||||||
*/
|
*/
|
||||||
vp->v_type = V_NUM;
|
vp->v_type = V_NUM;
|
||||||
|
vp->v_subtype = V_NOSUBTYPE;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case CONFIG_ALL:
|
case CONFIG_ALL:
|
||||||
vp->v_type = V_CONFIG;
|
vp->v_type = V_CONFIG;
|
||||||
|
9
file.c
9
file.c
@@ -2228,15 +2228,16 @@ freadnum(FILE *fp, VALUE *valptr)
|
|||||||
ch = fgetc(fp);
|
ch = fgetc(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ch == 'i' || ch == 'I')
|
if (ch == 'i' || ch == 'I') {
|
||||||
imag = TRUE;
|
imag = TRUE;
|
||||||
else {
|
} else {
|
||||||
ungetc(ch, fp);
|
ungetc(ch, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ziszero(num)) {
|
if (ziszero(num)) {
|
||||||
zfree(num);
|
zfree(num);
|
||||||
val.v_type = V_NUM;
|
val.v_type = V_NUM;
|
||||||
|
val.v_subtype = V_NOSUBTYPE;
|
||||||
val.v_num = qlink(&_qzero_);
|
val.v_num = qlink(&_qzero_);
|
||||||
*valptr = val;
|
*valptr = val;
|
||||||
return;
|
return;
|
||||||
@@ -2281,11 +2282,11 @@ freadnum(FILE *fp, VALUE *valptr)
|
|||||||
c->imag = q;
|
c->imag = q;
|
||||||
val.v_type = V_COM;
|
val.v_type = V_COM;
|
||||||
val.v_com = c;
|
val.v_com = c;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
val.v_type = V_NUM;
|
val.v_type = V_NUM;
|
||||||
val.v_num = q;
|
val.v_num = q;
|
||||||
}
|
}
|
||||||
|
val.v_subtype = V_NOSUBTYPE;
|
||||||
*valptr = val;
|
*valptr = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
20
help/contrib
20
help/contrib
@@ -36,17 +36,33 @@ gziped (or compressed) tar file).
|
|||||||
|
|
||||||
You should send submissions to:
|
You should send submissions to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
calc-tester at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
Thanks for considering submitting code to calc. Calc is a collective
|
Thanks for considering submitting code to calc. Calc is a collective
|
||||||
work by a number of people. It would not be what it is today without
|
work by a number of people. It would not be what it is today without
|
||||||
your efforts and submissions!
|
your efforts and submissions!
|
||||||
|
|
||||||
|
Calc bug reports, however, should be sent to:
|
||||||
|
|
||||||
|
calc-bugs at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
|
See the BUGS file or try the help command:
|
||||||
|
|
||||||
|
help bugs
|
||||||
|
|
||||||
|
for details on bug reporting.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
One may join the calc testing group by sending a request to:
|
One may join the calc testing group by sending a request to:
|
||||||
|
|
||||||
calc-tester-request@postofc.corp.sgi.com
|
calc-tester-request at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
Your message body (not the subject) should consist of:
|
Your message body (not the subject) should consist of:
|
||||||
|
|
||||||
|
@@ -2,7 +2,11 @@ Credits
|
|||||||
|
|
||||||
The majority of calc was written by David I. Bell.
|
The majority of calc was written by David I. Bell.
|
||||||
|
|
||||||
Calc archives and calc-tester mailing list maintained by Landon Curt Noll.
|
The Calc primary mirror, calc mailing list and calc bug report
|
||||||
|
processing is performed by Landon Curt Noll.
|
||||||
|
|
||||||
|
Landon Curt Noll maintains the master reference source, performs
|
||||||
|
release control functions as well as other calc maintenance functions.
|
||||||
|
|
||||||
Thanks for suggestions and encouragement from Peter Miller,
|
Thanks for suggestions and encouragement from Peter Miller,
|
||||||
Neil Justusson, and Landon Noll.
|
Neil Justusson, and Landon Noll.
|
||||||
|
14
help/todo
14
help/todo
@@ -5,10 +5,22 @@ Calc Todo Items:
|
|||||||
|
|
||||||
Code contributions are welcome. Send patches to:
|
Code contributions are welcome. Send patches to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
calc-tester at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
See also the 'wishlist' help files for the calc enhancement wish list.
|
See also the 'wishlist' help files for the calc enhancement wish list.
|
||||||
|
|
||||||
|
Calc bug reports, however, should send to:
|
||||||
|
|
||||||
|
calc-tester at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
|
see the BUGS file or try the calc command:
|
||||||
|
|
||||||
|
help bugs
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
|
||||||
Very High priority items:
|
Very High priority items:
|
||||||
|
@@ -4,11 +4,19 @@ Calc Enhancement Wish List:
|
|||||||
interesting calc scripts that you would like you see included in
|
interesting calc scripts that you would like you see included in
|
||||||
future distributions to:
|
future distributions to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
calc-tester at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
The following items are in the calc wish list. Programs like this
|
The following items are in the calc wish list. Programs like this
|
||||||
can be extended and improved forever.
|
can be extended and improved forever.
|
||||||
|
|
||||||
|
Calc bug repoers, however, should be sent to:
|
||||||
|
|
||||||
|
calc-bugs at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
See the 'todo' help file for higher priority todo items.
|
See the 'todo' help file for higher priority todo items.
|
||||||
|
|
||||||
=-=
|
=-=
|
||||||
|
@@ -33,7 +33,9 @@ the calc language, and/or because the authors thought them to be useful!
|
|||||||
|
|
||||||
If you write something that you think is useful, please send it to:
|
If you write something that you think is useful, please send it to:
|
||||||
|
|
||||||
calc-tester@postofc.corp.sgi.com
|
calc-tester at postofc dot corp dot sgi dot com
|
||||||
|
|
||||||
|
[[ Replace 'at' with @, 'dot' is with . and remove the spaces ]]
|
||||||
|
|
||||||
By convention, a lib file only defines and/or initializes functions,
|
By convention, a lib file only defines and/or initializes functions,
|
||||||
objects and variables. (The regress.cal and testxxx.cal regression test
|
objects and variables. (The regress.cal and testxxx.cal regression test
|
||||||
|
35
lib_calc.c
35
lib_calc.c
@@ -318,17 +318,16 @@ initenv(void)
|
|||||||
char *c;
|
char *c;
|
||||||
|
|
||||||
/* determine the $CALCPATH value */
|
/* determine the $CALCPATH value */
|
||||||
c = getenv(CALCPATH);
|
c = (no_env ? NULL : getenv(CALCPATH));
|
||||||
calcpath = ((no_env || c == NULL) ? NULL : strdup(c));
|
calcpath = (c ? strdup(c) : NULL);
|
||||||
if (calcpath == NULL)
|
if (calcpath == NULL)
|
||||||
calcpath = DEFAULTCALCPATH;
|
calcpath = DEFAULTCALCPATH;
|
||||||
|
|
||||||
/* determine the $CALCRC value */
|
/* determine the $CALCRC value */
|
||||||
c = getenv(CALCRC);
|
c = (no_env ? NULL : getenv(CALCRC));
|
||||||
calcrc = ((no_env || c == NULL) ? NULL : strdup(c));
|
calcrc = (c ? strdup(c) : NULL);
|
||||||
if (calcrc == NULL) {
|
if (calcrc == NULL)
|
||||||
calcrc = DEFAULTCALCRC;
|
calcrc = DEFAULTCALCRC;
|
||||||
}
|
|
||||||
if (strlen(calcrc) > MAX_CALCRC) {
|
if (strlen(calcrc) > MAX_CALCRC) {
|
||||||
math_error("The $CALCRC variable is longer than %d chars",
|
math_error("The $CALCRC variable is longer than %d chars",
|
||||||
MAX_CALCRC);
|
MAX_CALCRC);
|
||||||
@@ -336,15 +335,14 @@ initenv(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* determine the $CALCBINDINGS value */
|
/* determine the $CALCBINDINGS value */
|
||||||
c = getenv(CALCBINDINGS);
|
c = (no_env ? NULL : getenv(CALCBINDINGS));
|
||||||
calcbindings = ((no_env || c == NULL) ? NULL : strdup(c));
|
calcbindings = (c ? strdup(c) : NULL);
|
||||||
if (calcbindings == NULL) {
|
if (calcbindings == NULL)
|
||||||
calcbindings = DEFAULTCALCBINDINGS;
|
calcbindings = DEFAULTCALCBINDINGS;
|
||||||
}
|
|
||||||
|
|
||||||
/* determine the $HOME value */
|
/* determine the $HOME value */
|
||||||
c = getenv(HOME);
|
c = (no_env ? NULL : getenv(HOME));
|
||||||
home = ((no_env || c == NULL) ? NULL : strdup(c));
|
home = (c ? strdup(c) : NULL);
|
||||||
if (home == NULL || home[0] == '\0') {
|
if (home == NULL || home[0] == '\0') {
|
||||||
ent = (struct passwd *)getpwuid(geteuid());
|
ent = (struct passwd *)getpwuid(geteuid());
|
||||||
if (ent == NULL) {
|
if (ent == NULL) {
|
||||||
@@ -356,16 +354,15 @@ initenv(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* determine the $PAGER value */
|
/* determine the $PAGER value */
|
||||||
c = getenv(PAGER);
|
c = (no_env ? NULL : getenv(PAGER));
|
||||||
pager = ((no_env || c == NULL) ? NULL : strdup(c));
|
pager = (c ? strdup(c) : NULL);
|
||||||
if (pager == NULL || *pager == '\0') {
|
if (pager == NULL || *pager == '\0')
|
||||||
pager = DEFAULTCALCPAGER;
|
pager = DEFAULTCALCPAGER;
|
||||||
}
|
|
||||||
|
|
||||||
/* determine the $SHELL value */
|
/* determine the $SHELL value */
|
||||||
c = getenv(SHELL);
|
c = (no_env ? NULL : getenv(SHELL));
|
||||||
shell = ((no_env || c == NULL) ? NULL : strdup(c));
|
shell = (c ? strdup(c) : NULL);
|
||||||
if (shell == NULL)
|
if (shell == NULL || *shell == '\0')
|
||||||
shell = DEFAULTSHELL;
|
shell = DEFAULTSHELL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -130,10 +130,12 @@ removelistfirst(LIST *lp, VALUE *vp)
|
|||||||
{
|
{
|
||||||
if (lp->l_count == 0) {
|
if (lp->l_count == 0) {
|
||||||
vp->v_type = V_NULL;
|
vp->v_type = V_NULL;
|
||||||
|
vp->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
*vp = lp->l_first->e_value;
|
*vp = lp->l_first->e_value;
|
||||||
lp->l_first->e_value.v_type = V_NULL;
|
lp->l_first->e_value.v_type = V_NULL;
|
||||||
|
lp->l_first->e_value.v_type = V_NOSUBTYPE;
|
||||||
removelistelement(lp, lp->l_first);
|
removelistelement(lp, lp->l_first);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,10 +153,12 @@ removelistlast(LIST *lp, VALUE *vp)
|
|||||||
{
|
{
|
||||||
if (lp->l_count == 0) {
|
if (lp->l_count == 0) {
|
||||||
vp->v_type = V_NULL;
|
vp->v_type = V_NULL;
|
||||||
|
vp->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
*vp = lp->l_last->e_value;
|
*vp = lp->l_last->e_value;
|
||||||
lp->l_last->e_value.v_type = V_NULL;
|
lp->l_last->e_value.v_type = V_NULL;
|
||||||
|
lp->l_last->e_value.v_subtype = V_NOSUBTYPE;
|
||||||
removelistelement(lp, lp->l_last);
|
removelistelement(lp, lp->l_last);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,6 +185,7 @@ removelistmiddle(LIST *lp, long index, VALUE *vp)
|
|||||||
}
|
}
|
||||||
*vp = ep->e_value;
|
*vp = ep->e_value;
|
||||||
ep->e_value.v_type = V_NULL;
|
ep->e_value.v_type = V_NULL;
|
||||||
|
ep->e_value.v_subtype = V_NOSUBTYPE;
|
||||||
removelistelement(lp, ep);
|
removelistelement(lp, ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -154,6 +154,7 @@ matmul(MATRIX *m1, MATRIX *m2)
|
|||||||
for (i1 = 0; i1 < max1; i1++) {
|
for (i1 = 0; i1 < max1; i1++) {
|
||||||
for (i2 = 0; i2 < max2; i2++) {
|
for (i2 = 0; i2 < max2; i2++) {
|
||||||
sum.v_type = V_NULL;
|
sum.v_type = V_NULL;
|
||||||
|
sum.v_subtype = V_NOSUBTYPE;
|
||||||
v1 = &m1->m_table[i1 * maxindex];
|
v1 = &m1->m_table[i1 * maxindex];
|
||||||
v2 = &m2->m_table[i2];
|
v2 = &m2->m_table[i2];
|
||||||
for (index = 0; index < maxindex; index++) {
|
for (index = 0; index < maxindex; index++) {
|
||||||
@@ -202,6 +203,7 @@ matsquare(MATRIX *m)
|
|||||||
for (i1 = 0; i1 < max; i1++) {
|
for (i1 = 0; i1 < max; i1++) {
|
||||||
for (i2 = 0; i2 < max; i2++) {
|
for (i2 = 0; i2 < max; i2++) {
|
||||||
sum.v_type = V_NULL;
|
sum.v_type = V_NULL;
|
||||||
|
sum.v_subtype = V_NOSUBTYPE;
|
||||||
v1 = &m->m_table[i1 * max];
|
v1 = &m->m_table[i1 * max];
|
||||||
v2 = &m->m_table[i2];
|
v2 = &m->m_table[i2];
|
||||||
for (index = 0; index < max; index++) {
|
for (index = 0; index < max; index++) {
|
||||||
@@ -405,6 +407,7 @@ matscale(MATRIX *m, long n)
|
|||||||
if (n == 0)
|
if (n == 0)
|
||||||
return matcopy(m);
|
return matcopy(m);
|
||||||
temp.v_type = V_NUM;
|
temp.v_type = V_NUM;
|
||||||
|
temp.v_subtype = V_NOSUBTYPE;
|
||||||
temp.v_num = itoq(n);
|
temp.v_num = itoq(n);
|
||||||
res = matalloc(m->m_size);
|
res = matalloc(m->m_size);
|
||||||
*res = *m;
|
*res = *m;
|
||||||
@@ -436,6 +439,7 @@ matshift(MATRIX *m, long n)
|
|||||||
if (n == 0)
|
if (n == 0)
|
||||||
return matcopy(m);
|
return matcopy(m);
|
||||||
temp.v_type = V_NUM;
|
temp.v_type = V_NUM;
|
||||||
|
temp.v_subtype = V_NOSUBTYPE;
|
||||||
temp.v_num = itoq(n);
|
temp.v_num = itoq(n);
|
||||||
res = matalloc(m->m_size);
|
res = matalloc(m->m_size);
|
||||||
*res = *m;
|
*res = *m;
|
||||||
@@ -1062,6 +1066,7 @@ matdet(MATRIX *m)
|
|||||||
while (!testvalue(val)) {
|
while (!testvalue(val)) {
|
||||||
if (--i <= 0) {
|
if (--i <= 0) {
|
||||||
tmp1.v_type = V_NUM;
|
tmp1.v_type = V_NUM;
|
||||||
|
tmp1.v_subtype = V_NOSUBTYPE;
|
||||||
tmp1.v_num = qlink(&_qzero_);
|
tmp1.v_num = qlink(&_qzero_);
|
||||||
matfree(m);
|
matfree(m);
|
||||||
return tmp1;
|
return tmp1;
|
||||||
|
5
obj.c
5
obj.c
@@ -141,6 +141,10 @@ objcall(int action, VALUE *v1, VALUE *v2, VALUE *v3)
|
|||||||
VALUE tmp; /* temp value */
|
VALUE tmp; /* temp value */
|
||||||
char name[SYMBOLSIZE+1]; /* full name of user routine to call */
|
char name[SYMBOLSIZE+1]; /* full name of user routine to call */
|
||||||
|
|
||||||
|
/* initialize VALUEs */
|
||||||
|
val.v_subtype = V_NOSUBTYPE;
|
||||||
|
tmp.v_subtype = V_NOSUBTYPE;
|
||||||
|
|
||||||
if ((unsigned)action > OBJ_MAXFUNC) {
|
if ((unsigned)action > OBJ_MAXFUNC) {
|
||||||
math_error("Illegal action for object call");
|
math_error("Illegal action for object call");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
@@ -404,6 +408,7 @@ objpowi(VALUE *vp, NUMBER *q)
|
|||||||
case 1:
|
case 1:
|
||||||
res.v_obj = objcopy(vp->v_obj);
|
res.v_obj = objcopy(vp->v_obj);
|
||||||
res.v_type = V_OBJ;
|
res.v_type = V_OBJ;
|
||||||
|
res.v_subtype = V_NOSUBTYPE;
|
||||||
return res;
|
return res;
|
||||||
case -1:
|
case -1:
|
||||||
return objcall(OBJ_INV, vp, NULL_VALUE, NULL_VALUE);
|
return objcall(OBJ_INV, vp, NULL_VALUE, NULL_VALUE);
|
||||||
|
107
opcodes.c
107
opcodes.c
@@ -230,6 +230,7 @@ o_argvalue(FUNC *fp, int argcount, VALUE *args)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = itoq((long) argcount);
|
stack->v_num = itoq((long) argcount);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
index = qtoi(vp->v_num) - 1;
|
index = qtoi(vp->v_num) - 1;
|
||||||
@@ -292,6 +293,7 @@ o_string(FUNC *fp, long arg)
|
|||||||
stack++;
|
stack++;
|
||||||
stack->v_str = slink(findstring(arg));
|
stack->v_str = slink(findstring(arg));
|
||||||
stack->v_type = V_STR;
|
stack->v_type = V_STR;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -300,6 +302,7 @@ o_undef(void)
|
|||||||
{
|
{
|
||||||
stack++;
|
stack++;
|
||||||
stack->v_type = V_NULL;
|
stack->v_type = V_NULL;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -940,6 +943,7 @@ o_swap(void)
|
|||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
stack->v_type = V_NULL;
|
stack->v_type = V_NULL;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -958,11 +962,13 @@ o_add(void)
|
|||||||
v2 = v2->v_addr;
|
v2 = v2->v_addr;
|
||||||
if (v1->v_type == V_OCTET) {
|
if (v1->v_type == V_OCTET) {
|
||||||
w1.v_type = V_NUM;
|
w1.v_type = V_NUM;
|
||||||
|
w1.v_subtype = V_NOSUBTYPE;
|
||||||
w1.v_num = itoq(*v1->v_octet);
|
w1.v_num = itoq(*v1->v_octet);
|
||||||
v1 = &w1;
|
v1 = &w1;
|
||||||
}
|
}
|
||||||
if (v2->v_type == V_OCTET) {
|
if (v2->v_type == V_OCTET) {
|
||||||
w2.v_type = V_NUM;
|
w2.v_type = V_NUM;
|
||||||
|
w2.v_subtype = V_NOSUBTYPE;
|
||||||
w2.v_num = itoq(*v2->v_octet);
|
w2.v_num = itoq(*v2->v_octet);
|
||||||
v2 = &w2;
|
v2 = &w2;
|
||||||
}
|
}
|
||||||
@@ -993,11 +999,13 @@ o_sub(void)
|
|||||||
v2 = v2->v_addr;
|
v2 = v2->v_addr;
|
||||||
if (v1->v_type == V_OCTET) {
|
if (v1->v_type == V_OCTET) {
|
||||||
w1.v_type = V_NUM;
|
w1.v_type = V_NUM;
|
||||||
|
w1.v_subtype = V_NOSUBTYPE;
|
||||||
w1.v_num = itoq((unsigned char) *v1->v_octet);
|
w1.v_num = itoq((unsigned char) *v1->v_octet);
|
||||||
v1 = &w1;
|
v1 = &w1;
|
||||||
}
|
}
|
||||||
if (v2->v_type == V_OCTET) {
|
if (v2->v_type == V_OCTET) {
|
||||||
w2.v_type = V_NUM;
|
w2.v_type = V_NUM;
|
||||||
|
w2.v_subtype = V_NOSUBTYPE;
|
||||||
w2.v_num = itoq((unsigned char) *v2->v_octet);
|
w2.v_num = itoq((unsigned char) *v2->v_octet);
|
||||||
v2 = &w2;
|
v2 = &w2;
|
||||||
}
|
}
|
||||||
@@ -1028,11 +1036,13 @@ o_mul(void)
|
|||||||
v2 = v2->v_addr;
|
v2 = v2->v_addr;
|
||||||
if (v1->v_type == V_OCTET) {
|
if (v1->v_type == V_OCTET) {
|
||||||
w1.v_type = V_NUM;
|
w1.v_type = V_NUM;
|
||||||
|
w1.v_subtype = V_NOSUBTYPE;
|
||||||
w1.v_num = itoq(*v1->v_octet);
|
w1.v_num = itoq(*v1->v_octet);
|
||||||
v1 = &w1;
|
v1 = &w1;
|
||||||
}
|
}
|
||||||
if (v2->v_type == V_OCTET) {
|
if (v2->v_type == V_OCTET) {
|
||||||
w2.v_type = V_NUM;
|
w2.v_type = V_NUM;
|
||||||
|
w2.v_subtype = V_NOSUBTYPE;
|
||||||
w2.v_num = itoq(*v2->v_octet);
|
w2.v_num = itoq(*v2->v_octet);
|
||||||
v2 = &w2;
|
v2 = &w2;
|
||||||
}
|
}
|
||||||
@@ -1081,11 +1091,13 @@ o_div(void)
|
|||||||
v2 = v2->v_addr;
|
v2 = v2->v_addr;
|
||||||
if (v1->v_type == V_OCTET) {
|
if (v1->v_type == V_OCTET) {
|
||||||
w1.v_type = V_NUM;
|
w1.v_type = V_NUM;
|
||||||
|
w1.v_subtype = V_NOSUBTYPE;
|
||||||
w1.v_num = itoq(*v1->v_octet);
|
w1.v_num = itoq(*v1->v_octet);
|
||||||
v1 = &w1;
|
v1 = &w1;
|
||||||
}
|
}
|
||||||
if (v2->v_type == V_OCTET) {
|
if (v2->v_type == V_OCTET) {
|
||||||
w2.v_type = V_NUM;
|
w2.v_type = V_NUM;
|
||||||
|
w2.v_subtype = V_NOSUBTYPE;
|
||||||
w2.v_num = itoq(*v2->v_octet);
|
w2.v_num = itoq(*v2->v_octet);
|
||||||
v2 = &w2;
|
v2 = &w2;
|
||||||
}
|
}
|
||||||
@@ -1113,6 +1125,7 @@ o_quo(void)
|
|||||||
if (v2->v_type == V_ADDR)
|
if (v2->v_type == V_ADDR)
|
||||||
v2 = v2->v_addr;
|
v2 = v2->v_addr;
|
||||||
null.v_type = V_NULL;
|
null.v_type = V_NULL;
|
||||||
|
null.v_subtype = V_NOSUBTYPE;
|
||||||
quovalue(v1, v2, &null, &tmp);
|
quovalue(v1, v2, &null, &tmp);
|
||||||
freevalue(stack--);
|
freevalue(stack--);
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
@@ -1133,6 +1146,7 @@ o_mod(void)
|
|||||||
if (v2->v_type == V_ADDR)
|
if (v2->v_type == V_ADDR)
|
||||||
v2 = v2->v_addr;
|
v2 = v2->v_addr;
|
||||||
null.v_type = V_NULL;
|
null.v_type = V_NULL;
|
||||||
|
null.v_subtype = V_NOSUBTYPE;
|
||||||
modvalue(v1, v2, &null, &tmp);
|
modvalue(v1, v2, &null, &tmp);
|
||||||
freevalue(stack--);
|
freevalue(stack--);
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
@@ -1175,7 +1189,9 @@ o_quomod(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
valquo.v_type = V_NUM;
|
valquo.v_type = V_NUM;
|
||||||
|
valquo.v_subtype = V_NOSUBTYPE;
|
||||||
valmod.v_type = V_NUM;
|
valmod.v_type = V_NUM;
|
||||||
|
valmod.v_subtype = V_NOSUBTYPE;
|
||||||
res = qquomod(v1->v_num, v2->v_num, &valquo.v_num, &valmod.v_num);
|
res = qquomod(v1->v_num, v2->v_num, &valquo.v_num, &valmod.v_num);
|
||||||
stack -= 2;
|
stack -= 2;
|
||||||
if (stack->v_type == V_NUM)
|
if (stack->v_type == V_NUM)
|
||||||
@@ -1185,6 +1201,7 @@ o_quomod(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = (res ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (res ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
|
|
||||||
freevalue(v3);
|
freevalue(v3);
|
||||||
freevalue(v4);
|
freevalue(v4);
|
||||||
@@ -1289,6 +1306,7 @@ o_not(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qzero_) : qlink(&_qone_));
|
stack->v_num = (r ? qlink(&_qzero_) : qlink(&_qone_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1335,6 +1353,7 @@ o_negate(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
negvalue(vp, &tmp);
|
negvalue(vp, &tmp);
|
||||||
@@ -1440,6 +1459,7 @@ o_abs(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1459,6 +1479,7 @@ o_norm(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
normvalue(vp, &tmp);
|
normvalue(vp, &tmp);
|
||||||
@@ -1483,6 +1504,7 @@ o_square(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
squarevalue(vp, &tmp);
|
squarevalue(vp, &tmp);
|
||||||
@@ -1503,6 +1525,7 @@ o_test(void)
|
|||||||
i = testvalue(vp);
|
i = testvalue(vp);
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = i ? qlink(&_qone_) : qlink(&_qzero_);
|
stack->v_num = i ? qlink(&_qone_) : qlink(&_qzero_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1534,6 +1557,7 @@ o_links(void)
|
|||||||
if (!haveaddress)
|
if (!haveaddress)
|
||||||
links--;
|
links--;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = itoq(links);
|
stack->v_num = itoq(links);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1584,6 +1608,7 @@ o_bit (void)
|
|||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
stack->v_num = itoq(r);
|
stack->v_num = itoq(r);
|
||||||
}
|
}
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1628,6 +1653,7 @@ o_highbit (void)
|
|||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = itoq(index);
|
stack->v_num = itoq(index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1679,6 +1705,7 @@ o_lowbit (void)
|
|||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = itoq(index);
|
stack->v_num = itoq(index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1772,6 +1799,7 @@ o_istype(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq((long) r);
|
stack->v_num = itoq((long) r);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1788,6 +1816,7 @@ o_isint(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (qisint(vp->v_num))
|
if (qisint(vp->v_num))
|
||||||
@@ -1798,6 +1827,7 @@ o_isint(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1822,10 +1852,12 @@ o_isnum(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
stack->v_num = qlink(&_qone_);
|
stack->v_num = qlink(&_qone_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1841,10 +1873,12 @@ o_ismat(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = qlink(&_qone_);
|
stack->v_num = qlink(&_qone_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1862,6 +1896,7 @@ o_islist(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1878,6 +1913,7 @@ o_isobj(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1894,6 +1930,7 @@ o_isstr(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1910,6 +1947,7 @@ o_isfile(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1926,6 +1964,7 @@ o_isrand(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1942,6 +1981,7 @@ o_israndom(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1958,6 +1998,7 @@ o_isconfig(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1976,6 +2017,7 @@ o_ishash(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq((long) r);
|
stack->v_num = itoq((long) r);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1992,6 +2034,7 @@ o_isassoc(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2012,6 +2055,7 @@ o_isblock(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq(r);
|
stack->v_num = itoq(r);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2028,6 +2072,7 @@ o_isoctet(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq(r);
|
stack->v_num = itoq(r);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2050,6 +2095,7 @@ o_isptr(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq(r);
|
stack->v_num = itoq(r);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2079,6 +2125,7 @@ o_isdefined(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq(r);
|
stack->v_num = itoq(r);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2099,6 +2146,7 @@ o_isobjtype(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq(index >= 0);
|
stack->v_num = itoq(index >= 0);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2122,6 +2170,7 @@ o_issimple(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
stack->v_num = (r ? qlink(&_qone_) : qlink(&_qzero_));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2138,11 +2187,13 @@ o_isodd(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = qlink(&_qone_);
|
stack->v_num = qlink(&_qone_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2159,11 +2210,13 @@ o_iseven(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = qlink(&_qone_);
|
stack->v_num = qlink(&_qone_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2180,11 +2233,13 @@ o_isreal(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = qlink(&_qone_);
|
stack->v_num = qlink(&_qone_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2200,11 +2255,13 @@ o_isnull(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = qlink(&_qone_);
|
stack->v_num = qlink(&_qone_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2221,6 +2278,7 @@ o_re(void)
|
|||||||
if (stack->v_type == V_ADDR) {
|
if (stack->v_type == V_ADDR) {
|
||||||
stack->v_num = qlink(vp->v_num);
|
stack->v_num = qlink(vp->v_num);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2233,6 +2291,7 @@ o_re(void)
|
|||||||
comfree(stack->v_com);
|
comfree(stack->v_com);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2250,6 +2309,7 @@ o_im(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (vp->v_type != V_COM) {
|
if (vp->v_type != V_COM) {
|
||||||
@@ -2261,6 +2321,7 @@ o_im(void)
|
|||||||
comfree(stack->v_com);
|
comfree(stack->v_com);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2277,6 +2338,7 @@ o_conjugate(void)
|
|||||||
if (stack->v_type == V_ADDR) {
|
if (stack->v_type == V_ADDR) {
|
||||||
stack->v_num = qlink(vp->v_num);
|
stack->v_num = qlink(vp->v_num);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2382,6 +2444,7 @@ o_sgn(void)
|
|||||||
qfree(vp->v_num);
|
qfree(vp->v_num);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sgnvalue(vp, &tmp);
|
sgnvalue(vp, &tmp);
|
||||||
@@ -2410,6 +2473,7 @@ o_numerator(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2431,6 +2495,7 @@ o_denominator(void)
|
|||||||
qfree(stack->v_num);
|
qfree(stack->v_num);
|
||||||
stack->v_num = q;
|
stack->v_num = q;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2687,6 +2752,7 @@ o_eq(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq((long) (r == 0));
|
stack->v_num = itoq((long) (r == 0));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2707,6 +2773,7 @@ o_ne(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_num = itoq((long) (r != 0));
|
stack->v_num = itoq((long) (r != 0));
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2727,15 +2794,15 @@ o_le(void)
|
|||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
|
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
if (tmp.v_type == V_NUM) {
|
if (tmp.v_type == V_NUM) {
|
||||||
stack->v_num = !qispos(tmp.v_num) ? qlink(&_qone_):
|
stack->v_num = !qispos(tmp.v_num) ? qlink(&_qone_):
|
||||||
qlink(&_qzero_);
|
qlink(&_qzero_);
|
||||||
}
|
} else if (tmp.v_type == V_COM) {
|
||||||
else if (tmp.v_type == V_COM) {
|
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
stack->v_type = V_NULL;
|
stack->v_type = V_NULL;
|
||||||
|
}
|
||||||
freevalue(&tmp);
|
freevalue(&tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2756,14 +2823,13 @@ o_ge(void)
|
|||||||
freevalue(stack--);
|
freevalue(stack--);
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
if (tmp.v_type == V_NUM) {
|
if (tmp.v_type == V_NUM) {
|
||||||
stack->v_num = !qisneg(tmp.v_num) ? qlink(&_qone_):
|
stack->v_num = !qisneg(tmp.v_num) ? qlink(&_qone_):
|
||||||
qlink(&_qzero_);
|
qlink(&_qzero_);
|
||||||
}
|
} else if (tmp.v_type == V_COM) {
|
||||||
else if (tmp.v_type == V_COM) {
|
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
stack->v_type = V_NULL;
|
stack->v_type = V_NULL;
|
||||||
}
|
}
|
||||||
freevalue(&tmp);
|
freevalue(&tmp);
|
||||||
@@ -2786,15 +2852,15 @@ o_lt(void)
|
|||||||
freevalue(stack--);
|
freevalue(stack--);
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
if (tmp.v_type == V_NUM) {
|
if (tmp.v_type == V_NUM) {
|
||||||
stack->v_num = qisneg(tmp.v_num) ? qlink(&_qone_):
|
stack->v_num = qisneg(tmp.v_num) ? qlink(&_qone_):
|
||||||
qlink(&_qzero_);
|
qlink(&_qzero_);
|
||||||
}
|
} else if (tmp.v_type == V_COM) {
|
||||||
else if (tmp.v_type == V_COM) {
|
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
stack->v_type = V_NULL;
|
stack->v_type = V_NULL;
|
||||||
|
}
|
||||||
freevalue(&tmp);
|
freevalue(&tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2815,15 +2881,15 @@ o_gt(void)
|
|||||||
freevalue(stack--);
|
freevalue(stack--);
|
||||||
freevalue(stack);
|
freevalue(stack);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
if (tmp.v_type == V_NUM) {
|
if (tmp.v_type == V_NUM) {
|
||||||
stack->v_num = qispos(tmp.v_num) ? qlink(&_qone_):
|
stack->v_num = qispos(tmp.v_num) ? qlink(&_qone_):
|
||||||
qlink(&_qzero_);
|
qlink(&_qzero_);
|
||||||
}
|
} else if (tmp.v_type == V_COM) {
|
||||||
else if (tmp.v_type == V_COM) {
|
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
stack->v_type = V_NULL;
|
stack->v_type = V_NULL;
|
||||||
|
}
|
||||||
freevalue(&tmp);
|
freevalue(&tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2886,6 +2952,7 @@ o_postinc(void)
|
|||||||
if (stack->v_type == V_OCTET) {
|
if (stack->v_type == V_OCTET) {
|
||||||
stack[1] = stack[0];
|
stack[1] = stack[0];
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = itoq((long) stack->v_octet[0]);
|
stack->v_num = itoq((long) stack->v_octet[0]);
|
||||||
stack++;
|
stack++;
|
||||||
stack->v_octet[0]++;
|
stack->v_octet[0]++;
|
||||||
@@ -2938,8 +3005,8 @@ o_postdec(void)
|
|||||||
freevalue(vp);
|
freevalue(vp);
|
||||||
*vp = tmp;
|
*vp = tmp;
|
||||||
stack->v_type = V_ADDR;
|
stack->v_type = V_ADDR;
|
||||||
stack->v_addr = vp;
|
|
||||||
stack->v_subtype = V_NOSUBTYPE;
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
|
stack->v_addr = vp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3067,6 +3134,7 @@ o_zero(void)
|
|||||||
{
|
{
|
||||||
stack++;
|
stack++;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = qlink(&_qzero_);
|
stack->v_num = qlink(&_qzero_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3076,6 +3144,7 @@ o_one(void)
|
|||||||
{
|
{
|
||||||
stack++;
|
stack++;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = qlink(&_qone_);
|
stack->v_num = qlink(&_qone_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3162,6 +3231,7 @@ o_getepsilon(void)
|
|||||||
{
|
{
|
||||||
stack++;
|
stack++;
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_num = qlink(conf->epsilon);
|
stack->v_num = qlink(conf->epsilon);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3185,6 +3255,7 @@ o_setepsilon(void)
|
|||||||
if (stack->v_type == V_NUM)
|
if (stack->v_type == V_NUM)
|
||||||
qfree(newep);
|
qfree(newep);
|
||||||
stack->v_type = V_NUM;
|
stack->v_type = V_NUM;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3254,6 +3325,7 @@ updateoldvalue(FUNC *fp)
|
|||||||
freevalue(&oldvalue);
|
freevalue(&oldvalue);
|
||||||
oldvalue = fp->f_savedvalue;
|
oldvalue = fp->f_savedvalue;
|
||||||
fp->f_savedvalue.v_type = V_NULL;
|
fp->f_savedvalue.v_type = V_NULL;
|
||||||
|
fp->f_savedvalue.v_subtype = V_NOSUBTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -3275,6 +3347,7 @@ error_value(int e)
|
|||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
res.v_type = (short) -e;
|
res.v_type = (short) -e;
|
||||||
|
res.v_subtype = V_NOSUBTYPE;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
value.c
10
value.c
@@ -192,6 +192,7 @@ copyvalue(VALUE *oldvp, VALUE *newvp)
|
|||||||
break;
|
break;
|
||||||
case V_OCTET:
|
case V_OCTET:
|
||||||
newvp->v_type = V_NUM;
|
newvp->v_type = V_NUM;
|
||||||
|
newvp->v_subtype = V_NOSUBTYPE;
|
||||||
newvp->v_num = itoq((long) *oldvp->v_octet);
|
newvp->v_num = itoq((long) *oldvp->v_octet);
|
||||||
break;
|
break;
|
||||||
case V_NBLOCK:
|
case V_NBLOCK:
|
||||||
@@ -310,6 +311,7 @@ negvalue(VALUE *vp, VALUE *vres)
|
|||||||
return;
|
return;
|
||||||
case V_OCTET:
|
case V_OCTET:
|
||||||
vres->v_type = V_NUM;
|
vres->v_type = V_NUM;
|
||||||
|
vres->v_subtype = V_NOSUBTYPE;
|
||||||
vres->v_num = itoq(- (long) *vp->v_octet);
|
vres->v_num = itoq(- (long) *vp->v_octet);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -341,6 +343,7 @@ addnumeric(VALUE *v1, VALUE *v2, VALUE *vres)
|
|||||||
/*
|
/*
|
||||||
* add numeric values
|
* add numeric values
|
||||||
*/
|
*/
|
||||||
|
vres->v_subtype = V_NOSUBTYPE;
|
||||||
switch (TWOVAL(v1->v_type, v2->v_type)) {
|
switch (TWOVAL(v1->v_type, v2->v_type)) {
|
||||||
case TWOVAL(V_NUM, V_NUM):
|
case TWOVAL(V_NUM, V_NUM):
|
||||||
vres->v_num = qqadd(v1->v_num, v2->v_num);
|
vres->v_num = qqadd(v1->v_num, v2->v_num);
|
||||||
@@ -2418,9 +2421,11 @@ acceptvalue(VALUE *v1, VALUE *v2)
|
|||||||
if (fp) {
|
if (fp) {
|
||||||
++stack;
|
++stack;
|
||||||
stack->v_type = V_ADDR;
|
stack->v_type = V_ADDR;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_addr = v1;
|
stack->v_addr = v1;
|
||||||
++stack;
|
++stack;
|
||||||
stack->v_type = V_ADDR;
|
stack->v_type = V_ADDR;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_addr = v2;
|
stack->v_addr = v2;
|
||||||
calculate(fp, 2);
|
calculate(fp, 2);
|
||||||
ret = testvalue(stack);
|
ret = testvalue(stack);
|
||||||
@@ -2445,9 +2450,11 @@ precvalue(VALUE *v1, VALUE *v2)
|
|||||||
if (fp) {
|
if (fp) {
|
||||||
++stack;
|
++stack;
|
||||||
stack->v_type = V_ADDR;
|
stack->v_type = V_ADDR;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_addr = v1;
|
stack->v_addr = v1;
|
||||||
++stack;
|
++stack;
|
||||||
stack->v_type = V_ADDR;
|
stack->v_type = V_ADDR;
|
||||||
|
stack->v_subtype = V_NOSUBTYPE;
|
||||||
stack->v_addr = v2;
|
stack->v_addr = v2;
|
||||||
calculate(fp, 2);
|
calculate(fp, 2);
|
||||||
ret = testvalue(stack);
|
ret = testvalue(stack);
|
||||||
@@ -2630,6 +2637,7 @@ sgnvalue(VALUE *vp, VALUE *vres)
|
|||||||
switch (vp->v_type) {
|
switch (vp->v_type) {
|
||||||
case V_NUM:
|
case V_NUM:
|
||||||
vres->v_num = qsign(vp->v_num);
|
vres->v_num = qsign(vp->v_num);
|
||||||
|
vres->v_subtype = vp->v_subtype;
|
||||||
return;
|
return;
|
||||||
case V_COM:
|
case V_COM:
|
||||||
c = comalloc();
|
c = comalloc();
|
||||||
@@ -2639,9 +2647,11 @@ sgnvalue(VALUE *vp, VALUE *vres)
|
|||||||
c->imag = qsign(vp->v_com->imag);
|
c->imag = qsign(vp->v_com->imag);
|
||||||
vres->v_com = c;
|
vres->v_com = c;
|
||||||
vres->v_type = V_COM;
|
vres->v_type = V_COM;
|
||||||
|
vres->v_subtype = V_NOSUBTYPE;
|
||||||
return;
|
return;
|
||||||
case V_OCTET:
|
case V_OCTET:
|
||||||
vres->v_type = V_NUM;
|
vres->v_type = V_NUM;
|
||||||
|
vres->v_subtype = V_NOSUBTYPE;
|
||||||
vres->v_num = itoq((long) (*vp->v_octet != 0));
|
vres->v_num = itoq((long) (*vp->v_octet != 0));
|
||||||
return;
|
return;
|
||||||
case V_OBJ:
|
case V_OBJ:
|
||||||
|
@@ -18,7 +18,7 @@ static char *program;
|
|||||||
#define MAJOR_VER 2 /* major version */
|
#define MAJOR_VER 2 /* major version */
|
||||||
#define MINOR_VER 11 /* minor version */
|
#define MINOR_VER 11 /* minor version */
|
||||||
#define MAJOR_PATCH 0 /* patch level or 0 if no patch */
|
#define MAJOR_PATCH 0 /* patch level or 0 if no patch */
|
||||||
#define MINOR_PATCH "9.4.4" /* test number or empty string if no patch */
|
#define MINOR_PATCH "9.4.5" /* test number or empty string if no patch */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc version constants
|
* calc version constants
|
||||||
|
6
zmath.c
6
zmath.c
@@ -740,11 +740,11 @@ done: while (m > 0 && A[m - 1] == 0)
|
|||||||
f = *b & 1 ? TOPHALF : 0;
|
f = *b & 1 ? TOPHALF : 0;
|
||||||
}
|
}
|
||||||
if (g == BASE && f == 0) {
|
if (g == BASE && f == 0) {
|
||||||
while (i-- && (*a-- | *b--) == 0);
|
while ((--i > 0) && ((*--a | *--b) == 0));
|
||||||
t = (i > 0);
|
t = (i > 0);
|
||||||
}
|
} else if (g >= BASE) {
|
||||||
else if (g >= BASE)
|
|
||||||
t = 1;
|
t = 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
while (--i > 0) {
|
while (--i > 0) {
|
||||||
g = (FULL) *--a - (*--b >> 1 | f);
|
g = (FULL) *--a - (*--b >> 1 | f);
|
||||||
|
64
zmul.c
64
zmul.c
@@ -280,6 +280,8 @@ domul(HALF *v1, LEN size1, HALF *v2, LEN size2, HALF *ans)
|
|||||||
baseA = v1 + shift;
|
baseA = v1 + shift;
|
||||||
baseB = v1;
|
baseB = v1;
|
||||||
/*
|
/*
|
||||||
|
* XXX - is this still an issue?
|
||||||
|
*
|
||||||
* Saber-C Version 3.1 says:
|
* Saber-C Version 3.1 says:
|
||||||
*
|
*
|
||||||
* W#26, Storing a bad pointer into auto variable dmul`baseC.
|
* W#26, Storing a bad pointer into auto variable dmul`baseC.
|
||||||
@@ -296,11 +298,13 @@ domul(HALF *v1, LEN size1, HALF *v2, LEN size2, HALF *ans)
|
|||||||
* config("mul2", 2);
|
* config("mul2", 2);
|
||||||
* pmod(3,a-1,a);
|
* pmod(3,a-1,a);
|
||||||
*
|
*
|
||||||
|
* [[ NOTE: The above code no longer invokes this code. ]]
|
||||||
|
*
|
||||||
* When this code is executed, shift == 6 and v2 is 3 shorts
|
* When this code is executed, shift == 6 and v2 is 3 shorts
|
||||||
* long (size2 == 2). This baseC points 3 shorts beyond the
|
* long (size2 == 2). This baseC points 3 shorts beyond the
|
||||||
* allocated end of v2.
|
* allocated end of v2.
|
||||||
*
|
*
|
||||||
* The stack was as follows:
|
* The stack was as follows: [[NOTE: line numbers may have changed]]
|
||||||
*
|
*
|
||||||
* domul(v1=0x2d93d8, size1=12,
|
* domul(v1=0x2d93d8, size1=12,
|
||||||
* v2=0x2ded30, size2=2, ans=0x2ee8a8) at "zmul.c":313
|
* v2=0x2ded30, size2=2, ans=0x2ee8a8) at "zmul.c":313
|
||||||
@@ -314,6 +318,64 @@ domul(HALF *v1, LEN size1, HALF *v2, LEN size2, HALF *ans)
|
|||||||
* evaluate(...) at "codegen.c":170
|
* evaluate(...) at "codegen.c":170
|
||||||
* getcommands(...) at "codegen.c":109
|
* getcommands(...) at "codegen.c":109
|
||||||
* main(...) at "calc.c":167
|
* main(...) at "calc.c":167
|
||||||
|
*
|
||||||
|
* The final domul() call point is the next executable line below.
|
||||||
|
*
|
||||||
|
****
|
||||||
|
*
|
||||||
|
* The insure tool also reports a problem at this position:
|
||||||
|
*
|
||||||
|
* [zmul.c:319] **COPY_BAD_RANGE**
|
||||||
|
* >> baseC = v2 + shift;
|
||||||
|
*
|
||||||
|
* Copying pointer which is out-of-range: v2 + shift
|
||||||
|
*
|
||||||
|
* [[NOTE: line numbers may have changed]]
|
||||||
|
*
|
||||||
|
* Pointer : 0x1400919cc
|
||||||
|
* Actual block : 0x140090c80 thru 0x140090def (368 bytes,92 elements)
|
||||||
|
* hp, allocated at:
|
||||||
|
* malloc()
|
||||||
|
* alloc() zmath.c, 221
|
||||||
|
* zmul() zmul.c, 73
|
||||||
|
* ztenpow() zfunc.c, 441
|
||||||
|
* str2q() qio.c, 537
|
||||||
|
* addnumber() const.c, 52
|
||||||
|
* eatnumber() token.c, 594
|
||||||
|
* gettoken() token.c, 319
|
||||||
|
* getcallargs() codegen.c, 2358
|
||||||
|
*
|
||||||
|
* Stack trace where the error occurred:
|
||||||
|
* domul() zmul.c, 319
|
||||||
|
* zmul() zmul.c, 74
|
||||||
|
* ztenpow() zfunc.c, 441
|
||||||
|
* str2q() qio.c, 537
|
||||||
|
* addnumber() const.c, 52
|
||||||
|
* eatnumber() token.c, 594
|
||||||
|
* gettoken() token.c, 319
|
||||||
|
* getcallargs() codegen.c, 2358
|
||||||
|
* getidexpr() codegen.c, 1998
|
||||||
|
* getterm() codegen.c, 1936
|
||||||
|
* getincdecexpr() codegen.c, 1820
|
||||||
|
* getreference() codegen.c, 1804
|
||||||
|
* getshiftexpr() codegen.c, 1758
|
||||||
|
* getandexpr() codegen.c, 1704
|
||||||
|
* getorexpr() codegen.c, 1682
|
||||||
|
* getproduct() codegen.c, 1654
|
||||||
|
* getsum() codegen.c, 1626
|
||||||
|
* getrelation() codegen.c, 1585
|
||||||
|
* getandcond() codegen.c, 1556
|
||||||
|
* getorcond() codegen.c, 1532
|
||||||
|
* getaltcond() codegen.c, 1499
|
||||||
|
* getassignment() codegen.c, 1442
|
||||||
|
* getopassignment() codegen.c, 1352
|
||||||
|
* getexprlist() codegen.c, 1318
|
||||||
|
* getstatement() codegen.c, 921
|
||||||
|
* evaluate() codegen.c, 219
|
||||||
|
* getcommands() codegen.c, 165
|
||||||
|
* main() calc.c, 321
|
||||||
|
*
|
||||||
|
* The final domul() call point is the next executable line below.
|
||||||
*/
|
*/
|
||||||
/* ok to ignore on name domul`baseC */
|
/* ok to ignore on name domul`baseC */
|
||||||
baseC = v2 + shift;
|
baseC = v2 + shift;
|
||||||
|
@@ -2527,7 +2527,8 @@ random_libcalc_cleanup(void)
|
|||||||
static void
|
static void
|
||||||
zfree_random(ZVALUE z)
|
zfree_random(ZVALUE z)
|
||||||
{
|
{
|
||||||
if (z.v != h_ndefvec && z.v != h_rdefvec && z.v != h_rdefvec_2 &&
|
if (z.v != NULL &&
|
||||||
|
z.v != h_ndefvec && z.v != h_rdefvec && z.v != h_rdefvec_2 &&
|
||||||
z.v != h_nvec01 && z.v != h_rvec01 &&
|
z.v != h_nvec01 && z.v != h_rvec01 &&
|
||||||
z.v != h_nvec02 && z.v != h_rvec02 &&
|
z.v != h_nvec02 && z.v != h_rvec02 &&
|
||||||
z.v != h_nvec03 && z.v != h_rvec03 &&
|
z.v != h_nvec03 && z.v != h_rvec03 &&
|
||||||
|
Reference in New Issue
Block a user