Use libc assert(); fix dependencies; unbreak isduo().

Switch from custom assert() to libc assert() in mach/proto/as.
Continue to disable asserts if DEBUG == 0.

This change found a problem in the build system; comm2.y was missing
depedencies on comm0.h and comm1.h.  Add the missing dependencies to
the cppfile rule.  Allow the dependencies by modifying cppfile in
first/build.lua to act like cfile if t.dir is false.

Now that comm2.y gets rebuilt, I must fix the wrong prototype of
yyparse() in comm1.h.

I got unlucky as induo() in comm5.c was reading beyond the end of the
array.  It found an operator "= " ('=' then space) in the garbage, so
it returned a garbage token number, and "VAR = 123" became a syntax
error.  Unbreak induo() by terminating the array.
This commit is contained in:
George Koehler 2017-11-11 16:09:05 -05:00
parent 805c916ab0
commit ac4cbd735e
7 changed files with 17 additions and 30 deletions

View file

@ -92,8 +92,10 @@ definerule("cppfile",
local hdrpaths = {}
for _, t in pairs(e.deps) do
if t.dir then
hdrpaths[#hdrpaths+1] = "-I"..t.dir
end
end
hdrpaths = uniquify(hdrpaths)
return normalrule {

View file

@ -21,6 +21,8 @@ definerule("build_as",
srcs = { "mach/proto/as/comm2.y" },
outleaf = "comm2.y",
deps = {
"mach/proto/as/comm0.h",
"mach/proto/as/comm1.h",
"h+emheaders",
archlib,
},

View file

@ -105,16 +105,16 @@ _include "out.h"
#include "out.h"
#endif
#if DEBUG == 0
#define assert(ex) /* nothing */
/*
* Define assert(). Disable assertions if DEBUG == 0.
*/
#if DEBUG == 0 && !defined(NDEBUG)
#define NDEBUG
#endif
#if DEBUG == 1
#define assert(ex) {if (!(ex)) assert1();}
#endif
#if DEBUG == 2
#define assert(ex) {if (!(ex)) assert2(__FILE__, __LINE__);}
#ifdef _include
_include <assert.h>
#else
#include <assert.h>
#endif
#define CTRL(x) ((x) & 037)

View file

@ -105,7 +105,7 @@ extern int curr_token;
/* forward function declarations */
/* comm2.y */
void yyparse(void);
int yyparse(void);
/* comm4.c */
void stop(void);
void newmodule(const char *);

View file

@ -283,6 +283,7 @@ induo(int c)
('>'<<8) | '>', OP_RR,
('|'<<8) | '|', OP_OO,
('&'<<8) | '&', OP_AA,
0 /* terminates array */
};
short *p;

View file

@ -79,10 +79,8 @@ newident(item_t *ip, int typ)
void
newlabel(item_t *ip)
{
#if DEBUG != 0
#ifdef THREE_PASS
#if defined(THREE_PASS) && !defined(NDEBUG)
ADDR_T oldval = ip->i_valu;
#endif
#endif
if (DOTSCT == NULL)

View file

@ -406,22 +406,6 @@ void fatal(const char* s, ...)
va_end(ap);
}
#if DEBUG == 2
assert2(file, line)
char *file;
{
fatal("assertion failed (%s, %d)", file, line);
}
#endif
#if DEBUG == 1
assert1()
{
fatal("assertion failed");
abort();
}
#endif
/* VARARGS1 */
void serror(const char* s, ...)
{