if ((*arg_value)->kind == Ast_Kind_Call_Site) {
AstCallSite* callsite = (AstCallSite *) ast_clone(context.ast_alloc, *arg_value);
+ if (callsite->collapsed) continue;
+
callsite->callsite_token = call->token;
// HACK CLEANUP
convert_numlit_to_type(callsite->line, &basic_types[Basic_Kind_U32]);
convert_numlit_to_type(callsite->column, &basic_types[Basic_Kind_U32]);
+ callsite->collapsed = 1;
*arg_value = (AstTyped *) callsite;
}
}
"""
empty :: macro (T: type_expr) => (?T).{};
+ #doc """
+ Converts a pointer to an optional by defining `null` to be `None`,
+ and a non-null pointer to be `Some`. This dereferences the valid
+ pointer to return the data stored at the pointer's address.
+ """
+ from_ptr :: macro (p: &$T) -> ?T {
+ if p do return *p;
+ return .{};
+ }
+
#doc """
Extracts the value from the Optional, or uses a default if
no value is present.