Rename asm
to emit
, add __emit
as an alternate keyword.
This commit is contained in:
parent
ea8a77577f
commit
6119df8f2b
@ -311,7 +311,7 @@ typedef struct s_valuepair {
|
|||||||
*/
|
*/
|
||||||
#define tFIRST 256 /* value of first multi-character operator */
|
#define tFIRST 256 /* value of first multi-character operator */
|
||||||
#define tMIDDLE 280 /* value of last multi-character operator */
|
#define tMIDDLE 280 /* value of last multi-character operator */
|
||||||
#define tLAST 330 /* value of last multi-character match-able token */
|
#define tLAST 331 /* value of last multi-character match-able token */
|
||||||
/* multi-character operators */
|
/* multi-character operators */
|
||||||
#define taMULT 256 /* *= */
|
#define taMULT 256 /* *= */
|
||||||
#define taDIV 257 /* /= */
|
#define taDIV 257 /* /= */
|
||||||
@ -339,68 +339,69 @@ typedef struct s_valuepair {
|
|||||||
#define tDBLDOT 279 /* .. */
|
#define tDBLDOT 279 /* .. */
|
||||||
#define tDBLCOLON 280 /* :: */
|
#define tDBLCOLON 280 /* :: */
|
||||||
/* reserved words (statements) */
|
/* reserved words (statements) */
|
||||||
#define tASM 281
|
#define tASSERT 281
|
||||||
#define tASSERT 282
|
#define tBEGIN 282
|
||||||
#define tBEGIN 283
|
#define tBREAK 283
|
||||||
#define tBREAK 284
|
#define tCASE 284
|
||||||
#define tCASE 285
|
#define tCHAR 285
|
||||||
#define tCHAR 286
|
#define tCONST 286
|
||||||
#define tCONST 287
|
#define tCONTINUE 287
|
||||||
#define tCONTINUE 288
|
#define tDEFAULT 288
|
||||||
#define tDEFAULT 289
|
#define tDEFINED 289
|
||||||
#define tDEFINED 290
|
#define tDO 290
|
||||||
#define tDO 291
|
#define tELSE 291
|
||||||
#define tELSE 292
|
#define tEMIT 292
|
||||||
#define tEND 293
|
#define t__EMIT 293
|
||||||
#define tENUM 294
|
#define tEND 294
|
||||||
#define tEXIT 295
|
#define tENUM 295
|
||||||
#define tFOR 296
|
#define tEXIT 296
|
||||||
#define tFORWARD 297
|
#define tFOR 297
|
||||||
#define tGOTO 298
|
#define tFORWARD 298
|
||||||
#define tIF 299
|
#define tGOTO 299
|
||||||
#define tNATIVE 300
|
#define tIF 300
|
||||||
#define tNEW 301
|
#define tNATIVE 301
|
||||||
#define tOPERATOR 302
|
#define tNEW 302
|
||||||
#define tPUBLIC 303
|
#define tOPERATOR 303
|
||||||
#define tRETURN 304
|
#define tPUBLIC 304
|
||||||
#define tSIZEOF 305
|
#define tRETURN 305
|
||||||
#define tSLEEP 306
|
#define tSIZEOF 306
|
||||||
#define tSTATE 307
|
#define tSLEEP 307
|
||||||
#define tSTATIC 308
|
#define tSTATE 308
|
||||||
#define tSTOCK 309
|
#define tSTATIC 309
|
||||||
#define tSWITCH 310
|
#define tSTOCK 310
|
||||||
#define tTAGOF 311
|
#define tSWITCH 311
|
||||||
#define tTHEN 312
|
#define tTAGOF 312
|
||||||
#define tWHILE 313
|
#define tTHEN 313
|
||||||
|
#define tWHILE 314
|
||||||
/* compiler directives */
|
/* compiler directives */
|
||||||
#define tpASSERT 314 /* #assert */
|
#define tpASSERT 315 /* #assert */
|
||||||
#define tpDEFINE 315
|
#define tpDEFINE 316
|
||||||
#define tpELSE 316 /* #else */
|
#define tpELSE 317 /* #else */
|
||||||
#define tpELSEIF 317 /* #elseif */
|
#define tpELSEIF 318 /* #elseif */
|
||||||
#define tpEMIT 318
|
#define tpEMIT 319
|
||||||
#define tpENDIF 319
|
#define tpENDIF 320
|
||||||
#define tpENDINPUT 320
|
#define tpENDINPUT 321
|
||||||
#define tpENDSCRPT 321
|
#define tpENDSCRPT 322
|
||||||
#define tpERROR 322
|
#define tpERROR 323
|
||||||
#define tpFILE 323
|
#define tpFILE 324
|
||||||
#define tpIF 324 /* #if */
|
#define tpIF 325 /* #if */
|
||||||
#define tINCLUDE 325
|
#define tINCLUDE 326
|
||||||
#define tpLINE 326
|
#define tpLINE 327
|
||||||
#define tpPRAGMA 327
|
#define tpPRAGMA 328
|
||||||
#define tpTRYINCLUDE 328
|
#define tpTRYINCLUDE 329
|
||||||
#define tpUNDEF 329
|
#define tpUNDEF 330
|
||||||
#define tpWARNING 330
|
#define tpWARNING 331
|
||||||
/* semicolon is a special case, because it can be optional */
|
/* semicolon is a special case, because it can be optional */
|
||||||
#define tTERM 331 /* semicolon or newline */
|
#define tTERM 332 /* semicolon or newline */
|
||||||
#define tENDEXPR 332 /* forced end of expression */
|
#define tENDEXPR 333 /* forced end of expression */
|
||||||
/* other recognized tokens */
|
/* other recognized tokens */
|
||||||
#define tNUMBER 333 /* integer number */
|
#define tNUMBER 334 /* integer number */
|
||||||
#define tRATIONAL 334 /* rational number */
|
#define tRATIONAL 335 /* rational number */
|
||||||
#define tSYMBOL 335
|
#define tSYMBOL 336
|
||||||
#define tLABEL 336
|
#define tLABEL 337
|
||||||
#define tSTRING 337
|
#define tSTRING 338
|
||||||
#define tEXPR 338 /* for assigment to "lastst" only (see SC1.C) */
|
#define tEXPR 339 /* for assigment to "lastst" only (see SC1.C) */
|
||||||
#define tENDLESS 339 /* endless loop, for assigment to "lastst" only */
|
#define tENDLESS 340 /* endless loop, for assigment to "lastst" only */
|
||||||
|
|
||||||
/* (reversed) evaluation of staging buffer */
|
/* (reversed) evaluation of staging buffer */
|
||||||
#define sSTARTREORDER 0x01
|
#define sSTARTREORDER 0x01
|
||||||
@ -552,7 +553,7 @@ SC_FUNC symbol *add_builtin_constant(char *name,cell val,int vclass,int tag);
|
|||||||
SC_FUNC symbol *add_builtin_string_constant(char *name,const char *val,int vclass);
|
SC_FUNC symbol *add_builtin_string_constant(char *name,const char *val,int vclass);
|
||||||
SC_FUNC void exporttag(int tag);
|
SC_FUNC void exporttag(int tag);
|
||||||
SC_FUNC void sc_attachdocumentation(symbol *sym);
|
SC_FUNC void sc_attachdocumentation(symbol *sym);
|
||||||
SC_FUNC void asm_parse_line(void);
|
SC_FUNC void emit_parse_line(void);
|
||||||
|
|
||||||
/* function prototypes in SC2.C */
|
/* function prototypes in SC2.C */
|
||||||
#define PUSHSTK_P(v) { stkitem s_; s_.pv=(v); pushstk(s_); }
|
#define PUSHSTK_P(v) { stkitem s_; s_.pv=(v); pushstk(s_); }
|
||||||
@ -855,7 +856,7 @@ SC_VDECL FILE *outf; /* file written to */
|
|||||||
|
|
||||||
SC_VDECL jmp_buf errbuf; /* target of longjmp() on a fatal error */
|
SC_VDECL jmp_buf errbuf; /* target of longjmp() on a fatal error */
|
||||||
|
|
||||||
SC_VDECL int asm_block_parsing;
|
SC_VDECL int emit_block_parsing;
|
||||||
|
|
||||||
#if !defined SC_LIGHT
|
#if !defined SC_LIGHT
|
||||||
SC_VDECL int sc_makereport; /* generate a cross-reference report */
|
SC_VDECL int sc_makereport; /* generate a cross-reference report */
|
||||||
|
@ -137,14 +137,14 @@ static void dostate(void);
|
|||||||
static void addwhile(int *ptr);
|
static void addwhile(int *ptr);
|
||||||
static void delwhile(void);
|
static void delwhile(void);
|
||||||
static int *readwhile(void);
|
static int *readwhile(void);
|
||||||
static void doasm(void);
|
static void doemit(void);
|
||||||
|
|
||||||
typedef void (OPHANDLER_CALL *OPCODE_PROC)(char *name);
|
typedef void (OPHANDLER_CALL *OPCODE_PROC)(char *name);
|
||||||
typedef struct {
|
typedef struct {
|
||||||
cell opcode;
|
cell opcode;
|
||||||
char *name;
|
char *name;
|
||||||
OPCODE_PROC func;
|
OPCODE_PROC func;
|
||||||
} ASM_OPCODE;
|
} EMIT_OPCODE;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TEST_PLAIN, /* no parentheses */
|
TEST_PLAIN, /* no parentheses */
|
||||||
@ -886,7 +886,7 @@ static void resetglobals(void)
|
|||||||
sc_curstates=0;
|
sc_curstates=0;
|
||||||
pc_memflags=0;
|
pc_memflags=0;
|
||||||
pc_naked=FALSE;
|
pc_naked=FALSE;
|
||||||
asm_block_parsing=FALSE;
|
emit_block_parsing=FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void initglobals(void)
|
static void initglobals(void)
|
||||||
@ -1626,10 +1626,11 @@ static void parse(void)
|
|||||||
case 0:
|
case 0:
|
||||||
/* ignore zero's */
|
/* ignore zero's */
|
||||||
break;
|
break;
|
||||||
case tASM:
|
case tEMIT:
|
||||||
asm_block_parsing=FALSE;
|
case t__EMIT:
|
||||||
|
emit_block_parsing=FALSE;
|
||||||
lex(&val,&str);
|
lex(&val,&str);
|
||||||
asm_parse_line();
|
emit_parse_line();
|
||||||
break;
|
break;
|
||||||
case tNEW:
|
case tNEW:
|
||||||
if (getclassspec(tok,&fpublic,&fstatic,&fstock,&fconst))
|
if (getclassspec(tok,&fpublic,&fstatic,&fstock,&fconst))
|
||||||
@ -5065,11 +5066,11 @@ static void statement(int *lastindent,int allow_decl)
|
|||||||
errorset(sRESET,0);
|
errorset(sRESET,0);
|
||||||
|
|
||||||
tok=lex(&val,&st);
|
tok=lex(&val,&st);
|
||||||
if (tok==tASM) {
|
if (tok==tEMIT || tok==t__EMIT) {
|
||||||
doasm();
|
doemit();
|
||||||
return;
|
return;
|
||||||
} else if (asm_block_parsing) {
|
} else if (emit_block_parsing) {
|
||||||
asm_parse_line();
|
emit_parse_line();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (tok!='{') {
|
if (tok!='{') {
|
||||||
@ -5803,7 +5804,7 @@ static void check_empty(const unsigned char *lptr)
|
|||||||
error(38); /* extra characters on line */
|
error(38); /* extra characters on line */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void asm_invalid_token(int need_token, int current_token)
|
static void emit_invalid_token(int need_token, int current_token)
|
||||||
{
|
{
|
||||||
char s[sNAMEMAX+ 2];
|
char s[sNAMEMAX+ 2];
|
||||||
extern char *sc_tokens[];
|
extern char *sc_tokens[];
|
||||||
@ -5816,7 +5817,7 @@ static void asm_invalid_token(int need_token, int current_token)
|
|||||||
error(1,sc_tokens[tSYMBOL-tFIRST],s);
|
error(1,sc_tokens[tSYMBOL-tFIRST],s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void asm_param_num(char *name, ucell *p, int size)
|
static void emit_param_num(char *name, ucell *p, int size)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
cell val;
|
cell val;
|
||||||
@ -5877,7 +5878,7 @@ static void asm_param_num(char *name, ucell *p, int size)
|
|||||||
} while (++curp < size);
|
} while (++curp < size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void asm_param_data(char *name, ucell *p, int size)
|
static void emit_param_data(char *name, ucell *p, int size)
|
||||||
{
|
{
|
||||||
cell val;
|
cell val;
|
||||||
char *str;
|
char *str;
|
||||||
@ -5889,7 +5890,7 @@ static void asm_param_data(char *name, ucell *p, int size)
|
|||||||
do {
|
do {
|
||||||
tok=lex(&val,&str);
|
tok=lex(&val,&str);
|
||||||
if (tok!=tSYMBOL) {
|
if (tok!=tSYMBOL) {
|
||||||
asm_invalid_token(tSYMBOL, tok);
|
emit_invalid_token(tSYMBOL, tok);
|
||||||
} /* if */
|
} /* if */
|
||||||
sym=findloc(str);
|
sym=findloc(str);
|
||||||
if (sym==NULL || sym->vclass!=sSTATIC)
|
if (sym==NULL || sym->vclass!=sSTATIC)
|
||||||
@ -5906,33 +5907,33 @@ static void asm_param_data(char *name, ucell *p, int size)
|
|||||||
} while (++curp < size);
|
} while (++curp < size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_noop(char *name)
|
static void OPHANDLER_CALL emit_noop(char *name)
|
||||||
{
|
{
|
||||||
(void)name;
|
(void)name;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm0(char *name)
|
static void OPHANDLER_CALL emit_parm0(char *name)
|
||||||
{
|
{
|
||||||
outinstr(name, 0, NULL);
|
outinstr(name, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm1_num(char *name)
|
static void OPHANDLER_CALL emit_parm1_num(char *name)
|
||||||
{
|
{
|
||||||
ucell p[1];
|
ucell p[1];
|
||||||
|
|
||||||
asm_param_num(name, p, arraysize(p));
|
emit_param_num(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm1_gvar(char *name)
|
static void OPHANDLER_CALL emit_parm1_gvar(char *name)
|
||||||
{
|
{
|
||||||
ucell p[1];
|
ucell p[1];
|
||||||
|
|
||||||
asm_param_data(name, p, arraysize(p));
|
emit_param_data(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm1_lbl(char *name)
|
static void OPHANDLER_CALL emit_parm1_lbl(char *name)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
cell val;
|
cell val;
|
||||||
@ -5941,30 +5942,30 @@ static void OPHANDLER_CALL asm_parm1_lbl(char *name)
|
|||||||
|
|
||||||
tok=lex(&val,&str);
|
tok=lex(&val,&str);
|
||||||
if (tok!=tSYMBOL) {
|
if (tok!=tSYMBOL) {
|
||||||
asm_invalid_token(tSYMBOL, tok);
|
emit_invalid_token(tSYMBOL, tok);
|
||||||
} /* if */
|
} /* if */
|
||||||
sym=fetchlab(str);
|
sym=fetchlab(str);
|
||||||
sym->usage|=uREAD;
|
sym->usage|=uREAD;
|
||||||
outinstr(name,1,&sym->addr);
|
outinstr(name,1,&sym->addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm2_num(char *name)
|
static void OPHANDLER_CALL emit_parm2_num(char *name)
|
||||||
{
|
{
|
||||||
ucell p[2];
|
ucell p[2];
|
||||||
|
|
||||||
asm_param_num(name, p, arraysize(p));
|
emit_param_num(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm2_gvar(char *name)
|
static void OPHANDLER_CALL emit_parm2_gvar(char *name)
|
||||||
{
|
{
|
||||||
ucell p[2];
|
ucell p[2];
|
||||||
|
|
||||||
asm_param_data(name, p, arraysize(p));
|
emit_param_data(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm2_gvar_num(char *name)
|
static void OPHANDLER_CALL emit_parm2_gvar_num(char *name)
|
||||||
{
|
{
|
||||||
cell val;
|
cell val;
|
||||||
char *str;
|
char *str;
|
||||||
@ -5976,7 +5977,7 @@ static void OPHANDLER_CALL asm_parm2_gvar_num(char *name)
|
|||||||
|
|
||||||
tok=lex(&val,&str);
|
tok=lex(&val,&str);
|
||||||
if (tok!=tSYMBOL) {
|
if (tok!=tSYMBOL) {
|
||||||
asm_invalid_token(tSYMBOL, tok);
|
emit_invalid_token(tSYMBOL, tok);
|
||||||
} /* if */
|
} /* if */
|
||||||
sym=findloc(str);
|
sym=findloc(str);
|
||||||
if (sym==NULL || sym->vclass!=sSTATIC)
|
if (sym==NULL || sym->vclass!=sSTATIC)
|
||||||
@ -5991,62 +5992,62 @@ static void OPHANDLER_CALL asm_parm2_gvar_num(char *name)
|
|||||||
p[0]=sym->addr;
|
p[0]=sym->addr;
|
||||||
tok=lex(&val,&str);
|
tok=lex(&val,&str);
|
||||||
if (tok!=tNUMBER) {
|
if (tok!=tNUMBER) {
|
||||||
asm_invalid_token(tNUMBER, tok);
|
emit_invalid_token(tNUMBER, tok);
|
||||||
} /* if */
|
} /* if */
|
||||||
p[1]=val;
|
p[1]=val;
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
} /* if */
|
} /* if */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm3_num(char *name)
|
static void OPHANDLER_CALL emit_parm3_num(char *name)
|
||||||
{
|
{
|
||||||
ucell p[3];
|
ucell p[3];
|
||||||
|
|
||||||
asm_param_num(name, p, arraysize(p));
|
emit_param_num(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm3_gvar(char *name)
|
static void OPHANDLER_CALL emit_parm3_gvar(char *name)
|
||||||
{
|
{
|
||||||
ucell p[3];
|
ucell p[3];
|
||||||
|
|
||||||
asm_param_data(name, p, arraysize(p));
|
emit_param_data(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm4_num(char *name)
|
static void OPHANDLER_CALL emit_parm4_num(char *name)
|
||||||
{
|
{
|
||||||
ucell p[4];
|
ucell p[4];
|
||||||
|
|
||||||
asm_param_num(name, p, arraysize(p));
|
emit_param_num(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm4_gvar(char *name)
|
static void OPHANDLER_CALL emit_parm4_gvar(char *name)
|
||||||
{
|
{
|
||||||
ucell p[4];
|
ucell p[4];
|
||||||
|
|
||||||
asm_param_data(name, p, arraysize(p));
|
emit_param_data(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm5_num(char *name)
|
static void OPHANDLER_CALL emit_parm5_num(char *name)
|
||||||
{
|
{
|
||||||
ucell p[5];
|
ucell p[5];
|
||||||
|
|
||||||
asm_param_num(name, p, arraysize(p));
|
emit_param_num(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_parm5_gvar(char *name)
|
static void OPHANDLER_CALL emit_parm5_gvar(char *name)
|
||||||
{
|
{
|
||||||
ucell p[5];
|
ucell p[5];
|
||||||
|
|
||||||
asm_param_data(name, p, arraysize(p));
|
emit_param_data(name, p, arraysize(p));
|
||||||
outinstr(name,arraysize(p),p);
|
outinstr(name,arraysize(p),p);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_do_case(char *name)
|
static void OPHANDLER_CALL emit_do_case(char *name)
|
||||||
{
|
{
|
||||||
/* case <value> <label> */
|
/* case <value> <label> */
|
||||||
cell val;
|
cell val;
|
||||||
@ -6061,12 +6062,12 @@ static void OPHANDLER_CALL asm_do_case(char *name)
|
|||||||
|
|
||||||
tok=lex(&val,&str);
|
tok=lex(&val,&str);
|
||||||
if (tok!=tNUMBER) {
|
if (tok!=tNUMBER) {
|
||||||
asm_invalid_token(tSYMBOL, tok);
|
emit_invalid_token(tSYMBOL, tok);
|
||||||
} /* if */
|
} /* if */
|
||||||
outval(val,FALSE);
|
outval(val,FALSE);
|
||||||
tok=lex(&val,&str);
|
tok=lex(&val,&str);
|
||||||
if (tok!=tSYMBOL) {
|
if (tok!=tSYMBOL) {
|
||||||
asm_invalid_token(tSYMBOL, tok);
|
emit_invalid_token(tSYMBOL, tok);
|
||||||
} /* if */
|
} /* if */
|
||||||
sym=fetchlab(str);
|
sym=fetchlab(str);
|
||||||
if (sym==NULL) {
|
if (sym==NULL) {
|
||||||
@ -6077,7 +6078,7 @@ static void OPHANDLER_CALL asm_do_case(char *name)
|
|||||||
code_idx+=opargs(2)+opcodes(0);
|
code_idx+=opargs(2)+opcodes(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_do_lodb_strb(char *name)
|
static void OPHANDLER_CALL emit_do_lodb_strb(char *name)
|
||||||
{
|
{
|
||||||
ucell val;
|
ucell val;
|
||||||
char *str;
|
char *str;
|
||||||
@ -6086,7 +6087,7 @@ static void OPHANDLER_CALL asm_do_lodb_strb(char *name)
|
|||||||
|
|
||||||
tok=lex(&val,&str);
|
tok=lex(&val,&str);
|
||||||
if (tok!=tNUMBER) {
|
if (tok!=tNUMBER) {
|
||||||
asm_invalid_token(tNUMBER, tok);
|
emit_invalid_token(tNUMBER, tok);
|
||||||
} /* if */
|
} /* if */
|
||||||
if (val!=1 && val!=2 && val!=4) {
|
if (val!=1 && val!=2 && val!=4) {
|
||||||
error(50); /* invalid range */
|
error(50); /* invalid range */
|
||||||
@ -6094,7 +6095,7 @@ static void OPHANDLER_CALL asm_do_lodb_strb(char *name)
|
|||||||
outinstr(name,1,&val);
|
outinstr(name,1,&val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPHANDLER_CALL asm_do_call(char *name)
|
static void OPHANDLER_CALL emit_do_call(char *name)
|
||||||
{
|
{
|
||||||
cell val;
|
cell val;
|
||||||
char *str;
|
char *str;
|
||||||
@ -6104,7 +6105,7 @@ static void OPHANDLER_CALL asm_do_call(char *name)
|
|||||||
|
|
||||||
tok=lex(&val,&str);
|
tok=lex(&val,&str);
|
||||||
if (tok!=tSYMBOL) {
|
if (tok!=tSYMBOL) {
|
||||||
asm_invalid_token(tSYMBOL, tok);
|
emit_invalid_token(tSYMBOL, tok);
|
||||||
} /* if */
|
} /* if */
|
||||||
sym=findglb(str,sGLOBAL);
|
sym=findglb(str,sGLOBAL);
|
||||||
if (sym==NULL) {
|
if (sym==NULL) {
|
||||||
@ -6121,169 +6122,169 @@ static void OPHANDLER_CALL asm_do_call(char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static ASM_OPCODE asm_opcodelist[] = {
|
static EMIT_OPCODE emit_opcodelist[] = {
|
||||||
{ 0, NULL, asm_noop },
|
{ 0, NULL, emit_noop },
|
||||||
{ 78, "add", asm_parm0 },
|
{ 78, "add", emit_parm0 },
|
||||||
{ 87, "add.c", asm_parm1_num },
|
{ 87, "add.c", emit_parm1_num },
|
||||||
{ 14, "addr.alt", asm_parm1_num },
|
{ 14, "addr.alt", emit_parm1_num },
|
||||||
{ 13, "addr.pri", asm_parm1_num },
|
{ 13, "addr.pri", emit_parm1_num },
|
||||||
{ 30, "align.alt", asm_parm1_num },
|
{ 30, "align.alt", emit_parm1_num },
|
||||||
{ 29, "align.pri", asm_parm1_num },
|
{ 29, "align.pri", emit_parm1_num },
|
||||||
{ 81, "and", asm_parm0 },
|
{ 81, "and", emit_parm0 },
|
||||||
{121, "bounds", asm_parm1_num },
|
{121, "bounds", emit_parm1_num },
|
||||||
{137, "break", asm_parm0 },
|
{137, "break", emit_parm0 },
|
||||||
{ 49, "call", asm_do_call },
|
{ 49, "call", emit_do_call },
|
||||||
{ 50, "call.pri", asm_parm0 },
|
{ 50, "call.pri", emit_parm0 },
|
||||||
{ 0, "case", asm_do_case },
|
{ 0, "case", emit_do_case },
|
||||||
{130, "casetbl", asm_parm0 },
|
{130, "casetbl", emit_parm0 },
|
||||||
{118, "cmps", asm_parm1_num },
|
{118, "cmps", emit_parm1_num },
|
||||||
{156, "const", asm_parm2_gvar_num },
|
{156, "const", emit_parm2_gvar_num },
|
||||||
{ 12, "const.alt", asm_parm1_num },
|
{ 12, "const.alt", emit_parm1_num },
|
||||||
{ 11, "const.pri", asm_parm1_num },
|
{ 11, "const.pri", emit_parm1_num },
|
||||||
{157, "const.s", asm_parm2_num },
|
{157, "const.s", emit_parm2_num },
|
||||||
{114, "dec", asm_parm1_gvar },
|
{114, "dec", emit_parm1_gvar },
|
||||||
{113, "dec.alt", asm_parm0 },
|
{113, "dec.alt", emit_parm0 },
|
||||||
{116, "dec.i", asm_parm0 },
|
{116, "dec.i", emit_parm0 },
|
||||||
{112, "dec.pri", asm_parm0 },
|
{112, "dec.pri", emit_parm0 },
|
||||||
{115, "dec.s", asm_parm1_num },
|
{115, "dec.s", emit_parm1_num },
|
||||||
{ 95, "eq", asm_parm0 },
|
{ 95, "eq", emit_parm0 },
|
||||||
{106, "eq.c.alt", asm_parm1_num },
|
{106, "eq.c.alt", emit_parm1_num },
|
||||||
{105, "eq.c.pri", asm_parm1_num },
|
{105, "eq.c.pri", emit_parm1_num },
|
||||||
/*{124, "file", do_file }, */
|
/*{124, "file", do_file }, */
|
||||||
{119, "fill", asm_parm1_num },
|
{119, "fill", emit_parm1_num },
|
||||||
{100, "geq", asm_parm0 },
|
{100, "geq", emit_parm0 },
|
||||||
{ 99, "grtr", asm_parm0 },
|
{ 99, "grtr", emit_parm0 },
|
||||||
{120, "halt", asm_parm1_num },
|
{120, "halt", emit_parm1_num },
|
||||||
{ 45, "heap", asm_parm1_num },
|
{ 45, "heap", emit_parm1_num },
|
||||||
{ 27, "idxaddr", asm_parm0 },
|
{ 27, "idxaddr", emit_parm0 },
|
||||||
{ 28, "idxaddr.b", asm_parm1_num },
|
{ 28, "idxaddr.b", emit_parm1_num },
|
||||||
{109, "inc", asm_parm1_gvar },
|
{109, "inc", emit_parm1_gvar },
|
||||||
{108, "inc.alt", asm_parm0 },
|
{108, "inc.alt", emit_parm0 },
|
||||||
{111, "inc.i", asm_parm0 },
|
{111, "inc.i", emit_parm0 },
|
||||||
{107, "inc.pri", asm_parm0 },
|
{107, "inc.pri", emit_parm0 },
|
||||||
{110, "inc.s", asm_parm1_num },
|
{110, "inc.s", emit_parm1_num },
|
||||||
{ 86, "invert", asm_parm0 },
|
{ 86, "invert", emit_parm0 },
|
||||||
{ 55, "jeq", asm_parm1_lbl },
|
{ 55, "jeq", emit_parm1_lbl },
|
||||||
{ 60, "jgeq", asm_parm1_lbl },
|
{ 60, "jgeq", emit_parm1_lbl },
|
||||||
{ 59, "jgrtr", asm_parm1_lbl },
|
{ 59, "jgrtr", emit_parm1_lbl },
|
||||||
{ 58, "jleq", asm_parm1_lbl },
|
{ 58, "jleq", emit_parm1_lbl },
|
||||||
{ 57, "jless", asm_parm1_lbl },
|
{ 57, "jless", emit_parm1_lbl },
|
||||||
{ 56, "jneq", asm_parm1_lbl },
|
{ 56, "jneq", emit_parm1_lbl },
|
||||||
{ 54, "jnz", asm_parm1_lbl },
|
{ 54, "jnz", emit_parm1_lbl },
|
||||||
{ 52, "jrel", asm_parm1_num },
|
{ 52, "jrel", emit_parm1_num },
|
||||||
{ 64, "jsgeq", asm_parm1_lbl },
|
{ 64, "jsgeq", emit_parm1_lbl },
|
||||||
{ 63, "jsgrtr", asm_parm1_lbl },
|
{ 63, "jsgrtr", emit_parm1_lbl },
|
||||||
{ 62, "jsleq", asm_parm1_lbl },
|
{ 62, "jsleq", emit_parm1_lbl },
|
||||||
{ 61, "jsless", asm_parm1_lbl },
|
{ 61, "jsless", emit_parm1_lbl },
|
||||||
{ 51, "jump", asm_parm1_lbl },
|
{ 51, "jump", emit_parm1_lbl },
|
||||||
{128, "jump.pri", asm_parm0 },
|
{128, "jump.pri", emit_parm0 },
|
||||||
{ 53, "jzer", asm_parm1_lbl },
|
{ 53, "jzer", emit_parm1_lbl },
|
||||||
{ 31, "lctrl", asm_parm1_num },
|
{ 31, "lctrl", emit_parm1_num },
|
||||||
{ 98, "leq", asm_parm0 },
|
{ 98, "leq", emit_parm0 },
|
||||||
{ 97, "less", asm_parm0 },
|
{ 97, "less", emit_parm0 },
|
||||||
{ 25, "lidx", asm_parm0 },
|
{ 25, "lidx", emit_parm0 },
|
||||||
{ 26, "lidx.b", asm_parm1_num },
|
{ 26, "lidx.b", emit_parm1_num },
|
||||||
/*{125, "line", asm_parm2_num }, */
|
/*{125, "line", emit_parm2_num }, */
|
||||||
{ 2, "load.alt", asm_parm1_gvar },
|
{ 2, "load.alt", emit_parm1_gvar },
|
||||||
{154, "load.both", asm_parm2_gvar },
|
{154, "load.both", emit_parm2_gvar },
|
||||||
{ 9, "load.i", asm_parm0 },
|
{ 9, "load.i", emit_parm0 },
|
||||||
{ 1, "load.pri", asm_parm1_gvar },
|
{ 1, "load.pri", emit_parm1_gvar },
|
||||||
{ 4, "load.s.alt", asm_parm1_num },
|
{ 4, "load.s.alt", emit_parm1_num },
|
||||||
{155, "load.s.both",asm_parm2_num },
|
{155, "load.s.both",emit_parm2_num },
|
||||||
{ 3, "load.s.pri", asm_parm1_num },
|
{ 3, "load.s.pri", emit_parm1_num },
|
||||||
{ 10, "lodb.i", asm_do_lodb_strb },
|
{ 10, "lodb.i", emit_do_lodb_strb },
|
||||||
{ 6, "lref.alt", asm_parm1_gvar },
|
{ 6, "lref.alt", emit_parm1_gvar },
|
||||||
{ 5, "lref.pri", asm_parm1_gvar },
|
{ 5, "lref.pri", emit_parm1_gvar },
|
||||||
{ 8, "lref.s.alt", asm_parm1_num },
|
{ 8, "lref.s.alt", emit_parm1_num },
|
||||||
{ 7, "lref.s.pri", asm_parm1_num },
|
{ 7, "lref.s.pri", emit_parm1_num },
|
||||||
{ 34, "move.alt", asm_parm0 },
|
{ 34, "move.alt", emit_parm0 },
|
||||||
{ 33, "move.pri", asm_parm0 },
|
{ 33, "move.pri", emit_parm0 },
|
||||||
{117, "movs", asm_parm1_num },
|
{117, "movs", emit_parm1_num },
|
||||||
{ 85, "neg", asm_parm0 },
|
{ 85, "neg", emit_parm0 },
|
||||||
{ 96, "neq", asm_parm0 },
|
{ 96, "neq", emit_parm0 },
|
||||||
{134, "nop", asm_parm0 },
|
{134, "nop", emit_parm0 },
|
||||||
{ 84, "not", asm_parm0 },
|
{ 84, "not", emit_parm0 },
|
||||||
{ 82, "or", asm_parm0 },
|
{ 82, "or", emit_parm0 },
|
||||||
{ 43, "pop.alt", asm_parm0 },
|
{ 43, "pop.alt", emit_parm0 },
|
||||||
{ 42, "pop.pri", asm_parm0 },
|
{ 42, "pop.pri", emit_parm0 },
|
||||||
{ 46, "proc", asm_parm0 },
|
{ 46, "proc", emit_parm0 },
|
||||||
{ 40, "push", asm_parm1_gvar },
|
{ 40, "push", emit_parm1_gvar },
|
||||||
{133, "push.adr", asm_parm1_num },
|
{133, "push.adr", emit_parm1_num },
|
||||||
{ 37, "push.alt", asm_parm0 },
|
{ 37, "push.alt", emit_parm0 },
|
||||||
{ 39, "push.c", asm_parm1_num },
|
{ 39, "push.c", emit_parm1_num },
|
||||||
{ 36, "push.pri", asm_parm0 },
|
{ 36, "push.pri", emit_parm0 },
|
||||||
{ 38, "push.r", asm_parm1_num },
|
{ 38, "push.r", emit_parm1_num },
|
||||||
{ 41, "push.s", asm_parm1_num },
|
{ 41, "push.s", emit_parm1_num },
|
||||||
{139, "push2", asm_parm2_gvar },
|
{139, "push2", emit_parm2_gvar },
|
||||||
{141, "push2.adr", asm_parm2_num },
|
{141, "push2.adr", emit_parm2_num },
|
||||||
{138, "push2.c", asm_parm2_num },
|
{138, "push2.c", emit_parm2_num },
|
||||||
{140, "push2.s", asm_parm2_num },
|
{140, "push2.s", emit_parm2_num },
|
||||||
{143, "push3", asm_parm3_gvar },
|
{143, "push3", emit_parm3_gvar },
|
||||||
{145, "push3.adr", asm_parm3_num },
|
{145, "push3.adr", emit_parm3_num },
|
||||||
{142, "push3.c", asm_parm3_num },
|
{142, "push3.c", emit_parm3_num },
|
||||||
{144, "push3.s", asm_parm3_num },
|
{144, "push3.s", emit_parm3_num },
|
||||||
{147, "push4", asm_parm4_gvar },
|
{147, "push4", emit_parm4_gvar },
|
||||||
{149, "push4.adr", asm_parm4_num },
|
{149, "push4.adr", emit_parm4_num },
|
||||||
{146, "push4.c", asm_parm4_num },
|
{146, "push4.c", emit_parm4_num },
|
||||||
{148, "push4.s", asm_parm4_num },
|
{148, "push4.s", emit_parm4_num },
|
||||||
{151, "push5", asm_parm5_gvar },
|
{151, "push5", emit_parm5_gvar },
|
||||||
{153, "push5.adr", asm_parm5_num },
|
{153, "push5.adr", emit_parm5_num },
|
||||||
{150, "push5.c", asm_parm5_num },
|
{150, "push5.c", emit_parm5_num },
|
||||||
{152, "push5.s", asm_parm5_num },
|
{152, "push5.s", emit_parm5_num },
|
||||||
{ 47, "ret", asm_parm0 },
|
{ 47, "ret", emit_parm0 },
|
||||||
{ 48, "retn", asm_parm0 },
|
{ 48, "retn", emit_parm0 },
|
||||||
{ 32, "sctrl", asm_parm1_num },
|
{ 32, "sctrl", emit_parm1_num },
|
||||||
{ 73, "sdiv", asm_parm0 },
|
{ 73, "sdiv", emit_parm0 },
|
||||||
{ 74, "sdiv.alt", asm_parm0 },
|
{ 74, "sdiv.alt", emit_parm0 },
|
||||||
{104, "sgeq", asm_parm0 },
|
{104, "sgeq", emit_parm0 },
|
||||||
{103, "sgrtr", asm_parm0 },
|
{103, "sgrtr", emit_parm0 },
|
||||||
{ 65, "shl", asm_parm0 },
|
{ 65, "shl", emit_parm0 },
|
||||||
{ 69, "shl.c.alt", asm_parm1_num },
|
{ 69, "shl.c.alt", emit_parm1_num },
|
||||||
{ 68, "shl.c.pri", asm_parm1_num },
|
{ 68, "shl.c.pri", emit_parm1_num },
|
||||||
{ 66, "shr", asm_parm0 },
|
{ 66, "shr", emit_parm0 },
|
||||||
{ 71, "shr.c.alt", asm_parm1_num },
|
{ 71, "shr.c.alt", emit_parm1_num },
|
||||||
{ 70, "shr.c.pri", asm_parm1_num },
|
{ 70, "shr.c.pri", emit_parm1_num },
|
||||||
{ 94, "sign.alt", asm_parm0 },
|
{ 94, "sign.alt", emit_parm0 },
|
||||||
{ 93, "sign.pri", asm_parm0 },
|
{ 93, "sign.pri", emit_parm0 },
|
||||||
{102, "sleq", asm_parm0 },
|
{102, "sleq", emit_parm0 },
|
||||||
{101, "sless", asm_parm0 },
|
{101, "sless", emit_parm0 },
|
||||||
{ 72, "smul", asm_parm0 },
|
{ 72, "smul", emit_parm0 },
|
||||||
{ 88, "smul.c", asm_parm1_num },
|
{ 88, "smul.c", emit_parm1_num },
|
||||||
/*{127, "srange", asm_parm2_num }, */
|
/*{127, "srange", emit_parm2_num }, */
|
||||||
{ 20, "sref.alt", asm_parm1_gvar },
|
{ 20, "sref.alt", emit_parm1_gvar },
|
||||||
{ 19, "sref.pri", asm_parm1_gvar },
|
{ 19, "sref.pri", emit_parm1_gvar },
|
||||||
{ 22, "sref.s.alt", asm_parm1_num },
|
{ 22, "sref.s.alt", emit_parm1_num },
|
||||||
{ 21, "sref.s.pri", asm_parm1_num },
|
{ 21, "sref.s.pri", emit_parm1_num },
|
||||||
{ 67, "sshr", asm_parm0 },
|
{ 67, "sshr", emit_parm0 },
|
||||||
{ 44, "stack", asm_parm1_num },
|
{ 44, "stack", emit_parm1_num },
|
||||||
{ 16, "stor.alt", asm_parm1_gvar },
|
{ 16, "stor.alt", emit_parm1_gvar },
|
||||||
{ 23, "stor.i", asm_parm0 },
|
{ 23, "stor.i", emit_parm0 },
|
||||||
{ 15, "stor.pri", asm_parm1_gvar },
|
{ 15, "stor.pri", emit_parm1_gvar },
|
||||||
{ 18, "stor.s.alt", asm_parm1_num },
|
{ 18, "stor.s.alt", emit_parm1_num },
|
||||||
{ 17, "stor.s.pri", asm_parm1_num },
|
{ 17, "stor.s.pri", emit_parm1_num },
|
||||||
{ 24, "strb.i", asm_do_lodb_strb },
|
{ 24, "strb.i", emit_do_lodb_strb },
|
||||||
{ 79, "sub", asm_parm0 },
|
{ 79, "sub", emit_parm0 },
|
||||||
{ 80, "sub.alt", asm_parm0 },
|
{ 80, "sub.alt", emit_parm0 },
|
||||||
{132, "swap.alt", asm_parm0 },
|
{132, "swap.alt", emit_parm0 },
|
||||||
{131, "swap.pri", asm_parm0 },
|
{131, "swap.pri", emit_parm0 },
|
||||||
{129, "switch", asm_parm1_lbl },
|
{129, "switch", emit_parm1_lbl },
|
||||||
/*{126, "symbol", do_symbol }, */
|
/*{126, "symbol", do_symbol }, */
|
||||||
/*{136, "symtag", asm_parm1_num }, */
|
/*{136, "symtag", emit_parm1_num }, */
|
||||||
{123, "sysreq.c", asm_parm1_num },
|
{123, "sysreq.c", emit_parm1_num },
|
||||||
{135, "sysreq.n", asm_parm2_num },
|
{135, "sysreq.n", emit_parm2_num },
|
||||||
{122, "sysreq.pri", asm_parm0 },
|
{122, "sysreq.pri", emit_parm0 },
|
||||||
{ 76, "udiv", asm_parm0 },
|
{ 76, "udiv", emit_parm0 },
|
||||||
{ 77, "udiv.alt", asm_parm0 },
|
{ 77, "udiv.alt", emit_parm0 },
|
||||||
{ 75, "umul", asm_parm0 },
|
{ 75, "umul", emit_parm0 },
|
||||||
{ 35, "xchg", asm_parm0 },
|
{ 35, "xchg", emit_parm0 },
|
||||||
{ 83, "xor", asm_parm0 },
|
{ 83, "xor", emit_parm0 },
|
||||||
{ 91, "zero", asm_parm1_gvar },
|
{ 91, "zero", emit_parm1_gvar },
|
||||||
{ 90, "zero.alt", asm_parm0 },
|
{ 90, "zero.alt", emit_parm0 },
|
||||||
{ 89, "zero.pri", asm_parm0 },
|
{ 89, "zero.pri", emit_parm0 },
|
||||||
{ 92, "zero.s", asm_parm1_num },
|
{ 92, "zero.s", emit_parm1_num },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int asm_findopcode(char *instr,int maxlen)
|
static int emit_findopcode(char *instr,int maxlen)
|
||||||
{
|
{
|
||||||
int low,high,mid,cmp;
|
int low,high,mid,cmp;
|
||||||
char str[MAX_INSTR_LEN];
|
char str[MAX_INSTR_LEN];
|
||||||
@ -6296,11 +6297,11 @@ static int asm_findopcode(char *instr,int maxlen)
|
|||||||
* to symbols)
|
* to symbols)
|
||||||
*/
|
*/
|
||||||
low=1; /* entry 0 is reserved (for "not found") */
|
low=1; /* entry 0 is reserved (for "not found") */
|
||||||
high=(sizeof asm_opcodelist / sizeof asm_opcodelist[0])-1;
|
high=(sizeof emit_opcodelist / sizeof emit_opcodelist[0])-1;
|
||||||
while (low<high) {
|
while (low<high) {
|
||||||
mid=(low+high)/2;
|
mid=(low+high)/2;
|
||||||
assert(asm_opcodelist[mid].name!=NULL);
|
assert(emit_opcodelist[mid].name!=NULL);
|
||||||
cmp=stricmp(str,asm_opcodelist[mid].name);
|
cmp=stricmp(str,emit_opcodelist[mid].name);
|
||||||
if (cmp>0)
|
if (cmp>0)
|
||||||
low=mid+1;
|
low=mid+1;
|
||||||
else
|
else
|
||||||
@ -6308,12 +6309,12 @@ static int asm_findopcode(char *instr,int maxlen)
|
|||||||
} /* while */
|
} /* while */
|
||||||
|
|
||||||
assert(low==high);
|
assert(low==high);
|
||||||
if (stricmp(str,asm_opcodelist[low].name)==0)
|
if (stricmp(str,emit_opcodelist[low].name)==0)
|
||||||
return low; /* found */
|
return low; /* found */
|
||||||
return 0; /* not found, return special index */
|
return 0; /* not found, return special index */
|
||||||
}
|
}
|
||||||
|
|
||||||
SC_FUNC void asm_parse_line(void)
|
SC_FUNC void emit_parse_line(void)
|
||||||
{
|
{
|
||||||
cell val;
|
cell val;
|
||||||
char* st;
|
char* st;
|
||||||
@ -6335,38 +6336,38 @@ SC_FUNC void asm_parse_line(void)
|
|||||||
name[i]=(char)tolower(*lptr);
|
name[i]=(char)tolower(*lptr);
|
||||||
} /* for */
|
} /* for */
|
||||||
name[i]='\0';
|
name[i]='\0';
|
||||||
i=asm_findopcode(name,strlen(name));
|
i=emit_findopcode(name,strlen(name));
|
||||||
if (asm_opcodelist[i].name==NULL && *name!='\0') {
|
if (emit_opcodelist[i].name==NULL && *name!='\0') {
|
||||||
error(104,name); /* invalid assembler instruction */
|
error(104,name); /* invalid assembler instruction */
|
||||||
} /* if */
|
} /* if */
|
||||||
asm_opcodelist[i].func(name);
|
emit_opcodelist[i].func(name);
|
||||||
check_empty(lptr);
|
check_empty(lptr);
|
||||||
} else if (tok==tLABEL) {
|
} else if (tok==tLABEL) {
|
||||||
if (!asm_block_parsing) {
|
if (!emit_block_parsing) {
|
||||||
error(38); /* extra characters on line */
|
error(38); /* extra characters on line */
|
||||||
} /* if */
|
} /* if */
|
||||||
sym=fetchlab(st);
|
sym=fetchlab(st);
|
||||||
setlabel((int)sym->addr);
|
setlabel((int)sym->addr);
|
||||||
sym->usage|=uDEFINE;
|
sym->usage|=uDEFINE;
|
||||||
} /* if */
|
} /* if */
|
||||||
if ((asm_block_parsing && matchtoken('}')) || !asm_block_parsing) {
|
if ((emit_block_parsing && matchtoken('}')) || !emit_block_parsing) {
|
||||||
matchtoken(';');
|
matchtoken(';');
|
||||||
asm_block_parsing=FALSE;
|
emit_block_parsing=FALSE;
|
||||||
} /* if */
|
} /* if */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void doasm(void)
|
static void doemit(void)
|
||||||
{
|
{
|
||||||
cell val;
|
cell val;
|
||||||
char *st;
|
char *st;
|
||||||
|
|
||||||
asm_block_parsing=FALSE;
|
emit_block_parsing=FALSE;
|
||||||
if (matchtoken('{')) {
|
if (matchtoken('{')) {
|
||||||
lexpush();
|
lexpush();
|
||||||
asm_block_parsing=TRUE;
|
emit_block_parsing=TRUE;
|
||||||
} else {
|
} else {
|
||||||
lex(&val,&st);
|
lex(&val,&st);
|
||||||
asm_parse_line();
|
emit_parse_line();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2073,10 +2073,11 @@ char *sc_tokens[] = {
|
|||||||
"*=", "/=", "%=", "+=", "-=", "<<=", ">>>=", ">>=", "&=", "^=", "|=",
|
"*=", "/=", "%=", "+=", "-=", "<<=", ">>>=", ">>=", "&=", "^=", "|=",
|
||||||
"||", "&&", "==", "!=", "<=", ">=", "<<", ">>>", ">>", "++", "--",
|
"||", "&&", "==", "!=", "<=", ">=", "<<", ">>>", ">>", "++", "--",
|
||||||
"...", "..", "::",
|
"...", "..", "::",
|
||||||
"asm", "assert", "*begin", "break", "case", "char", "const", "continue",
|
"assert", "*begin", "break", "case", "char", "const", "continue", "default",
|
||||||
"default", "defined", "do", "else", "*end", "enum", "exit", "for", "forward",
|
"defined", "do", "else", "emit", "__emit", "*end", "enum", "exit", "for",
|
||||||
"goto", "if", "native", "new", "operator", "public", "return", "sizeof",
|
"forward", "goto", "if", "native", "new", "operator", "public", "return",
|
||||||
"sleep", "state", "static", "stock", "switch", "tagof", "*then", "while",
|
"sizeof", "sleep", "state", "static", "stock", "switch", "tagof", "*then",
|
||||||
|
"while",
|
||||||
"#assert", "#define", "#else", "#elseif", "#emit", "#endif", "#endinput",
|
"#assert", "#define", "#else", "#elseif", "#emit", "#endif", "#endinput",
|
||||||
"#endscript", "#error", "#file", "#if", "#include", "#line", "#pragma",
|
"#endscript", "#error", "#file", "#if", "#include", "#line", "#pragma",
|
||||||
"#tryinclude", "#undef", "#warning",
|
"#tryinclude", "#undef", "#warning",
|
||||||
|
@ -1448,18 +1448,19 @@ static int hier2(value *lval)
|
|||||||
} /* if */
|
} /* if */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} /* case */
|
} /* case */
|
||||||
case tASM: {
|
case tEMIT:
|
||||||
|
case t__EMIT: {
|
||||||
cell val;
|
cell val;
|
||||||
char* st;
|
char* st;
|
||||||
if (!matchtoken('{'))
|
if (!matchtoken('{'))
|
||||||
error(38);
|
error(38);
|
||||||
lex(&val,&st);
|
lex(&val,&st);
|
||||||
lval->ident=iEXPRESSION;
|
lval->ident=iEXPRESSION;
|
||||||
asm_parse_line();
|
emit_parse_line();
|
||||||
if (!matchtoken('}'))
|
if (!matchtoken('}'))
|
||||||
error(38);
|
error(38);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} /* asm */
|
} /* case */
|
||||||
default:
|
default:
|
||||||
lexpush();
|
lexpush();
|
||||||
lvalue=hier1(lval);
|
lvalue=hier1(lval);
|
||||||
|
@ -103,7 +103,7 @@ SC_VDEFINE FILE *outf = NULL; /* (intermediate) text file written to */
|
|||||||
|
|
||||||
SC_VDEFINE jmp_buf errbuf;
|
SC_VDEFINE jmp_buf errbuf;
|
||||||
|
|
||||||
SC_VDEFINE asm_block_parsing=FALSE;
|
SC_VDEFINE emit_block_parsing=FALSE;
|
||||||
|
|
||||||
#if !defined SC_LIGHT
|
#if !defined SC_LIGHT
|
||||||
SC_VDEFINE int sc_makereport=FALSE; /* generate a cross-reference report */
|
SC_VDEFINE int sc_makereport=FALSE; /* generate a cross-reference report */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user