xref: /llvm-project/clang/lib/AST/ByteCode/Frame.h (revision a07aba5d44204a7ca0d891a3da05af9960081e4c)
1*a07aba5dSTimm Baeder //===--- Frame.h - Call frame for the VM and AST Walker ---------*- C++ -*-===//
2*a07aba5dSTimm Baeder //
3*a07aba5dSTimm Baeder // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*a07aba5dSTimm Baeder // See https://llvm.org/LICENSE.txt for license information.
5*a07aba5dSTimm Baeder // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*a07aba5dSTimm Baeder //
7*a07aba5dSTimm Baeder //===----------------------------------------------------------------------===//
8*a07aba5dSTimm Baeder //
9*a07aba5dSTimm Baeder // Defines the base class of interpreter and evaluator stack frames.
10*a07aba5dSTimm Baeder //
11*a07aba5dSTimm Baeder //===----------------------------------------------------------------------===//
12*a07aba5dSTimm Baeder 
13*a07aba5dSTimm Baeder #ifndef LLVM_CLANG_AST_INTERP_FRAME_H
14*a07aba5dSTimm Baeder #define LLVM_CLANG_AST_INTERP_FRAME_H
15*a07aba5dSTimm Baeder 
16*a07aba5dSTimm Baeder #include "clang/Basic/SourceLocation.h"
17*a07aba5dSTimm Baeder #include "llvm/Support/raw_ostream.h"
18*a07aba5dSTimm Baeder 
19*a07aba5dSTimm Baeder namespace clang {
20*a07aba5dSTimm Baeder class FunctionDecl;
21*a07aba5dSTimm Baeder 
22*a07aba5dSTimm Baeder namespace interp {
23*a07aba5dSTimm Baeder 
24*a07aba5dSTimm Baeder /// Base class for stack frames, shared between VM and walker.
25*a07aba5dSTimm Baeder class Frame {
26*a07aba5dSTimm Baeder public:
27*a07aba5dSTimm Baeder   virtual ~Frame();
28*a07aba5dSTimm Baeder 
29*a07aba5dSTimm Baeder   /// Generates a human-readable description of the call site.
30*a07aba5dSTimm Baeder   virtual void describe(llvm::raw_ostream &OS) const = 0;
31*a07aba5dSTimm Baeder 
32*a07aba5dSTimm Baeder   /// Returns a pointer to the caller frame.
33*a07aba5dSTimm Baeder   virtual Frame *getCaller() const = 0;
34*a07aba5dSTimm Baeder 
35*a07aba5dSTimm Baeder   /// Returns the location of the call site.
36*a07aba5dSTimm Baeder   virtual SourceRange getCallRange() const = 0;
37*a07aba5dSTimm Baeder 
38*a07aba5dSTimm Baeder   /// Returns the called function's declaration.
39*a07aba5dSTimm Baeder   virtual const FunctionDecl *getCallee() const = 0;
40*a07aba5dSTimm Baeder };
41*a07aba5dSTimm Baeder 
42*a07aba5dSTimm Baeder } // namespace interp
43*a07aba5dSTimm Baeder } // namespace clang
44*a07aba5dSTimm Baeder 
45*a07aba5dSTimm Baeder #endif
46