示例#1
0
 bool DebugStackFrame::setLocal(int which, Atom& val)
 {
     bool worked = false;
     if (trace->framep() && trace->info())
     {
         int firstLocal, pastLastLocal;
         localBounds(&firstLocal, &pastLastLocal);
         int count = pastLastLocal - firstLocal;
         if (count > 0 && which < count)
         {
             MethodInfo* info = trace->info();
             if (which == 0 && info->needRestOrArguments())
             {
                 // They are trying to modify the first local, but that is actually the special
                 // array for "...rest" or for "arguments".  That is too complicated to allow
                 // right now.  We're just going to fail the request.
             }
             else
             {
                 // copy the single arg over
                 info->unboxLocals(&val, 0, trace->types(), trace->framep(), firstLocal+which, 1);
                 worked = true;
             }
         }
     }
     return worked;
 }
示例#2
0
 bool DebugStackFrame::setArgument(int which, Atom& val)
 {
     bool worked = false;
     if (trace->framep() && trace->info())
     {
         int firstArgument, pastLastArgument;
         argumentBounds(&firstArgument, &pastLastArgument);
         int count = pastLastArgument - firstArgument;
         if (count > 0 && which < count)
         {
             // copy the single arg over
             MethodInfo* info = trace->info();
             info->unboxLocals(&val, 0, trace->types(), trace->framep(), firstArgument+which, 1);
             worked = true;
         }
     }
     return worked;
 }