}
-#private
ScratchState :: struct {
base_ptr : rawptr;
size : u32;
retval := null;
rem := ss.size - cast(u32) ss.curr_ptr + cast(u32) ss.base_ptr;
- if size >= rem {
+ if size <= rem {
retval = ss.curr_ptr;
ss.curr_ptr = cast(rawptr) (cast(u32) ss.curr_ptr + size);
} else {
src := cast(^u8) src_;
for i: 0 .. len do dst[i] = src[i];
}
+
+memory_set :: proc (start: rawptr, length: u32, value: u8) {
+ s := cast(^u8) start;
+ for i: 0 .. length do s[i] = value;
+}
syn match onyxDefinitionGroup "\<[a-zA-Z_][a-zA-Z0-9_]*\> *:" contains=onyxDefinition
syn match onyxDefinition "\<[a-zA-Z_][a-zA-Z0-9_]*\>" contained
+syn match onyxCallGroup "\<[a-zA-Z_][a-zA-Z0-9_\.]*\> *(" contains=onyxCall
+syn match onyxCall "\<[a-zA-Z_][a-zA-Z0-9_\.]*\>" contained
+
syn match onyxDirective "\#[a-zA-Z_]\+"
syn region onyxString display start=+"+ skip=+\\\\\|\\"+ end=+"+ keepend
hi def link onyxString String
hi def link onyxNumber Number
hi def link onyxDefinition Identifier
+hi def link onyxCall Function
+hi def link onyxOperator Operator
let b:current_syntax = "onyx"
let &cpo = s:cpo_save
member->type_node = symres_type(member->type_node);
if (member->flags & Ast_Flag_Struct_Mem_Used) {
- if (member->type_node->kind != Ast_Kind_Struct_Type) {
- onyx_report_error(member->token->pos,
- "Can only 'use' members of struct type.");
+ AstStructType *used = (AstStructType *) member->type_node;
+
+ while (used->kind == Ast_Kind_Type_Alias) {
+ // NOTE: Maybe not a struct type.
+ used = (AstStructType *) ((AstTypeAlias *) used)->to;
}
- AstStructType *used = (AstStructType *) member->type_node;
+ if (used->kind != Ast_Kind_Struct_Type) {
+ onyx_report_error(member->token->pos,
+ "Can only 'use' members of struct type, got '%s'.",
+ onyx_ast_node_kind_string(used->kind));
+
+ return type;
+ }
bh_arr_insertn(s_node->members, i, bh_arr_length(used->members));
"ARRAY TYPE",
"SLICE TYPE",
"DYNARR TYPE",
+ "VARARG TYPE",
"STRUCT TYPE",
"POLYMORPHIC STRUCT TYPE",
"POLYMORPHIC STRUCT CALL TYPE",
"ENUM TYPE",
"TYPE_ALIAS",
- "TYPE RAW ALIAS"
+ "TYPE RAW ALIAS",
"TYPE_END (BAD)",
"STRUCT MEMBER",
symbol_introduce(ps_type->scope, ps_type->poly_params[i], (AstNode *) raw);
}
- static char key_buf[1024];
+ char key_buf[1024];
fori (i, 0, 1024) key_buf[i] = 0;
bh_table_each_start(AstNode *, ps_type->scope->symbols);
strncat(key_buf, key, 1023);