value : V;
}
- has :: (package core.map).has
- get :: (package core.map).get
- get_ptr :: (package core.map).get_ptr
- put :: (package core.map).put
- delete :: (package core.map).delete
- update :: (package core.map).update
- clear :: (package core.map).clear
- empty :: (package core.map).empty
+ has :: has
+ get :: get
+ get_ptr :: get_ptr
+ put :: put
+ delete :: delete
+ update :: update
+ clear :: clear
+ empty :: empty
}
make :: ($Key: type_expr, $Value: type_expr, default := __zero_value(Value)) -> Map(Key, Value) {
value : T;
}
- has :: (package core.set).has
- get :: (package core.set).get
- insert :: (package core.set).insert
- remove :: (package core.set).remove
- clear :: (package core.set).clear
- empty :: (package core.set).empty
- iterator :: (package core.set).iterator
+ has :: has
+ get :: get
+ insert :: insert
+ remove :: remove
+ clear :: clear
+ empty :: empty
+ iterator :: iterator
}
make :: ($T: type_expr, default := __zero_value(T)) -> Set(T) {
// :TEMPORARY
Ast_Flag_Params_Introduced = BH_BIT(29),
+
+ Ast_Flag_Symbol_Invisible = BH_BIT(30),
} AstFlags;
typedef enum UnaryOp {
case Ast_Kind_Alias: {
AstAlias* alias = (AstAlias *) *type;
+ alias->flags |= Ast_Flag_Symbol_Invisible;
SYMRES(type, (AstType **) &alias->alias);
+ alias->flags &= ~Ast_Flag_Symbol_Invisible;
break;
}
case Ast_Kind_Method_Call: SYMRES(method_call, (AstBinaryOp **) expr); break;
case Ast_Kind_Size_Of: SYMRES(size_of, (AstSizeOf *)*expr); break;
case Ast_Kind_Align_Of: SYMRES(align_of, (AstAlignOf *)*expr); break;
- case Ast_Kind_Alias: SYMRES(expression, &((AstAlias *) *expr)->alias); break;
+ case Ast_Kind_Alias: {
+ (*expr)->flags |= Ast_Flag_Symbol_Invisible;
+ SYMRES(expression, &((AstAlias *) *expr)->alias);
+ (*expr)->flags &= ~Ast_Flag_Symbol_Invisible;
+ break;
+ }
case Ast_Kind_Range_Literal:
SYMRES(expression, &((AstRangeLiteral *)(*expr))->low);
}
AstNode* symbol_raw_resolve(Scope* start_scope, char* sym) {
- AstNode* res = NULL;
Scope* scope = start_scope;
- while (res == NULL && scope != NULL) {
+ while (scope != NULL) {
if (bh_table_has(AstNode *, scope->symbols, sym)) {
- res = bh_table_get(AstNode *, scope->symbols, sym);
- } else {
- scope = scope->parent;
+ AstNode* res = bh_table_get(AstNode *, scope->symbols, sym);
+
+ if ((res->flags & Ast_Flag_Symbol_Invisible) == 0) {
+ return res;
+ }
}
+
+ scope = scope->parent;
}
- return res;
+ return NULL;
}
AstNode* symbol_resolve(Scope* start_scope, OnyxToken* tkn) {