switch (node->kind) {
case Ast_Kind_Binary_Op: return (AstTyped *) ast_reduce_binop(a, (AstBinaryOp *) node);
case Ast_Kind_Unary_Op: return (AstTyped *) ast_reduce_unaryop(a, (AstUnaryOp *) node);
- case Ast_Kind_NumLit: return node;
case Ast_Kind_Enum_Value: return (AstTyped *) ((AstEnumValue *) node)->value;
- default: return NULL;
+ default: return node;
}
}
return 0;
}
+ if (to->kind == Type_Kind_Slice && from->kind == Type_Kind_Array) {
+ if (!types_are_compatible(to->Slice.ptr_to_data->Pointer.elem, from->Array.elem)) {
+ *err_msg = "Array to slice cast is not valid here because the types are different.";
+ return 0;
+ } else {
+ return 1;
+ }
+ }
+
if (from->kind == Type_Kind_Slice || to->kind == Type_Kind_Slice) {
*err_msg = "Cannot cast to or from a slice.";
return 0;
return;
}
+ if (to->kind == Type_Kind_Slice && from->kind == Type_Kind_Array) {
+ WID(WI_I32_CONST, from->Array.count);
+ *pcode = code;
+ return;
+ }
+
i32 fromidx = -1, toidx = -1;
if (from->Basic.flags & Basic_Flag_Pointer || from->kind == Type_Kind_Array) {
fromidx = 10;