Skip to content

ast

I hold the compiler's AST implementation.

AST_ADDR_OP

pub int AST_ADDR_OP = 103;

[AST_ADDR_OP, op, nameT]

AST_AGAIN

pub int AST_AGAIN = 406;

[AST_AGAIN, kwT]

AST_ASSIGN

pub int AST_ASSIGN = 402;

[AST_ASSIGN, expr, rhs]

AST_BINARY

pub int AST_BINARY = 102;

[AST_BINARY, op, left, right]

AST_CALL

pub int AST_CALL = 104;

[AST_CALL, callee, params[]]

AST_DECL

pub int AST_DECL = 302;

[AST_DECL, is_pub, fn_or_var]

AST_DONE

pub int AST_DONE = 405;

[AST_DONE, kwT]

AST_EVAL

pub int AST_EVAL = 401;

[AST_EVAL, expr]

AST_FN

pub int AST_FN = 303;

[AST_FN, nameT, args[], body?]

AST_FN_BODY

pub int AST_FN_BODY = 353;

[AST_FN_BODY, nlocal, stmts[]]

AST_ID

pub int AST_ID = 50;

[AST_ID, nameT]

AST_IF

pub int AST_IF = 403;

[AST_IF, cond, body[], else[]?]

AST_INDEX

pub int AST_INDEX = 106;

[AST_INDEX, rcvr, off_expr, width]

AST_LIT_BOOL

pub int AST_LIT_BOOL = 1;

[AST_LIT_BOOL, value]

AST_LIT_CHAR

pub int AST_LIT_CHAR = 2;

[AST_LIT_CHAR, value]

AST_LIT_INT

pub int AST_LIT_INT = 3;

[AST_LIT_INT, value]

AST_LIT_STRING

pub int AST_LIT_STRING = 20;

[AST_LIT_STRING, value]

AST_MEMBER

pub int AST_MEMBER = 105;

[AST_MEMBER, rcvr, offset, width]

AST_PROGRAM

pub int AST_PROGRAM = 301;

[AST_PROGRAM, decls[]]

AST_RETURN

pub int AST_RETURN = 407;

[AST_RETURN, kwT, expr?]

AST_STRUCT

pub int AST_STRUCT = 306;

[AST_STRUCT, nameT, members?]

AST_TYPE_BOOL

pub int AST_TYPE_BOOL = 501;

[AST_TYPE_BOOL]

AST_TYPE_CHAR

pub int AST_TYPE_CHAR = 502;

[AST_TYPE_CHAR]

AST_TYPE_INT

pub int AST_TYPE_INT = 503;

[AST_TYPE_INT]

AST_TYPE_MEMBER

pub int AST_TYPE_MEMBER = 1003;

[AST_TYPE_MEMBER, name, offset, width]

AST_TYPE_NAMED

pub int AST_TYPE_NAMED = 550;

[AST_TYPE_NAMED, nameT]

AST_TYPE_PTR

pub int AST_TYPE_PTR = 521;

[AST_TYPE_PTR, type]

AST_TYPE_STRUCT

pub int AST_TYPE_STRUCT = 1002;

[AST_TYPE_STRUCT, alignof, sizeof, memberMap]

AST_TYPE_VOID

pub int AST_TYPE_VOID = 520;

[AST_TYPE_VOID]

AST_UNARY

pub int AST_UNARY = 101;

[AST_UNARY, op, operand]

AST_VARIABLE

pub int AST_VARIABLE = 307;

[AST_VARIABLE, type, nameT?, init?]

AST_WHILE

pub int AST_WHILE = 404;

[AST_WHILE, cond, stmts[]]

Ast4

pub struct Ast4

ast1

pub fn ast1(int type)

[type] 1-tuple (silly, but uniform)

ast2

pub fn ast2(int type, void value)

[type, value] 2-tuple

ast3

pub fn ast3(int type, void value, void left)

[type, value, left] 3-tuple

ast4

pub fn ast4(int type, void value, void left, void right)

[type, value, left, right] 4-tuple

ast_alignment

pub fn ast_alignment(void* ast)

ast_sizeof

pub fn ast_sizeof(void* ast)

drop_ast

pub fn drop_ast(Ast4* ast)

I drop an AST. It might be narrower than Ast4, but the type field will indicate that.