1// Copyright 2016 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// A container to associate type bounds with AST Expression nodes.
6
7#ifndef V8_AST_AST_TYPE_BOUNDS_H_
8#define V8_AST_AST_TYPE_BOUNDS_H_
9
10#include "src/ast/ast-types.h"
11#include "src/zone/zone-containers.h"
12
13namespace v8 {
14namespace internal {
15
16class Expression;
17
18class AstTypeBounds {
19 public:
20  explicit AstTypeBounds(Zone* zone) : bounds_map_(zone) {}
21  ~AstTypeBounds() {}
22
23  AstBounds get(Expression* expression) const {
24    ZoneMap<Expression*, AstBounds>::const_iterator i =
25        bounds_map_.find(expression);
26    return (i != bounds_map_.end()) ? i->second : AstBounds::Unbounded();
27  }
28
29  void set(Expression* expression, AstBounds bounds) {
30    bounds_map_[expression] = bounds;
31  }
32
33 private:
34  ZoneMap<Expression*, AstBounds> bounds_map_;
35};
36
37}  // namespace internal
38}  // namespace v8
39
40#endif  // V8_AST_AST_TYPE_BOUNDS_H_
41