jitcraft/Stack.cpp
changeset 85 06a0015b6a5c
parent 70 1aec996cde2d
     1.1 --- a/jitcraft/Stack.cpp	Fri Jul 20 00:03:10 2012 -0700
     1.2 +++ b/jitcraft/Stack.cpp	Mon Jul 23 01:19:44 2012 -0700
     1.3 @@ -95,6 +95,29 @@
     1.4  }
     1.5  
     1.6  bool
     1.7 +Stack::pushModuleFrame(Handle<Module> module, InvokeArgs &args)
     1.8 +{
     1.9 +    size_t nbytes = SizeForCodeFrame(module->code());
    1.10 +    if (reinterpret_cast<char *>(top_.sp) + nbytes >= end_) {
    1.11 +        assert(false);
    1.12 +        return false;
    1.13 +    }
    1.14 +
    1.15 +    args.args_ = top_.sp;
    1.16 +    args.nargs_ = 0;
    1.17 +    args.stack_ = this;
    1.18 +    
    1.19 +    Frame *frame = reinterpret_cast<Frame *>(top_.sp);
    1.20 +    new (frame) Frame(top_.fp, top_.pc, NULL, module->code(), zone_->heap().lifoPosition());
    1.21 +    
    1.22 +    top_.pc = frame->code()->start();
    1.23 +    top_.sp = frame->stackBase();
    1.24 +    top_.fp = frame;
    1.25 +
    1.26 +    return true;
    1.27 +}
    1.28 +
    1.29 +bool
    1.30  Stack::pushNativeFrame(Handle<Native> native, NativeArgs &args, unsigned argc)
    1.31  {
    1.32      size_t nbytes = sizeof(intptr_t) * argc + sizeof(Frame);