Types of Values 18
This commit is contained in:
parent
41404633da
commit
10c44eab2e
7 changed files with 230 additions and 28 deletions
|
|
@ -8,12 +8,42 @@ import clox.value;
|
|||
import clox.container.rle;
|
||||
import clox.container.int24;
|
||||
|
||||
enum SimpleOp;
|
||||
enum LogicOp;
|
||||
enum ValueOp;
|
||||
enum ArithOp;
|
||||
enum CompOp;
|
||||
enum OpCode : ubyte{
|
||||
Constant,
|
||||
Add, Subtract, Multiply, Divide,
|
||||
Negate,
|
||||
Return,
|
||||
@ValueOp Nil,
|
||||
@ValueOp True,
|
||||
@ValueOp False,
|
||||
|
||||
@(SimpleOp, CompOp) Equal,
|
||||
@(SimpleOp, CompOp) Greater,
|
||||
@(SimpleOp, CompOp) Less,
|
||||
@(SimpleOp, CompOp) NotEqual,
|
||||
@(SimpleOp, CompOp) GreaterEqual,
|
||||
@(SimpleOp, CompOp) LessEqual,
|
||||
|
||||
@(SimpleOp, ArithOp) Add,
|
||||
@(SimpleOp, ArithOp) Subtract,
|
||||
@(SimpleOp, ArithOp) Multiply,
|
||||
@(SimpleOp, ArithOp) Divide,
|
||||
|
||||
@(SimpleOp, LogicOp) Not,
|
||||
@(SimpleOp, LogicOp) Negate,
|
||||
@(SimpleOp) Return,
|
||||
}
|
||||
import std.traits: hasUDA;
|
||||
bool isSimpleOp(alias op)() => hasUDA!(op, SimpleOp);
|
||||
bool isValueOp(alias op)() => hasUDA!(op, ValueOp);
|
||||
bool isLogicOp(alias op)() => hasUDA!(op, LogicOp);
|
||||
bool isCompOp(alias op)() => hasUDA!(op, CompOp);
|
||||
bool isArithOp(alias op)() => hasUDA!(op, ArithOp);
|
||||
bool isSize1Op(alias op)() => isSimpleOp!op || isValueOp!op;
|
||||
static assert( isSimpleOp!(OpCode.Equal) );
|
||||
static assert( !isSimpleOp!(OpCode.Constant) );
|
||||
|
||||
struct Chunk{
|
||||
Array!ubyte code;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue