Modules

Code_Visit

moduleSource

Available on macOS, Linux, Windows, Wasm

#import "Code_Visit";

Walks the nodes of a Compiler.Code_Node tree.

Example↗
Compiler :: #import "Compiler";
left := Compiler.make_integer_literal(13);
right := Compiler.make_integer_literal(29);
sum: Compiler.Code_Binary_Operator;
sum.kind = .BINARY_OPERATOR;
sum.left = left;
sum.right = right;

all: [..] *Compiler.Code_Node;
get_recursive_nodes_depth_first(*sum, *all);
assert(all.count == 3);

Procedures#

(node: *C.Code_Node, pointers: *[..] *C.Code_Node)

Appends the direct children of node to pointers, in source order.

Compiler :: #import "Compiler";
left := Compiler.make_integer_literal(13);
right := Compiler.make_integer_literal(29);
sum: Compiler.Code_Binary_Operator;
sum.kind = .BINARY_OPERATOR;
sum.left = left;
sum.right = right;

children: [..] *Compiler.Code_Node;
get_subexpressions(*sum, *children);
assert(children.count == 2 && children[0] == cast(*Compiler.Code_Node) left);
↗
(node: *C.Code_Node, values: *[..] V.Dumb_Value)

Walks node depth first and appends a Dumb_Value when it enters each node (preorder true) and again when it leaves (preorder false).

Compiler :: #import "Compiler";
n := Compiler.make_integer_literal(7);
events: [..] Dumb_Value;
get_values(cast(*Compiler.Code_Node) n, *events);
assert(events.count == 2 && events[0].preorder && !events[1].preorder);
↗

Types#