Added pseudo function .DEFINEDINSTR

This commit is contained in:
JT
2015-05-12 19:28:57 -04:00
parent 1748bb1ab6
commit 5ed3a1a6dc
8 changed files with 204 additions and 157 deletions

View File

@@ -62,6 +62,7 @@
#include "symtab.h"
#include "toklist.h"
#include "ulabel.h"
#include "macro.h"
@@ -417,6 +418,33 @@ static ExprNode* FuncDefined (void)
static ExprNode* FuncDefinedInstr (void)
/* Handle the .DEFINEDINSTR builtin function */
{
int Instr = 0;
/* Check for a macro or an instruction depending on UbiquitousIdents */
if (CurTok.Tok == TOK_IDENT) {
if (UbiquitousIdents) {
/* Macros CAN be instructions, so check for them first */
if (FindMacro(&CurTok.SVal) == 0) {
Instr = FindInstruction (&CurTok.SVal);
}
} else {
/* Macros and symbols may NOT use the names of instructions, so just check for the instruction */
Instr = FindInstruction(&CurTok.SVal);
}
NextTok();
} else {
Error("Idenitifier expected.");
}
return GenLiteralExpr(Instr > 0);
}
ExprNode* FuncHiByte (void)
/* Handle the .HIBYTE builtin function */
{
@@ -1065,6 +1093,10 @@ static ExprNode* Factor (void)
N = Function (FuncDefined);
break;
case TOK_DEFINEDINSTR:
N = Function (FuncDefinedInstr);
break;
case TOK_HIBYTE:
N = Function (FuncHiByte);
break;