Parser is reading variable declarations, read more

This is an incomplete process. It's supposed to be robust enough to
support the types of arrays and dictionaries, but arrays and
dictionaries aren't implemented in the literals yet, so that's my next
task.

I'll come back to variable declarations later.
This commit is contained in:
2022-08-10 11:01:32 +01:00
parent 9603baeb0a
commit 6a883bde96
9 changed files with 218 additions and 17 deletions

View File

@@ -12,7 +12,9 @@ typedef enum NodeType {
NODE_UNARY, //one child
NODE_BINARY, //two children, left and right
NODE_GROUPING, //one child
NODE_BLOCK, //contains bytecode
NODE_BLOCK, //contains sub-node array
NODE_VAR_TYPES, //contains a type mask and a sub-node array for compound types
NODE_VAR_DECL, //contains identifier literal, typenode, expression definition
// NODE_CONDITIONAL, //three children: conditional, then path, else path
} NodeType;
@@ -46,6 +48,21 @@ typedef struct NodeBlock {
int count;
} NodeBlock;
typedef struct NodeVarTypes {
NodeType type;
unsigned char mask;
Node* nodes;
int capacity;
int count;
} NodeVarTypes;
typedef struct NodeVarDecl {
NodeType type;
Literal identifier;
Node* varType;
Node* expression;
} NodeVarDecl;
union _node {
NodeType type;
NodeLiteral atomic;
@@ -53,6 +70,8 @@ union _node {
NodeBinary binary;
NodeGrouping grouping;
NodeBlock block;
NodeVarTypes varTypes;
NodeVarDecl varDecl;
};
void freeNode(Node* node);
@@ -61,6 +80,8 @@ void emitNodeUnary(Node** nodeHandle, Opcode opcode);
void emitNodeBinary(Node** nodeHandle, Node* rhs, Opcode opcode);
void emitNodeGrouping(Node** nodeHandle);
void emitNodeBlock(Node** nodeHandle);
void emitNodeVarTypes(Node** nodeHandle, unsigned char mask);
void emitNodeVarDecl(Node** nodeHandle, Literal identifier, Node* varType, Node* expression);
void printNode(Node* node);