aboutsummaryrefslogtreecommitdiff
path: root/src/typecheck.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/typecheck.c')
-rw-r--r--src/typecheck.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/typecheck.c b/src/typecheck.c
index 6cd87289..0f720faa 100644
--- a/src/typecheck.c
+++ b/src/typecheck.c
@@ -1033,6 +1033,10 @@ type_t *get_type(env_t *env, ast_t *ast) {
else if (streq(call->name, "set")) return Type(VoidType);
else if (streq(call->name, "sorted")) return self_value_t;
else if (streq(call->name, "with_fallback")) return self_value_t;
+ else if (streq(call->name, "without")) return self_value_t;
+ else if (streq(call->name, "intersection")) return self_value_t;
+ else if (streq(call->name, "difference")) return self_value_t;
+ else if (streq(call->name, "with")) return self_value_t;
code_err(ast, "There is no '", call->name, "' method for ", type_to_text(self_value_t), " tables");
}
default: {
@@ -1152,9 +1156,6 @@ type_t *get_type(env_t *env, ast_t *ast) {
type_t *lhs_t = get_type(env, binop.lhs);
type_t *rhs_t = get_type(env, binop.rhs);
- type_t *lhs_val = value_type(lhs_t), *rhs_val = value_type(rhs_t);
- if (type_eq(lhs_val, rhs_val) && lhs_val->tag == TableType) return lhs_val;
-
if (binop.lhs->tag == Int && is_int_type(rhs_t)) return rhs_t;
else if (binop.rhs->tag == Int && is_int_type(lhs_t)) return lhs_t;
@@ -1198,9 +1199,6 @@ type_t *get_type(env_t *env, ast_t *ast) {
type_t *lhs_t = get_type(env, binop.lhs);
type_t *rhs_t = get_type(env, binop.rhs);
- type_t *lhs_val = value_type(lhs_t), *rhs_val = value_type(rhs_t);
- if (type_eq(lhs_val, rhs_val) && lhs_val->tag == TableType) return lhs_val;
-
if (binop.lhs->tag == Int && is_int_type(rhs_t)) return rhs_t;
else if (binop.rhs->tag == Int && is_int_type(lhs_t)) return lhs_t;
@@ -1231,9 +1229,6 @@ type_t *get_type(env_t *env, ast_t *ast) {
type_t *lhs_t = get_type(env, binop.lhs);
type_t *rhs_t = get_type(env, binop.rhs);
- type_t *lhs_val = value_type(lhs_t), *rhs_val = value_type(rhs_t);
- if (type_eq(lhs_val, rhs_val) && lhs_val->tag == TableType) return lhs_val;
-
if (binop.lhs->tag == Int && is_int_type(rhs_t)) return rhs_t;
else if (binop.rhs->tag == Int && is_int_type(lhs_t)) return lhs_t;
@@ -1291,11 +1286,6 @@ type_t *get_type(env_t *env, ast_t *ast) {
type_t *lhs_t = get_type(env, binop.lhs);
type_t *rhs_t = get_type(env, binop.rhs);
- if (ast->tag == Minus) {
- type_t *lhs_val = value_type(lhs_t), *rhs_val = value_type(rhs_t);
- if (type_eq(lhs_val, rhs_val) && lhs_val->tag == TableType) return lhs_val;
- }
-
if (ast->tag == LeftShift || ast->tag == UnsignedLeftShift || ast->tag == RightShift
|| ast->tag == UnsignedRightShift) {
if (!is_int_type(rhs_t))