radish/include/stmt.h
2025-01-06 02:00:01 +00:00

65 lines
1.2 KiB
C

#ifndef STMT_H
#define STMT_H
#include "ast.h"
#include "scanner.h"
typedef enum {
STMT_BLOCK,
STMT_CLASS,
STMT_EXPR,
STMT_FUN,
STMT_IF,
STMT_PRINT,
STMT_VAR,
STMT_WHILE,
STMT_COUNT,
} StmtType;
typedef struct Stmt Stmt;
struct Stmt{
StmtType type;
union {
struct {
Stmt **statements;
} block;
struct {
Token name;
Token superclass;
Stmt **methods;
} class;
struct {
Expr *expression;
} expr;
struct {
Token name;
TokenArray params;
Stmt **body;
} function;
struct {
Expr *condition;
Stmt *thenBranch;
Stmt *elseBranch;
} _if;
struct {
Expr *expression;
} print;
struct {
Token keyword;
Expr *value;
} _return;
struct {
Token name;
Expr *initializer;
} variable;
struct {
Expr *condition;
Stmt *body;
} _while;
} as;
};
typedef struct {
Stmt *statements;
int count;
int capacity;
bool hadError;
} StmtArray;
#endif