/[jscoverage]/trunk/js/jsobj.cpp
ViewVC logotype

Diff of /trunk/js/jsobj.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 507 by siliconforks, Sun Jan 10 07:23:34 2010 UTC revision 585 by siliconforks, Sun Sep 12 15:13:23 2010 UTC
# Line 1257  Line 1257 
1257    
1258      fp = js_GetTopStackFrame(cx);      fp = js_GetTopStackFrame(cx);
1259      caller = js_GetScriptedCaller(cx, fp);      caller = js_GetScriptedCaller(cx, fp);
1260      indirectCall = (caller && caller->regs && *caller->regs->pc != JSOP_EVAL);      if (!caller) {
1261            JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1262                                 JSMSG_BAD_INDIRECT_CALL, js_eval_str);
1263            return JS_FALSE;
1264        }
1265        indirectCall = (caller->regs && *caller->regs->pc != JSOP_EVAL);
1266      uintN staticLevel = caller->script->staticLevel + 1;      uintN staticLevel = caller->script->staticLevel + 1;
1267    
1268      /*      /*
# Line 1300  Line 1305 
1305       * object, then we need to provide one for the compiler to stick any       * object, then we need to provide one for the compiler to stick any
1306       * declared (var) variables into.       * declared (var) variables into.
1307       */       */
1308      if (caller && !caller->varobj && !js_GetCallObject(cx, caller))      if (!caller->varobj && !js_GetCallObject(cx, caller))
1309          return JS_FALSE;          return JS_FALSE;
1310    
1311      /* Accept an optional trailing argument that overrides the scope object. */      /* Accept an optional trailing argument that overrides the scope object. */
# Line 1356  Line 1361 
1361          }          }
1362  #endif  #endif
1363    
1364          /*          /* Compile using caller's current scope object. */
1365           * Compile using caller's current scope object.          scopeobj = js_GetScopeChain(cx, caller);
1366           *          if (!scopeobj) {
1367           * NB: This means that native callers (who reach this point through              ok = JS_FALSE;
1368           * the C API) must use the two parameter form.              goto out;
          */  
         if (caller) {  
             scopeobj = js_GetScopeChain(cx, caller);  
             if (!scopeobj) {  
                 ok = JS_FALSE;  
                 goto out;  
             }  
1369          }          }
1370      } else {      } else {
1371          scopeobj = js_GetWrappedObject(cx, scopeobj);          scopeobj = js_GetWrappedObject(cx, scopeobj);
# Line 1398  Line 1396 
1396          goto out;          goto out;
1397      }      }
1398    
1399      tcflags = TCF_COMPILE_N_GO;      tcflags = TCF_COMPILE_N_GO | TCF_PUT_STATIC_LEVEL(staticLevel);
1400      if (caller) {      principals = JS_EvalFramePrincipals(cx, fp, caller);
1401          tcflags |= TCF_PUT_STATIC_LEVEL(staticLevel);      file = js_ComputeFilename(cx, caller, principals, &line);
         principals = JS_EvalFramePrincipals(cx, fp, caller);  
         file = js_ComputeFilename(cx, caller, principals, &line);  
     } else {  
         principals = NULL;  
         file = NULL;  
         line = 0;  
     }  
1402    
1403      str = JSVAL_TO_STRING(argv[0]);      str = JSVAL_TO_STRING(argv[0]);
1404      script = NULL;      script = NULL;
# Line 1492  Line 1483 
1483    
1484      if (argc < 2) {      if (argc < 2) {
1485          /* Execute using caller's new scope object (might be a Call object). */          /* Execute using caller's new scope object (might be a Call object). */
1486          if (caller)          scopeobj = caller->scopeChain;
             scopeobj = caller->scopeChain;  
1487      }      }
1488    
1489      /*      /*
# Line 3828  Line 3818 
3818                          if (!OBJ_IS_NATIVE(obj2)) {                          if (!OBJ_IS_NATIVE(obj2)) {
3819                              /* Whoops, newresolve handed back a foreign obj2. */                              /* Whoops, newresolve handed back a foreign obj2. */
3820                              JS_ASSERT(obj2 != obj);                              JS_ASSERT(obj2 != obj);
3821                                JSAutoTempValueRooter root(cx, obj2);
3822                              ok = obj2->lookupProperty(cx, id, objp, propp);                              ok = obj2->lookupProperty(cx, id, objp, propp);
3823                              if (!ok || *propp)                              if (!ok || *propp)
3824                                  goto cleanup;                                  goto cleanup;
# Line 3894  Line 3885 
3885          if (!proto)          if (!proto)
3886              break;              break;
3887          if (!OBJ_IS_NATIVE(proto)) {          if (!OBJ_IS_NATIVE(proto)) {
3888                JSAutoTempValueRooter root(cx, proto);
3889              if (!proto->lookupProperty(cx, id, objp, propp))              if (!proto->lookupProperty(cx, id, objp, propp))
3890                  return -1;                  return -1;
3891              return protoIndex + 1;              return protoIndex + 1;
# Line 3967  Line 3959 
3959                  }                  }
3960              }              }
3961  #endif  #endif
3962              if (cacheResult) {              /*
3963                 * We must check if pobj is native as a global object can have
3964                 * non-native prototype.
3965                 */
3966                if (cacheResult && OBJ_IS_NATIVE(pobj)) {
3967                  entry = js_FillPropertyCache(cx, scopeChain,                  entry = js_FillPropertyCache(cx, scopeChain,
3968                                               scopeIndex, protoIndex, pobj,                                               scopeIndex, protoIndex, pobj,
3969                                               (JSScopeProperty *) prop, false);                                               (JSScopeProperty *) prop, false);
# Line 5272  Line 5268 
5268      *bp = JS_FALSE;      *bp = JS_FALSE;
5269      if (JSVAL_IS_PRIMITIVE(v))      if (JSVAL_IS_PRIMITIVE(v))
5270          return JS_TRUE;          return JS_TRUE;
5271      obj2 = JSVAL_TO_OBJECT(v);      obj2 = js_GetWrappedObject(cx, JSVAL_TO_OBJECT(v));
5272      while ((obj2 = OBJ_GET_PROTO(cx, obj2)) != NULL) {      while ((obj2 = OBJ_GET_PROTO(cx, obj2)) != NULL) {
5273          if (obj2 == obj) {          if (obj2 == obj) {
5274              *bp = JS_TRUE;              *bp = JS_TRUE;

Legend:
Removed from v.507  
changed lines
  Added in v.585

  ViewVC Help
Powered by ViewVC 1.1.24