introduced the em_code(3L) and em_mes(3L) modules

This commit is contained in:
erikb 1986-03-25 16:40:43 +00:00
parent 1afbf0e20f
commit 80155f7b4c
23 changed files with 99 additions and 177 deletions

View file

@ -34,9 +34,6 @@ decspecs.str
def.str
domacro.c
dumpidf.c
em.c
em.h
emcode.def
error.c
eval.c
expr.c
@ -58,8 +55,6 @@ level.h
macro.str
main.c
make.allocd
make.emfun
make.emmac
make.hfiles
make.next
make.tokcase

View file

@ -189,8 +189,12 @@ go_on: /* rescan, the following character has been read */
case '<':
if (AccFileSpecifier) {
PushBack(); /* pushback nch */
ptok->tk_str =
string_token("file specifier", '>');
ptok->tk_bts =
string_token(
"file specifier",
'>',
&(ptok->tk_len)
);
return ptok->tk_symb = FILESPECIFIER;
}
if (nch == '<')
@ -310,6 +314,8 @@ go_on: /* rescan, the following character has been read */
}
if (ch == '\\') {
LoadChar(ch);
if (ch == '\n')
LineNumber++;
ch = quoted(ch);
}
val = val*256 + ch;
@ -323,7 +329,7 @@ go_on: /* rescan, the following character has been read */
return ptok->tk_symb = INTEGER;
}
case STSTR: /* string */
ptok->tk_str = string_token("string", '"');
ptok->tk_bts = string_token("string", '"', &(ptok->tk_len));
return ptok->tk_symb = STRING;
case STNUM: /* a numeric constant */
{
@ -466,8 +472,9 @@ skipcomment()
}
char *
string_token(nm, stop_char)
string_token(nm, stop_char, plen)
char *nm;
int *plen;
{
register int ch;
register int str_size;
@ -486,28 +493,18 @@ string_token(nm, stop_char)
break;
}
if (ch == '\\') {
register int nch;
LoadChar(nch);
if (nch == '\n') {
LoadChar(ch);
if (ch == '\n')
LineNumber++;
LoadChar(ch);
continue;
}
else {
str[pos++] = '\\';
if (pos == str_size)
str = Srealloc(str,
str_size += RSTRSIZE);
ch = nch;
}
ch = quoted(ch);
}
str[pos++] = ch;
if (pos == str_size)
str = Srealloc(str, str_size += RSTRSIZE);
LoadChar(ch);
}
str[pos++] = '\0';
str[pos++] = '\0'; /* for filenames etc. */
*plen = pos;
return str;
}

View file

