// Copyright 2020 The Tint Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "src/transform/bound_array_accessors_transform.h"

#include <memory>
#include <utility>

#include "src/ast/assignment_statement.h"
#include "src/ast/binary_expression.h"
#include "src/ast/bitcast_expression.h"
#include "src/ast/block_statement.h"
#include "src/ast/call_expression.h"
#include "src/ast/call_statement.h"
#include "src/ast/case_statement.h"
#include "src/ast/else_statement.h"
#include "src/ast/if_statement.h"
#include "src/ast/loop_statement.h"
#include "src/ast/member_accessor_expression.h"
#include "src/ast/return_statement.h"
#include "src/ast/scalar_constructor_expression.h"
#include "src/ast/sint_literal.h"
#include "src/ast/switch_statement.h"
#include "src/ast/type/array_type.h"
#include "src/ast/type/matrix_type.h"
#include "src/ast/type/u32_type.h"
#include "src/ast/type/vector_type.h"
#include "src/ast/type_constructor_expression.h"
#include "src/ast/uint_literal.h"
#include "src/ast/unary_op_expression.h"
#include "src/ast/variable.h"
#include "src/ast/variable_decl_statement.h"

namespace tint {
namespace transform {

BoundArrayAccessorsTransform::BoundArrayAccessorsTransform(Context* ctx,
                                                           ast::Module* mod)
    : Transformer(ctx, mod) {}

BoundArrayAccessorsTransform::~BoundArrayAccessorsTransform() = default;

bool BoundArrayAccessorsTransform::Run() {
  // We skip over global variables as the constructor for a global must be a
  // constant expression. There can't be any array accessors as per the current
  // grammar.

  for (auto* func : mod_->functions()) {
    scope_stack_.push_scope();
    if (!ProcessStatement(func->body())) {
      return false;
    }
    scope_stack_.pop_scope();
  }
  return true;
}

bool BoundArrayAccessorsTransform::ProcessStatement(ast::Statement* stmt) {
  if (stmt->IsAssign()) {
    auto* as = stmt->AsAssign();
    return ProcessExpression(as->lhs()) && ProcessExpression(as->rhs());
  } else if (stmt->IsBlock()) {
    for (auto* s : *(stmt->AsBlock())) {
      if (!ProcessStatement(s)) {
        return false;
      }
    }
  } else if (stmt->IsBreak()) {
    /* nop */
  } else if (stmt->IsCall()) {
    return ProcessExpression(stmt->AsCall()->expr());
  } else if (stmt->IsCase()) {
    return ProcessStatement(stmt->AsCase()->body());
  } else if (stmt->IsContinue()) {
    /* nop */
  } else if (stmt->IsDiscard()) {
    /* nop */
  } else if (stmt->IsElse()) {
    auto* e = stmt->AsElse();
    return ProcessExpression(e->condition()) && ProcessStatement(e->body());
  } else if (stmt->IsFallthrough()) {
    /* nop */
  } else if (stmt->IsIf()) {
    auto* e = stmt->AsIf();
    if (!ProcessExpression(e->condition()) || !ProcessStatement(e->body())) {
      return false;
    }
    for (auto* s : e->else_statements()) {
      if (!ProcessStatement(s)) {
        return false;
      }
    }
  } else if (stmt->IsLoop()) {
    auto* l = stmt->AsLoop();
    if (l->has_continuing() && !ProcessStatement(l->continuing())) {
      return false;
    }
    return ProcessStatement(l->body());
  } else if (stmt->IsReturn()) {
    if (stmt->AsReturn()->has_value()) {
      return ProcessExpression(stmt->AsReturn()->value());
    }
  } else if (stmt->IsSwitch()) {
    auto* s = stmt->AsSwitch();
    if (!ProcessExpression(s->condition())) {
      return false;
    }

    for (auto* c : s->body()) {
      if (!ProcessStatement(c)) {
        return false;
      }
    }
  } else if (stmt->IsVariableDecl()) {
    auto* v = stmt->AsVariableDecl()->variable();
    if (v->has_constructor() && !ProcessExpression(v->constructor())) {
      return false;
    }
    scope_stack_.set(v->name(), v);
  } else {
    error_ = "unknown statement in bound array accessors transform";
    return false;
  }
  return true;
}

bool BoundArrayAccessorsTransform::ProcessExpression(ast::Expression* expr) {
  if (expr->IsArrayAccessor()) {
    return ProcessArrayAccessor(expr->AsArrayAccessor());
  } else if (expr->IsBitcast()) {
    return ProcessExpression(expr->AsBitcast()->expr());
  } else if (expr->IsCall()) {
    auto* c = expr->AsCall();
    if (!ProcessExpression(c->func())) {
      return false;
    }
    for (auto* e : c->params()) {
      if (!ProcessExpression(e)) {
        return false;
      }
    }
  } else if (expr->IsIdentifier()) {
    /* nop */
  } else if (expr->IsConstructor()) {
    auto* c = expr->AsConstructor();
    if (c->IsTypeConstructor()) {
      for (auto* e : c->AsTypeConstructor()->values()) {
        if (!ProcessExpression(e)) {
          return false;
        }
      }
    }
  } else if (expr->IsMemberAccessor()) {
    auto* m = expr->AsMemberAccessor();
    return ProcessExpression(m->structure()) && ProcessExpression(m->member());
  } else if (expr->IsBinary()) {
    auto* b = expr->AsBinary();
    return ProcessExpression(b->lhs()) && ProcessExpression(b->rhs());
  } else if (expr->IsUnaryOp()) {
    return ProcessExpression(expr->AsUnaryOp()->expr());
  } else {
    error_ = "unknown statement in bound array accessors transform";
    return false;
  }
  return true;
}

bool BoundArrayAccessorsTransform::ProcessArrayAccessor(
    ast::ArrayAccessorExpression* expr) {
  if (!ProcessExpression(expr->array()) ||
      !ProcessExpression(expr->idx_expr())) {
    return false;
  }

  auto* ret_type = expr->array()->result_type()->UnwrapAll();
  if (!ret_type->Is<ast::type::ArrayType>() && !ret_type->IsMatrix() &&
      !ret_type->IsVector()) {
    return true;
  }

  if (ret_type->IsVector() || ret_type->Is<ast::type::ArrayType>()) {
    uint32_t size = ret_type->IsVector()
                        ? ret_type->AsVector()->size()
                        : ret_type->As<ast::type::ArrayType>()->size();
    if (size == 0) {
      error_ = "invalid 0 size for array or vector";
      return false;
    }

    if (!ProcessAccessExpression(expr, size)) {
      return false;
    }
  } else {
    // The row accessor would have been an embedded array accessor and already
    // handled, so we just need to do columns here.
    uint32_t size = ret_type->AsMatrix()->columns();
    if (!ProcessAccessExpression(expr, size)) {
      return false;
    }
  }
  return true;
}

bool BoundArrayAccessorsTransform::ProcessAccessExpression(
    ast::ArrayAccessorExpression* expr,
    uint32_t size) {
  // Scalar constructor we can re-write the value to be within bounds.
  if (expr->idx_expr()->IsConstructor() &&
      expr->idx_expr()->AsConstructor()->IsScalarConstructor()) {
    auto* lit =
        expr->idx_expr()->AsConstructor()->AsScalarConstructor()->literal();
    if (lit->IsSint()) {
      int32_t val = lit->AsSint()->value();
      if (val < 0) {
        val = 0;
      } else if (val >= int32_t(size)) {
        val = int32_t(size) - 1;
      }
      lit->AsSint()->set_value(val);
    } else if (lit->IsUint()) {
      uint32_t val = lit->AsUint()->value();
      if (val >= size - 1) {
        val = size - 1;
      }
      lit->AsUint()->set_value(val);
    } else {
      error_ = "unknown scalar constructor type for accessor";
      return false;
    }
  } else {
    auto* u32 = mod_->create<ast::type::U32Type>();

    ast::ExpressionList cast_expr;
    cast_expr.push_back(expr->idx_expr());

    ast::ExpressionList params;
    params.push_back(create<ast::TypeConstructorExpression>(u32, cast_expr));
    params.push_back(create<ast::ScalarConstructorExpression>(
        create<ast::UintLiteral>(u32, size - 1)));

    auto* call_expr = create<ast::CallExpression>(
        create<ast::IdentifierExpression>("min"), std::move(params));
    call_expr->set_result_type(u32);

    expr->set_idx_expr(call_expr);
  }
  return true;
}

}  // namespace transform
}  // namespace tint
