aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-09-08 19:15:12 +0100
committergingerBill <bill@gingerbill.org>2019-09-08 19:15:12 +0100
commit5fc42bf9c9e040be09a6dc976b357efb04a1efea (patch)
treedcbe1a234355b595d240c2e86022fa02910a6058
parent42bbd31df143d49340f289326f949ad524a3a70e (diff)
Update demo.odin
-rw-r--r--examples/demo/demo.odin18
-rw-r--r--src/check_type.cpp4
2 files changed, 18 insertions, 4 deletions
diff --git a/examples/demo/demo.odin b/examples/demo/demo.odin
index 92d1c17bd..9554eaa2e 100644
--- a/examples/demo/demo.odin
+++ b/examples/demo/demo.odin
@@ -1095,7 +1095,7 @@ inline_for_statement :: proc() {
}
}
-procedure_where_clauses :: proc() {
+where_clauses :: proc() {
fmt.println("\n#procedure 'where' clauses");
{ // Sanity checks
@@ -1156,6 +1156,20 @@ procedure_where_clauses :: proc() {
assert(ok_x == true);
assert(ok_y == false);
}
+
+ { // Record types
+ Foo :: struct(T: typeid, N: int)
+ where intrinsics.type_is_integer(T),
+ N > 2 {
+ x: [N]T,
+ y: [N-2]T,
+ }
+
+ T :: i32;
+ N :: 5;
+ f: Foo(T, N);
+ #assert(size_of(f) == (N+N-2)*size_of(T));
+ }
}
main :: proc() {
@@ -1179,6 +1193,6 @@ main :: proc() {
reflection();
quaternions();
inline_for_statement();
- procedure_where_clauses();
+ where_clauses();
}
}
diff --git a/src/check_type.cpp b/src/check_type.cpp
index f2d42cfe1..465c11731 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -503,7 +503,7 @@ void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast *node, Array<
struct_type->Struct.is_poly_specialized = is_poly_specialized;
if (!is_polymorphic) {
- if (st->where_clauses.count > 0 && st->polymorphic_params != nullptr) {
+ if (st->where_clauses.count > 0 && st->polymorphic_params == nullptr) {
error(st->where_clauses[0], "'where' clauses can only be used on structures with polymorphic parameters");
} else {
bool where_clause_ok = evaluate_where_clauses(ctx, ctx->scope, &st->where_clauses, true);
@@ -690,7 +690,7 @@ void check_union_type(CheckerContext *ctx, Type *union_type, Ast *node, Array<Op
union_type->Union.is_polymorphic = is_polymorphic;
union_type->Union.is_poly_specialized = is_poly_specialized;
- if (ut->where_clauses.count > 0 && ut->polymorphic_params != nullptr) {
+ if (ut->where_clauses.count > 0 && ut->polymorphic_params == nullptr) {
error(ut->where_clauses[0], "'where' clauses can only be used on unions with polymorphic parameters");
} else {
bool where_clause_ok = evaluate_where_clauses(ctx, ctx->scope, &ut->where_clauses, true);