Expr new_expr_alignof_expr(SrcPos pos, Expr expr) { Expr e = new_expr(EXPR_ALIGNOF_EXPR, pos); e.alignof_expr = expr; return(e); }
Expr new_expr_typeof_expr(SrcPos pos, Expr expr) { Expr e = new_expr(EXPR_TYPEOF_EXPR, pos); e.typeof_expr = expr; return(e); }
Expr new_expr_typeof_type(SrcPos pos, Typespec type) { Expr e = new_expr(EXPR_TYPEOF_TYPE, pos); e.typeof_type = type; return(e); }
Expr new_expr_sizeof_type(SrcPos pos, Typespec type) { var e = new_expr(EXPR_SIZEOF_TYPE, pos); e.sizeof_type = type; return(e); }
Expr new_expr_sizeof_expr(SrcPos pos, Expr expr) { var e = new_expr(EXPR_SIZEOF_EXPR, pos); e.sizeof_expr = expr; return(e); }
Expr new_expr_paren(SrcPos pos, Expr expr) { Expr e = new_expr(EXPR_PAREN, pos); e.paren.expr = expr; return(e); }
Expr new_expr_alignof_type(SrcPos pos, Typespec type) { Expr e = new_expr(EXPR_ALIGNOF_TYPE, pos); e.alignof_type = type; return(e); }
Stmt new_stmt_note(SrcPos pos, Note note) { Stmt s = new_stmt(STMT_NOTE, pos); s.note = note; return(s); }
Decl new_decl_typedef(SrcPos pos, string name, Typespec type) { var d = new_decl(DECL_TYPEDEF, pos, name); d.typedef_decl.type = type; return(d); }
Stmt new_stmt_goto(SrcPos pos, string label) { Stmt s = new_stmt(STMT_GOTO, pos); s.label = label; return(s); }
Stmt new_stmt_expr(SrcPos pos, Expr expr) { var s = new_stmt(STMT_EXPR, pos); s.expr = expr; return(s); }
Stmt new_stmt_block(SrcPos pos, StmtList block) { var s = new_stmt(STMT_BLOCK, pos); s.block = block; return(s); }
Stmt new_stmt_decl(SrcPos pos, Decl decl) { var s = new_stmt(STMT_DECL, pos); s.decl = decl; return(s); }
StmtList stmt_list(SrcPos pos, Stmt[] stmts, int num_stmts) { return(new StmtList { pos = pos, stmts = stmts, num_stmts = num_stmts }); }
Stmt new_stmt_return(SrcPos pos, Expr expr) { var s = new_stmt(STMT_RETURN, pos); s.expr = expr; return(s); }
Typespec new_typespec_const(SrcPos pos, Typespec @base) { Typespec t = new_typespec(TYPESPEC_CONST, pos); t.@base = @base; return(t); }
Expr new_expr_name(SrcPos pos, string name) { var e = new_expr(EXPR_NAME, pos); e.name = name; return(e); }
Stmt new_stmt_label(SrcPos pos, string label) { Stmt s = new_stmt(STMT_LABEL, pos); s.label = label; return(s); }
Decl new_decl_note(SrcPos pos, Note note) { Decl d = new_decl(DECL_NOTE, pos, null); d.note = note; return(d); }
Typespec new_typespec(TypespecKind kind, SrcPos pos) { var t = new Typespec(); t.pos = pos; t.kind = kind; return(t); }
Stmt new_stmt_do_while(SrcPos pos, Expr cond, StmtList block) { var s = new_stmt(STMT_DO_WHILE, pos); s.while_stmt.cond = cond; s.while_stmt.block = block; return(s); }
Typespec new_typespec_name(SrcPos pos, string[] names, int num_names) { var t = new_typespec(TYPESPEC_NAME, pos); t.names = names; t.num_names = num_names; return(t); }
Expr new_expr_unary(SrcPos pos, TokenKind op, Expr expr) { var e = new_expr(EXPR_UNARY, pos); e.unary.op = op; e.unary.expr = expr; return(e); }
Expr new_expr_field(SrcPos pos, Expr expr, string name) { var e = new_expr(EXPR_FIELD, pos); e.field.expr = expr; e.field.name = name; return(e); }
Expr new_expr_index(SrcPos pos, Expr expr, Expr index) { var e = new_expr(EXPR_INDEX, pos); e.index.expr = expr; e.index.index = index; return(e); }
Expr new_expr_cast(SrcPos pos, Typespec type, Expr expr) { var e = new_expr(EXPR_CAST, pos); e.cast.type = type; e.cast.expr = expr; return(e); }
Typespec new_typespec_ptr(SrcPos pos, Typespec @base) { var t = new_typespec(TYPESPEC_PTR, pos); t.@base = @base; t.@base = @base; return(t); }
Stmt new_stmt(StmtKind kind, SrcPos pos) { var s = new Stmt(); s.pos = pos; s.kind = kind; return(s); }
Typespec new_typespec_array(SrcPos pos, Typespec @base, Expr num_elems) { var t = new_typespec(TYPESPEC_ARRAY, pos); t.@base = @base; t.num_elems = num_elems; return(t); }
Expr new_expr_str(SrcPos pos, string val, TokenMod mod) { var e = new_expr(EXPR_STR, pos); e.str_lit.val = val; e.str_lit.mod = mod; return(e); }