Ast_Flag_Extra_Field_Access = BH_BIT(23),
Ast_Flag_Symbol_Is_PolyVar = BH_BIT(24),
+
+ Ast_Flag_Binding_Isnt_Captured = BH_BIT(25),
} AstFlags;
typedef enum UnaryOp {
// NOTE: id's of the sub-packages
bh_arr(u32) sub_packages;
+ i32 parent_id;
// NOTE: This tracks all of the 'use package' statements of this package throughout
// the code base. This is used when a static if clears and new symbols are introduced.
void onyx_docs_submit(OnyxDocInfo *docs, AstBinding *binding) {
if (!binding->entity || !binding->entity->package) return;
+ if (!(binding->flags & Ast_Flag_Binding_Isnt_Captured)) return;
AstNode *node = binding->node;
if (node->kind == Ast_Kind_Function) {
}
return;
+ case Ast_Kind_Address_Of:
+ bh_buffer_write_string(buffer, "&");
+ write_type_node(buffer, ((AstAddressOf *) node)->expr);
+ return;
+
case Ast_Kind_Pointer_Type:
bh_buffer_write_string(buffer, "&");
write_type_node(buffer, ((AstPointerType *) node)->elem);
bh_arr_each(AstParam, param, func->params) {
bh_buffer_clear(¶m_type_buf);
- write_string(buffer, param->local->token->length, param->local->token->text);
+ if (param->is_baked)
+ write_cstring(buffer, bh_bprintf("$%b", param->local->token->text, param->local->token->length));
+ else
+ write_string(buffer, param->local->token->length, param->local->token->text);
+
write_type_node(¶m_type_buf, param->local->type_node);
write_string(buffer, param_type_buf.length, param_type_buf.data);
write_cstring(buffer, "");
write_cstring(&doc_buffer, p->unqualified_name);
write_cstring(&doc_buffer, package_qualified_name);
+ bh_buffer_write_u32(&doc_buffer, p->parent_id);
+
bh_buffer_write_u32(&doc_buffer, bh_arr_length(p->sub_packages));
fori (j, 0, bh_arr_length(p->sub_packages)) {
bh_buffer_write_u32(&doc_buffer, (u32) p->sub_packages[j] - 1);
new_token->pos = param->token->pos;
AstNode* type_node = make_symbol(parser->allocator, new_token);
+ type_node->flags |= Ast_Flag_Symbol_Is_PolyVar;
bh_arr_push(poly_params, type_node);
}
if (binding->flags & Ast_Flag_Private_File)
target_scope = parser->file_scope;
+ binding->flags |= Ast_Flag_Binding_Isnt_Captured;
+
ENTITY_SUBMIT_IN_SCOPE(binding, target_scope);
}
}
strncat(aggregate_name, (*symbol)->text, 2047);
Package* newpackage = package_lookup_or_create(aggregate_name, context.global_scope, parser->allocator, package_node->token->pos);
+ newpackage->parent_id = prevpackage ? prevpackage->id : 0xffffffff;
AstPackage* pnode = make_node(AstPackage, Ast_Kind_Package);
pnode->token = *symbol;
package->unqualified_name = pac_name + bh_str_last_index_of(pac_name, '.');
package->use_package_entities = NULL;
package->id = next_package_id++;
+ package->parent_id = -1;
bh_arr_new(global_heap_allocator, package->sub_packages, 4);
if (!strcmp(pac_name, "builtin")) {