jitcraft/Stack.h
changeset 26 a48382113da6
parent 14 0784ac5cc347
child 47 050939c6181e
     1.1 --- a/jitcraft/Stack.h	Mon Jul 02 01:24:57 2012 -0700
     1.2 +++ b/jitcraft/Stack.h	Mon Jul 02 01:52:57 2012 -0700
     1.3 @@ -21,6 +21,7 @@
     1.4  #include <stddef.h>
     1.5  #include "Utility.h"
     1.6  #include "Code.h"
     1.7 +#include "Functions.h"
     1.8  
     1.9  namespace jc {
    1.10  
    1.11 @@ -60,13 +61,15 @@
    1.12  
    1.13      Frame *prev_;
    1.14      bytecode *prevpc_;
    1.15 +    Function *fun_;
    1.16      Code *code_;
    1.17      Address lifoPosition_;
    1.18  
    1.19    public:
    1.20 -    Frame(Frame *prev, bytecode *prevpc, Code *code, Address lifoPosition)
    1.21 +    Frame(Frame *prev, bytecode *prevpc, Function *fun, Code *code, Address lifoPosition)
    1.22        : prev_(prev),
    1.23          prevpc_(prevpc),
    1.24 +        fun_(fun),
    1.25          code_(code),
    1.26          lifoPosition_(lifoPosition)
    1.27      {
    1.28 @@ -78,6 +81,13 @@
    1.29      LocalSlot *stackBase() {
    1.30          return locals() + code_->nlocals();
    1.31      }
    1.32 +    Function *fun() const {
    1.33 +        assert(fun_);
    1.34 +        return fun_;
    1.35 +    }
    1.36 +    Function *maybeFun() const {
    1.37 +        return fun_;
    1.38 +    }
    1.39      Code *code() const {
    1.40          return code_;
    1.41      }
    1.42 @@ -91,7 +101,7 @@
    1.43          return lifoPosition_;
    1.44      }
    1.45      LocalSlot &arg(unsigned slot) {
    1.46 -        assert(slot < code()->nargs());
    1.47 +        assert(slot < fun()->nargs());
    1.48          return *(reinterpret_cast<LocalSlot *>(this) - slot - 1);
    1.49      }
    1.50  };
    1.51 @@ -112,7 +122,7 @@
    1.52      bool initialize();
    1.53  
    1.54    public:
    1.55 -    Frame *pushFrame(Frame *prev, Code *code);
    1.56 +    Frame *pushFrame(Frame *prev, Function *fun);
    1.57      Frame *popFrame(Frame *frame);
    1.58  
    1.59      Top *top() {