From 419ab6f00c5396c1296a78e931693ba38d7ea102 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 17 Jan 2018 19:07:38 +0000 Subject: Named return value act as variables; Code reorganization --- src/check_expr.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/check_expr.cpp') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 1b44bdf55..c839ad2af 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1108,6 +1108,12 @@ bool check_binary_op(Checker *c, Operand *o, Token op) { error(op, "Operator '%.*s' is only allowed with numeric or pointer expressions", LIT(op.string)); return false; } +#if defined(NO_POINTER_ARITHMETIC) + if (is_type_pointer(type)) { + error(o->expr, "Pointer arithmetic is not supported"); + return false; + } +#else if (is_type_pointer(type)) { o->type = t_int; } @@ -1118,6 +1124,7 @@ bool check_binary_op(Checker *c, Operand *o, Token op) { return false; } break; +#endif case Token_Mul: case Token_Quo: @@ -1644,6 +1651,12 @@ Operand check_ptr_addition(Checker *c, TokenKind op, Operand *ptr, Operand *offs return operand; } +#if defined(NO_POINTER_ARITHMETIC) + operand.mode = Addressing_Invalid; + error(operand.expr, "Pointer arithmetic is not supported"); + return operand; +#else + Type *base_ptr = base_type(ptr->type); GB_ASSERT(base_ptr->kind == Type_Pointer); Type *elem = base_ptr->Pointer.elem; i64 elem_size = type_size_of(c->allocator, elem); @@ -1670,6 +1683,7 @@ Operand check_ptr_addition(Checker *c, TokenKind op, Operand *ptr, Operand *offs } return operand; +#endif } -- cgit v1.2.3