// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef RUNTIME_LIB_INVOCATION_MIRROR_H_
#define RUNTIME_LIB_INVOCATION_MIRROR_H_

#include "vm/allocation.h"

namespace dart {

class InvocationMirror : public AllStatic {
 public:
  // These enum correspond to the constants in invocation_mirror_patch.dart.
  // It is used to communicate the reason for statically thrown
  // NoSuchMethodErrors by the compiler.
  enum Type {
    // Constants describing the invocation type.
    // kField cannot be generated by regular invocation mirrors.
    kMethod = 0,
    kGetter = 1,
    kSetter = 2,
    kField = 3,
    kLocalVar = 4,
    kTypeShift = 0,
    kTypeBits = 3,
    kTypeMask = (1 << kTypeBits) - 1
  };

  enum Call {
    // These values, except kDynamic and kSuper, are only used when throwing
    // NoSuchMethodError for compile-time resolution failures.
    kDynamic = 0,
    kSuper = 1,
    kStatic = 2,
    kConstructor = 3,
    kTopLevel = 4,
    kCallShift = kTypeBits,
    kCallBits = 3,
    kCallMask = (1 << kCallBits) - 1
  };

  static int EncodeType(Call call, Type type) {
    return (call << kCallShift) | type;
  }
};

}  // namespace dart

#endif  // RUNTIME_LIB_INVOCATION_MIRROR_H_
