// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef TOOLS_GN_OPERATORS_H_
#define TOOLS_GN_OPERATORS_H_

class BinaryOpNode;
class Err;
class ParseNode;
class Scope;
class Token;
class UnaryOpNode;
class Value;

bool IsUnaryOperator(const Token& token);
bool IsBinaryOperator(const Token& token);

bool IsFunctionCallArgBeginScoper(const Token& token);  // "("
bool IsFunctionCallArgEndScoper(const Token& token);  // ")"

bool IsScopeBeginScoper(const Token& token);  // "{"
bool IsScopeEndScoper(const Token& token);  // "}"

Value ExecuteUnaryOperator(Scope* scope,
                           const UnaryOpNode* op_node,
                           const Value& value,
                           Err* err);
Value ExecuteBinaryOperator(Scope* scope,
                            const BinaryOpNode* op_node,
                            const ParseNode* left,
                            const ParseNode* right,
                            Err* err);

#endif  // TOOLS_GN_OPERATORS_H_