aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-01-27 12:28:05 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-01-27 12:28:05 -0700
commitd27b76fc31c33d9381a95ecd5e8567c93bf12eb0 (patch)
treec5fdb9ef94a968c7d706eff57c3758b529d11c7a /src
parentfe0c6a3df9480cc3d0be7412cd24bba4366c18a1 (diff)
downloadzig-d27b76fc31c33d9381a95ecd5e8567c93bf12eb0.tar.gz
zig-d27b76fc31c33d9381a95ecd5e8567c93bf12eb0.zip
add error for `@typeof` or `&` of number literal
closes #85
Diffstat (limited to 'src')
-rw-r--r--src/analyze.cpp34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 78402d6614..79a3323966 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -3426,10 +3426,30 @@ static TypeTableEntry *analyze_builtin_fn_call_expr(CodeGen *g, ImportTableEntry
AstNode *expr_node = node->data.fn_call_expr.params.at(0);
TypeTableEntry *type_entry = analyze_expression(g, import, context, nullptr, expr_node);
- if (type_entry->id == TypeTableEntryIdInvalid) {
- return g->builtin_types.entry_invalid;
- } else {
- return resolve_expr_const_val_as_type(g, node, type_entry);
+ switch (type_entry->id) {
+ case TypeTableEntryIdInvalid:
+ return type_entry;
+ case TypeTableEntryIdNumLitFloat:
+ case TypeTableEntryIdNumLitInt:
+ case TypeTableEntryIdUndefLit:
+ add_node_error(g, expr_node,
+ buf_sprintf("type '%s' not eligible for @typeof", buf_ptr(&type_entry->name)));
+ return g->builtin_types.entry_invalid;
+ case TypeTableEntryIdMetaType:
+ case TypeTableEntryIdVoid:
+ case TypeTableEntryIdBool:
+ case TypeTableEntryIdUnreachable:
+ case TypeTableEntryIdInt:
+ case TypeTableEntryIdFloat:
+ case TypeTableEntryIdPointer:
+ case TypeTableEntryIdArray:
+ case TypeTableEntryIdStruct:
+ case TypeTableEntryIdMaybe:
+ case TypeTableEntryIdErrorUnion:
+ case TypeTableEntryIdPureError:
+ case TypeTableEntryIdEnum:
+ case TypeTableEntryIdFn:
+ return resolve_expr_const_val_as_type(g, node, type_entry);
}
}
case BuiltinFnIdCInclude:
@@ -3729,6 +3749,12 @@ static TypeTableEntry *analyze_prefix_op_expr(CodeGen *g, ImportTableEntry *impo
return resolve_expr_const_val_as_type(g, node,
get_pointer_to_type(g, meta_type, is_const));
}
+ } else if (child_type->id == TypeTableEntryIdNumLitInt ||
+ child_type->id == TypeTableEntryIdNumLitFloat)
+ {
+ add_node_error(g, expr_node,
+ buf_sprintf("unable to get address of type '%s'", buf_ptr(&child_type->name)));
+ return g->builtin_types.entry_invalid;
} else {
return get_pointer_to_type(g, child_type, is_const);
}