44 lines
1.0 KiB
Python
44 lines
1.0 KiB
Python
from enum import IntEnum
|
|
from collections import OrderedDict
|
|
|
|
from assembler.fs.keywords import _keyword_to_string
|
|
from assembler.fs.keywords import KW
|
|
from assembler.validator import ValidatorError
|
|
|
|
class InstructionType(IntEnum):
|
|
ALU = 0
|
|
OUT = 1
|
|
FC = 2
|
|
TEX = 3
|
|
|
|
class RGBMask(IntEnum):
|
|
NONE = 0
|
|
R = 1
|
|
G = 2
|
|
RG = 3
|
|
B = 4
|
|
RB = 5
|
|
GB = 6
|
|
RGB = 7
|
|
|
|
class AlphaMask(IntEnum):
|
|
NONE = 0
|
|
A = 1
|
|
|
|
def validate_identifier_number(token):
|
|
try:
|
|
return int(token.lexeme, 10)
|
|
except ValueError:
|
|
raise ValidatorError("invalid number", token)
|
|
|
|
def validate_dest_keyword(dest_keyword):
|
|
dest_keywords = [KW.OUT, KW.TEMP]
|
|
dest_keyword_strs = keywords_to_string(dest_keywords)
|
|
dest = dest_keyword.keyword
|
|
if dest not in dest_keywords:
|
|
raise ValidatorError(f"invalid dest keyword, expected one of {dest_keyword_strs}", dest_keyword)
|
|
return dest
|
|
|
|
def keywords_to_string(keywords):
|
|
return [_keyword_to_string[s].decode("utf-8") for s in keywords]
|