| ... | ... | @@ -3426,10 +3426,30 @@ static TypeTableEntry *analyze_builtin_fn_call_expr(CodeGen *g, ImportTableEntry |
| 3426 | 3426 | AstNode *expr_node = node->data.fn_call_expr.params.at(0); |
| 3427 | 3427 | TypeTableEntry *type_entry = analyze_expression(g, import, context, nullptr, expr_node); |
| 3428 | 3428 | |
| 3429 | | if (type_entry->id == TypeTableEntryIdInvalid) { |
| 3430 | | return g->builtin_types.entry_invalid; |
| 3431 | | } else { |
| 3432 | | return resolve_expr_const_val_as_type(g, node, type_entry); |
| 3429 | switch (type_entry->id) { |
| 3430 | case TypeTableEntryIdInvalid: |
| 3431 | return type_entry; |
| 3432 | case TypeTableEntryIdNumLitFloat: |
| 3433 | case TypeTableEntryIdNumLitInt: |
| 3434 | case TypeTableEntryIdUndefLit: |
| 3435 | add_node_error(g, expr_node, |
| 3436 | buf_sprintf("type '%s' not eligible for @typeof", buf_ptr(&type_entry->name))); |
| 3437 | return g->builtin_types.entry_invalid; |
| 3438 | case TypeTableEntryIdMetaType: |
| 3439 | case TypeTableEntryIdVoid: |
| 3440 | case TypeTableEntryIdBool: |
| 3441 | case TypeTableEntryIdUnreachable: |
| 3442 | case TypeTableEntryIdInt: |
| 3443 | case TypeTableEntryIdFloat: |
| 3444 | case TypeTableEntryIdPointer: |
| 3445 | case TypeTableEntryIdArray: |
| 3446 | case TypeTableEntryIdStruct: |
| 3447 | case TypeTableEntryIdMaybe: |
| 3448 | case TypeTableEntryIdErrorUnion: |
| 3449 | case TypeTableEntryIdPureError: |
| 3450 | case TypeTableEntryIdEnum: |
| 3451 | case TypeTableEntryIdFn: |
| 3452 | return resolve_expr_const_val_as_type(g, node, type_entry); |
| 3433 | 3453 | } |
| 3434 | 3454 | } |
| 3435 | 3455 | case BuiltinFnIdCInclude: |
| ... | ... | @@ -3729,6 +3749,12 @@ static TypeTableEntry *analyze_prefix_op_expr(CodeGen *g, ImportTableEntry *impo |
| 3729 | 3749 | return resolve_expr_const_val_as_type(g, node, |
| 3730 | 3750 | get_pointer_to_type(g, meta_type, is_const)); |
| 3731 | 3751 | } |
| 3752 | } else if (child_type->id == TypeTableEntryIdNumLitInt || |
| 3753 | child_type->id == TypeTableEntryIdNumLitFloat) |
| 3754 | { |
| 3755 | add_node_error(g, expr_node, |
| 3756 | buf_sprintf("unable to get address of type '%s'", buf_ptr(&child_type->name))); |
| 3757 | return g->builtin_types.entry_invalid; |
| 3732 | 3758 | } else { |
| 3733 | 3759 | return get_pointer_to_type(g, child_type, is_const); |
| 3734 | 3760 | } |