// 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_