@ -13,7 +13,10 @@ struct token {
unsigned int tok_line; /* the line it (probably) comes from */
union {
struct idf *tok_idf; /* for IDENTIFIER & TYPE_IDENTIFIER */
char *tok_str; /* for STRING: text */
struct { /* for STRING */
char *tok_bts; /* row of bytes */
int tok_len; /* length of row of bytes */
} tok_string;
struct { /* for INTEGER */
int tok_fund; /* INT or LONG */
arith tok_ival;
@ -26,7 +29,8 @@ struct token {
#define tk_file tok_file
#define tk_line tok_line
#define tk_idf tok_data.tok_idf
#define tk_str tok_data.tok_str
#define tk_bts tok_data.tok_string.tok_bts
#define tk_len tok_data.tok_string.tok_len
#define tk_fund tok_data.tok_integer.tok_fund
#define tk_ival tok_data.tok_integer.tok_ival
#define tk_fval tok_data.tok_fval

View file

@ -37,7 +37,8 @@ insert_token(tk)
dot.tk_idf = str2idf("int");
break;
case STRING:
dot.tk_str = Salloc("", 1);
dot.tk_bts = Salloc("", 1);
dot.tk_len = 1;
break;
case INTEGER:
dot.tk_fund = INT;

View file

@ -9,7 +9,9 @@ EM_INCLUDES =$(EM)/h# # directory containing EM interface definition
# Libraries
SYSLIB = /user1/erikb/em/lib/libsystem.a
LIBS = $(SYSLIB)
EMLIB = /user1/erikb/em/lib/libemk.a
EMMESLIB = /user1/erikb/em/lib/libem_mes.a
LIBS = $(EMMESLIB) $(EMLIB) $(SYSLIB)
LIB_INCLUDES = /user1/erikb/em/h
# Where to install the compiler and its driver
@ -42,23 +44,22 @@ COBJ = main.o idf.o declarator.o decspecs.o struct.o \
input.o domacro.o replace.o init.o options.o \
scan.o skip.o stack.o type.o ch7mon.o label.o eval.o \
switch.o storage.o ival.o conversion.o \
em.o blocks.o dataflow.o string.o
blocks.o dataflow.o string.o
# Objects of other generated C files
GOBJ = char.o symbol2str.o next.o writeem.o
GOBJ = char.o symbol2str.o next.o
# generated source files
GSRC = char.c symbol2str.c next.c writeem.c \
GSRC = char.c symbol2str.c next.c \
code.h declar.h decspecs.h def.h expr.h field.h \
idf.h macro.h stack.h struct.h switch.h type.h \
writeem.h
idf.h macro.h stack.h struct.h switch.h type.h
# .h files generated by `make hfiles'; PLEASE KEEP THIS UP-TO-DATE!
GHSRC = botch_free.h dataflow.h debug.h density.h errout.h \
idepth.h idfsize.h ifdepth.h inputtype.h inumlength.h lapbuf.h \
maxincl.h myalloc.h nobitfield.h nopp.h \
nparams.h numsize.h parbufsize.h pathlength.h predefine.h \
proc_intf.h strsize.h target_sizes.h textsize.h use_tmp.h \
strsize.h target_sizes.h textsize.h use_tmp.h \
str_params.h spec_arith.h
# Other generated files, for 'make clean' only
@ -119,12 +120,6 @@ struct.h: make.allocd
switch.h: make.allocd
type.h: make.allocd
writeem.c: make.emfun emcode.def
./make.emfun emcode.def >writeem.c
writeem.h: make.emmac emcode.def
./make.emmac emcode.def >writeem.h
# Objects needed for 'main'
OBJ = $(COBJ) $(LOBJ) $(GOBJ)
@ -199,40 +194,38 @@ ch7.o: Lpars.h arith.h assert.h debug.h def.h expr.h idf.h label.h nobitfield.h
ch7bin.o: Lpars.h arith.h botch_free.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h storage.h struct.h type.h
cstoper.o: Lpars.h arith.h expr.h idf.h label.h nobitfield.h nopp.h sizes.h spec_arith.h target_sizes.h type.h
arith.o: Lpars.h alloc.h arith.h botch_free.h expr.h field.h idf.h label.h mes.h nobitfield.h nopp.h spec_arith.h storage.h type.h
alloc.o: alloc.h assert.h debug.h myalloc.h
code.o: LLlex.h Lpars.h alloc.h arith.h assert.h atw.h botch_free.h code.h dataflow.h debug.h declar.h decspecs.h def.h em.h expr.h idf.h label.h level.h mes.h nobitfield.h nopp.h proc_intf.h sizes.h spec_arith.h specials.h stack.h storage.h type.h use_tmp.h writeem.h
alloc.o: alloc.h assert.h debug.h myalloc.h
code.o: LLlex.h Lpars.h alloc.h arith.h assert.h atw.h botch_free.h code.h dataflow.h debug.h declar.h decspecs.h def.h expr.h idf.h label.h level.h mes.h nobitfield.h nopp.h sizes.h spec_arith.h specials.h stack.h storage.h type.h use_tmp.h
dumpidf.o: Lpars.h arith.h debug.h def.h expr.h field.h idf.h label.h nobitfield.h nopp.h spec_arith.h stack.h struct.h type.h
error.o: LLlex.h arith.h debug.h em.h errout.h expr.h label.h nopp.h proc_intf.h spec_arith.h string.h tokenname.h use_tmp.h writeem.h
field.o: Lpars.h arith.h assert.h code.h debug.h em.h expr.h field.h idf.h label.h nobitfield.h nopp.h proc_intf.h sizes.h spec_arith.h type.h writeem.h
error.o: LLlex.h arith.h debug.h errout.h expr.h label.h nopp.h spec_arith.h string.h tokenname.h use_tmp.h
field.o: Lpars.h arith.h assert.h code.h debug.h expr.h field.h idf.h label.h nobitfield.h nopp.h sizes.h spec_arith.h type.h
tokenname.o: LLlex.h Lpars.h arith.h idf.h nopp.h spec_arith.h tokenname.h
LLlex.o: LLlex.h Lpars.h alloc.h arith.h assert.h class.h debug.h def.h idf.h idfsize.h input.h nopp.h numsize.h sizes.h spec_arith.h strsize.h
LLmessage.o: LLlex.h Lpars.h alloc.h arith.h idf.h nopp.h spec_arith.h
input.o: LLlex.h alloc.h arith.h assert.h debug.h idepth.h input.h inputtype.h interface.h nopp.h pathlength.h spec_arith.h
input.o: LLlex.h alloc.h arith.h assert.h debug.h idepth.h input.h inputtype.h interface.h nopp.h pathlength.h spec_arith.h
domacro.o: LLlex.h Lpars.h alloc.h arith.h assert.h botch_free.h class.h debug.h idf.h idfsize.h ifdepth.h input.h interface.h macro.h nopp.h nparams.h parbufsize.h spec_arith.h storage.h textsize.h
replace.o: LLlex.h alloc.h arith.h assert.h class.h debug.h idf.h input.h interface.h macro.h nopp.h pathlength.h spec_arith.h string.h strsize.h
init.o: alloc.h class.h idf.h interface.h macro.h nopp.h predefine.h string.h
init.o: alloc.h class.h idf.h interface.h macro.h nopp.h predefine.h string.h
options.o: align.h arith.h class.h idf.h idfsize.h macro.h maxincl.h nobitfield.h nopp.h sizes.h spec_arith.h storage.h
scan.o: class.h idf.h input.h interface.h lapbuf.h macro.h nopp.h nparams.h
skip.o: LLlex.h arith.h class.h input.h interface.h nopp.h spec_arith.h
stack.o: Lpars.h alloc.h arith.h botch_free.h debug.h def.h em.h idf.h level.h mes.h nobitfield.h nopp.h proc_intf.h spec_arith.h stack.h storage.h struct.h type.h use_tmp.h writeem.h
stack.o: Lpars.h alloc.h arith.h botch_free.h debug.h def.h idf.h level.h mes.h nobitfield.h nopp.h spec_arith.h stack.h storage.h struct.h type.h use_tmp.h
type.o: Lpars.h align.h alloc.h arith.h def.h idf.h nobitfield.h nopp.h sizes.h spec_arith.h type.h
ch7mon.o: Lpars.h arith.h botch_free.h def.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h storage.h type.h
label.o: Lpars.h arith.h def.h idf.h label.h level.h nobitfield.h nopp.h spec_arith.h type.h
eval.o: Lpars.h align.h arith.h assert.h atw.h code.h dataflow.h debug.h def.h em.h expr.h idf.h label.h level.h mes.h nobitfield.h nopp.h proc_intf.h sizes.h spec_arith.h stack.h string.h type.h writeem.h
switch.o: arith.h assert.h botch_free.h code.h debug.h density.h em.h expr.h idf.h label.h nobitfield.h nopp.h proc_intf.h spec_arith.h storage.h switch.h type.h writeem.h
eval.o: Lpars.h align.h arith.h assert.h atw.h code.h dataflow.h debug.h def.h expr.h idf.h label.h level.h mes.h nobitfield.h nopp.h sizes.h spec_arith.h stack.h string.h type.h
switch.o: Lpars.h arith.h assert.h botch_free.h code.h debug.h density.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h storage.h switch.h type.h
storage.o: alloc.h assert.h botch_free.h debug.h storage.h
ival.o: Lpars.h align.h arith.h assert.h class.h debug.h def.h em.h expr.h field.h idf.h label.h level.h nobitfield.h nopp.h proc_intf.h sizes.h spec_arith.h string.h struct.h type.h writeem.h
conversion.o: Lpars.h arith.h em.h nobitfield.h proc_intf.h sizes.h spec_arith.h type.h writeem.h
em.o: arith.h em.h label.h proc_intf.h spec_arith.h writeem.h
blocks.o: arith.h atw.h em.h proc_intf.h sizes.h spec_arith.h writeem.h
ival.o: Lpars.h align.h arith.h assert.h class.h debug.h def.h expr.h field.h idf.h label.h level.h nobitfield.h nopp.h sizes.h spec_arith.h string.h struct.h type.h
conversion.o: Lpars.h arith.h nobitfield.h sizes.h spec_arith.h type.h
blocks.o: arith.h atw.h sizes.h spec_arith.h
dataflow.o: dataflow.h
string.o: arith.h nopp.h spec_arith.h str_params.h string.h
string.o: arith.h nopp.h spec_arith.h str_params.h string.h
tokenfile.o: Lpars.h
declar.o: LLlex.h Lpars.h arith.h debug.h declar.h decspecs.h def.h expr.h field.h idf.h label.h nobitfield.h nopp.h sizes.h spec_arith.h struct.h type.h
statement.o: LLlex.h Lpars.h arith.h botch_free.h code.h debug.h def.h em.h expr.h idf.h label.h nobitfield.h nopp.h proc_intf.h spec_arith.h stack.h storage.h type.h writeem.h
statement.o: LLlex.h Lpars.h arith.h botch_free.h code.h debug.h def.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h stack.h storage.h type.h
expression.o: LLlex.h Lpars.h arith.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h type.h
program.o: LLlex.h Lpars.h alloc.h arith.h code.h declar.h decspecs.h def.h expr.h idf.h label.h nobitfield.h nopp.h spec_arith.h type.h
Lpars.o: Lpars.h
char.o: class.h
symbol2str.o: Lpars.h
writeem.o: arith.h em.h label.h proc_intf.h spec_arith.h writeem.h

View file

@ -95,10 +95,6 @@
#define DEBUG 1 /* perform various self-tests */
!File: proc_intf.h
#define PROC_INTF 1 /* compile with procedural EM interface */
!File: use_tmp.h
#define USE_TMP 1 /* collect exa, exp, ina and inp commands
and let them precede the rest of

View file

@ -13,7 +13,7 @@
#ifndef SPECIAL_ARITHMETICS
#define arith long /* native */
#include <em_arith.h> /* obtain definition of "arith" */
#else SPECIAL_ARITHMETICS

View file

@ -1,8 +1,9 @@
/* $Header$ */
/* A S M */
asm_seen(s)
asm_seen(s, l)
char *s;
int l;
{
/* 'asm' '(' string ')' ';'
*/

View file

@ -1,7 +1,7 @@
/* $Header$ */
/* B L O C K S T O R I N G A N D L O A D I N G */
#include "em.h"
#include <em.h>
#include "arith.h"
#include "sizes.h"
#include "atw.h"

View file

@ -1,6 +1,8 @@
/* $Header$ */
/* C O D E - G E N E R A T I N G R O U T I N E S */
#include <em.h>
#include "dataflow.h"
#include "use_tmp.h"
#include "botch_free.h"
@ -15,7 +17,6 @@
#include "expr.h"
#include "sizes.h"
#include "stack.h"
#include "em.h"
#include "level.h"
#include "decspecs.h"
#include "declar.h"
@ -113,13 +114,13 @@ code_scope(text, def)
if (fund == FUNCTION)
C_exp(text);
else
C_exa(text);
C_exa_dnam(text);
break;
case STATIC:
if (fund == FUNCTION)
C_inp(text);
else
C_ina(text);
C_ina_dnam(text);
break;
}
}
@ -175,7 +176,10 @@ begin_proc(name, def) /* to be called when entering a procedure */
if (strcmp(last_fn_given, FileName) != 0) {
/* previous function came from other file */
C_df_dlb(file_name_label = data_label());
C_con_scon(last_fn_given = FileName, (arith)0);
C_con_scon(
last_fn_given = FileName,
(arith)(strlen(FileName) + 1)
);
}
/* enable debug trace of EM source */
C_fil_dlb(file_name_label, (arith)0);

View file

@ -1,9 +1,9 @@
/* $Header$ */
/* C O N V E R S I O N - C O D E G E N E R A T O R */
#include <em.h>
#include "arith.h"
#include "type.h"
#include "em.h"
#include "sizes.h"
#include "Lpars.h"

View file

@ -229,7 +229,7 @@ do_include()
AccFileSpecifier = 1;
if (((tok = GetToken(&tk)) == FILESPECIFIER) || tok == STRING)
filenm = tk.tk_str;
filenm = tk.tk_bts;
else {
lexerror("bad include syntax");
filenm = (char *)0;
@ -393,7 +393,7 @@ do_line(l)
LineNumber = l;
/* is there a filespecifier? */
if (GetToken(&tk) == STRING)
FileName = tk.tk_str;
FileName = tk.tk_bts;
SkipRestOfLine();
}
@ -652,7 +652,7 @@ domacro()
}
LineNumber = tk.tk_ival;
if ((tok = GetToken(&tk)) == STRING)
FileName = tk.tk_str;
FileName = tk.tk_bts;
else
if (tok != EOI) {
error("illegal # line");

View file

@ -2,6 +2,8 @@
/* E R R O R A N D D I A G N O S T I C R O U T I N E S */
#include <system.h>
#include <em.h>
#include "nopp.h"
#include "use_tmp.h"
#include "errout.h"
@ -13,7 +15,6 @@
#include "label.h"
#include "expr.h"
#include "LLlex.h"
#include "em.h"
/* This file contains the (non-portable) error-message and diagnostic
functions. Beware, they are called with a variable number of

View file

@ -12,6 +12,8 @@
compare()
*/
#include <em.h>
#include "debug.h"
#include "nobitfield.h"
@ -32,7 +34,6 @@
#include "align.h"
#include "mes.h"
#include "atw.h"
#include "em.h"
#define CRASH() crash("EVAL: CRASH at line %u", __LINE__)
#define roundup(n) ((n) < word_size ? word_size : (n))
@ -90,7 +91,7 @@ EVAL(expr, val, code, true_label, false_label)
label datlab = data_label();
C_df_dlb(datlab);
C_con_scon(expr->SG_VALUE, (arith)0);
C_con_scon(expr->SG_VALUE, (arith)expr->SG_LEN);
C_lae_dlb(datlab, (arith)0);
}
break;

View file

@ -200,7 +200,8 @@ string2expr(expr)
expr->ex_type = string_type;
expr->ex_lvalue = 0;
expr->ex_class = String;
expr->SG_VALUE = dot.tk_str;
expr->SG_VALUE = dot.tk_bts;
expr->SG_LEN = dot.tk_len;
expr->SG_DATLAB = 0;
}

View file

@ -11,7 +11,8 @@ struct value {
};
struct string {
char *sg_value; /* string of characters repr. the constant */
char *sg_value; /* row of bytes repr. the constant */
int sg_len; /* length of the row */
label sg_datlab; /* global data-label */
};
@ -55,6 +56,7 @@ struct expr {
#define VL_VALUE ex_object.ex_value.vl_value
#define VL_IDF ex_object.ex_value.vl_idf
#define SG_VALUE ex_object.ex_string.sg_value
#define SG_LEN ex_object.ex_string.sg_len
#define SG_DATLAB ex_object.ex_string.sg_datlab
#define FL_VALUE ex_object.ex_float.fl_value
#define FL_DATLAB ex_object.ex_float.fl_datlab

View file

@ -4,6 +4,8 @@
#include "nobitfield.h"
#ifndef NOBITFIELD
#include <em.h>
#include "debug.h"
#include "arith.h"
@ -16,7 +18,6 @@
#include "sizes.h"
#include "Lpars.h"
#include "field.h"
#include "em.h"
arith tmp_pointer_var(); /* eval.c */
char *symbol2str(); /* symbol2str.c */

View file

@ -1,11 +1,12 @@
/* $Header$ */
/* CODE FOR THE INITIALISATION OF GLOBAL VARIABLES */
#include <em.h>
#include "debug.h"
#include "nobitfield.h"
#include "string.h"
#include "em.h"
#include "arith.h"
#include "align.h"
#include "label.h"
@ -48,7 +49,7 @@ do_ival(tpp, expr)
*/
while (strings != 0) {
C_df_dlb(strings->SG_DATLAB);
C_con_scon(strings->SG_VALUE, (arith)0);
C_con_scon(strings->SG_VALUE, (arith)strings->SG_LEN);
strings = strings->next;
}
}
@ -97,32 +98,25 @@ IVAL(tpp, expr)
*/
if (tp->tp_up->tp_fund == CHAR && expr->ex_class == String)
init_string(tpp, expr);
else {
/* " int i[24] = 12;" */
else /* " int i[24] = 12;" */
check_and_pad(expr, tpp);
}
return 0; /* nothing left */
case STRUCT:
/* struct initialisation */
if (valid_type(tp, "struct") == 0)
return 0;
if (ISCOMMA(expr)) {
/* list of initialisation expressions */
if (ISCOMMA(expr)) /* list of initialisation expressions */
return do_struct(expr, tp);
}
/* "struct foo f = 12;" */
check_and_pad(expr, tpp);
return 0;
case UNION:
/* sorry, but .... */
error("union initialisation not allowed");
return 0;
case ERRONEOUS:
return 0;
default:
/* fundamental type */
if (ISCOMMA(expr)) {
/* " int i = {12};" */
default: /* fundamental type */
if (ISCOMMA(expr)) { /* " int i = {12};" */
if (IVAL(tpp, expr->OP_LEFT) != 0)
too_many_initialisers(expr);
/* return remainings of the list for the
@ -500,7 +494,7 @@ check_ival(expr, type)
{
label datlab = data_label();
C_ina_pt(datlab);
C_ina_dlb(datlab);
C_con_dlb(datlab, (arith)0);
expr->SG_DATLAB = datlab;
store_string(expr);
@ -557,8 +551,6 @@ check_ival(expr, type)
/* init_string() initialises an array of characters by specifying
a string constant.
Escaped characters should be converted into its corresponding
ASCII character value. E.g. '\000' -> (char) 0.
Alignment is taken care of.
*/
init_string(tpp, expr)
@ -570,7 +562,7 @@ init_string(tpp, expr)
char *s = expr->SG_VALUE;
arith ntopad;
length = prepare_string(s);
length = expr->SG_LEN;
if (tp->tp_size == (arith)-1) {
/* set the dimension */
tp = *tpp = construct_type(ARRAY, tp->tp_up, length);
@ -593,73 +585,6 @@ init_string(tpp, expr)
con_byte(0);
}
/* prepare_string() strips the escaped characters of a
string and replaces them by the ascii characters they stand for.
The ascii length of the resulting string is returned, including the
terminating null-character.
*/
int
prepare_string(str)
register char *str;
{
register char *t = str;
register count = 1; /* there's always a null at the end ! */
while (*str) {
count++;
if (*str == '\\') {
switch (*++str) {
case 'b':
*t++ = '\b';
str++;
break;
case 'f':
*t++ = '\f';
str++;
break;
case 'n':
*t++ = '\n';
str++;
break;
case 'r':
*t++ = '\r';
str++;
break;
case 't':
*t++ = '\t';
str++;
break;
/* octal value of: */
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
{
register cnt = 0, oct = 0;
do
oct = oct * 8 + *str - '0';
while (is_oct(*++str) && ++cnt < 3);
*t++ = (char) oct;
break;
}
default:
*t++ = *str++;
break;
}
}
else
*t++ = *str++;
}
*t = '\0'; /* don't forget this one !!! */
return count;
}
#ifndef NOBITFIELD
/* put_bf() takes care of the initialisation of (bit-)field
selectors of a struct: each time such an initialisation takes place,

View file

@ -1,7 +1,8 @@
/* $Header$ */
/* L A B E L D E F I N I T I O N */
#define label unsigned int
#include <em_label.h> /* obtain definition of "label" */
#define NO_LABEL (label) 0
extern label lab_count;

View file

@ -321,31 +321,24 @@ preprocess()
printf("\n#line %ld \"%s\"\n",
lastlineno, lastfilenm);
}
switch (DOT) {
case IDENTIFIER:
case TYPE_IDENTIFIER:
printf(dot.tk_idf->id_text);
printf(" ");
break;
case STRING:
printf("\"%s\" ", dot.tk_str);
printf("\"%s\" ", dot.tk_bts);
break;
case INTEGER:
printf("%ld ", dot.tk_ival);
break;
case FLOATING:
printf("%s ", dot.tk_fval);
break;
case EOI:
case EOF:
return;
default: /* very expensive... */
printf("%s ", symbol2str(DOT));
}

View file

@ -1,11 +1,14 @@
/* DERIVED FROM $Header$ */
/* S T A C K / U N S T A C K R O U T I N E S */
#include <system.h>
#include <em.h>
#include <em_reg.h>
#include "debug.h"
#include "use_tmp.h"
#include "botch_free.h"
#include <system.h>
#include "alloc.h"
#include "Lpars.h"
#include "arith.h"
@ -17,7 +20,6 @@
#include "storage.h"
#include "level.h"
#include "mes.h"
#include "em.h"
/* #include <em_reg.h> */

View file

@ -2,6 +2,8 @@
/* STATEMENT SYNTAX PARSER */
{
#include <em.h>
#include "debug.h"
#include "botch_free.h"
@ -13,7 +15,6 @@
#include "expr.h"
#include "code.h"
#include "storage.h"
#include "em.h"
#include "stack.h"
#include "def.h"
@ -386,16 +387,18 @@ compound_statement(arith *nbytes;):
;
asm_statement
{ char *asm_string;
{ char *asm_bts;
int asm_len;
}
:
ASM
'('
STRING
{ asm_string = dot.tk_str;
{ asm_bts = dot.tk_bts;
asm_len = dot.tk_len;
}
')'
';'
{ asm_seen(asm_string);
{ asm_seen(asm_bts, asm_len);
}
;

View file

@ -1,6 +1,8 @@
/* $Header$ */
/* S W I T C H - S T A T E M E N T A D M I N I S T R A T I O N */
#include <em.h>
#include "debug.h"
#include "botch_free.h"
#include "density.h"
@ -15,7 +17,6 @@
#include "assert.h"
#include "expr.h"
#include "type.h"
#include "em.h"
extern char options[];