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

Diff of /trunk/js/jsfun.cpp

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

revision 332 by siliconforks, Thu Oct 23 19:03:33 2008 UTC revision 399 by siliconforks, Tue Dec 9 03:37:47 2008 UTC
# Line 49  Line 49 
49  #include "jsapi.h"  #include "jsapi.h"
50  #include "jsarray.h"  #include "jsarray.h"
51  #include "jsatom.h"  #include "jsatom.h"
52    #include "jsbuiltins.h"
53  #include "jscntxt.h"  #include "jscntxt.h"
54  #include "jsversion.h"  #include "jsversion.h"
55  #include "jsdbgapi.h"  #include "jsdbgapi.h"
56    #include "jsemit.h"
57  #include "jsfun.h"  #include "jsfun.h"
58  #include "jsgc.h"  #include "jsgc.h"
59  #include "jsinterp.h"  #include "jsinterp.h"
# Line 1584  Line 1586 
1586  }  }
1587  #endif  #endif
1588    
1589  static const char call_str[] = "call";  JSBool
1590    js_fun_call(JSContext *cx, uintN argc, jsval *vp)
 static JSBool  
 fun_call(JSContext *cx, uintN argc, jsval *vp)  
1591  {  {
1592      JSObject *obj;      JSObject *obj;
1593      jsval fval, *argv, *invokevp;      jsval fval, *argv, *invokevp;
# Line 1608  Line 1608 
1608              if (bytes) {              if (bytes) {
1609                  JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,                  JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1610                                       JSMSG_INCOMPATIBLE_PROTO,                                       JSMSG_INCOMPATIBLE_PROTO,
1611                                       js_Function_str, call_str,                                       js_Function_str, js_call_str,
1612                                       bytes);                                       bytes);
1613              }              }
1614          }          }
# Line 1658  Line 1658 
1658    
1659      if (argc == 0) {      if (argc == 0) {
1660          /* Will get globalObject as 'this' and no other arguments. */          /* Will get globalObject as 'this' and no other arguments. */
1661          return fun_call(cx, argc, vp);          return js_fun_call(cx, argc, vp);
1662      }      }
1663    
1664      obj = JS_THIS_OBJECT(cx, vp);      obj = JS_THIS_OBJECT(cx, vp);
# Line 1674  Line 1674 
1674              if (bytes) {              if (bytes) {
1675                  JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,                  JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1676                                       JSMSG_INCOMPATIBLE_PROTO,                                       JSMSG_INCOMPATIBLE_PROTO,
1677                                       js_Function_str, "apply",                                       js_Function_str, js_apply_str,
1678                                       bytes);                                       bytes);
1679              }              }
1680          }          }
# Line 1699  Line 1699 
1699              }              }
1700              if (!arraylike) {              if (!arraylike) {
1701                  JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,                  JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
1702                                       JSMSG_BAD_APPLY_ARGS, "apply");                                       JSMSG_BAD_APPLY_ARGS, js_apply_str);
1703                  return JS_FALSE;                  return JS_FALSE;
1704              }              }
1705          }          }
# Line 1786  Line 1786 
1786      JS_FN(js_toSource_str,   fun_toSource,   0,0),      JS_FN(js_toSource_str,   fun_toSource,   0,0),
1787  #endif  #endif
1788      JS_FN(js_toString_str,   fun_toString,   0,0),      JS_FN(js_toString_str,   fun_toString,   0,0),
1789      JS_FN("apply",           js_fun_apply,   2,0),      JS_FN(js_apply_str,      js_fun_apply,   2,0),
1790      JS_FN(call_str,          fun_call,       1,0),      JS_FN(js_call_str,       js_fun_call,    1,0),
1791  #ifdef NARCISSUS  #ifdef NARCISSUS
1792      JS_FN("__applyConstructor__", fun_applyConstructor, 0,1,0),      JS_FN("__applyConstructor__", fun_applyConstructor, 1,0),
1793  #endif  #endif
1794      JS_FS_END      JS_FS_END
1795  };  };
# Line 2038  Line 2038 
2038      fun = js_NewFunction(cx, proto, NULL, 0, JSFUN_INTERPRETED, obj, NULL);      fun = js_NewFunction(cx, proto, NULL, 0, JSFUN_INTERPRETED, obj, NULL);
2039      if (!fun)      if (!fun)
2040          goto bad;          goto bad;
2041      fun->u.i.script = js_NewScript(cx, 1, 0, 0, 0, 0, 0, 0);      fun->u.i.script = js_NewScript(cx, 1, 1, 0, 0, 0, 0, 0);
2042      if (!fun->u.i.script)      if (!fun->u.i.script)
2043          goto bad;          goto bad;
2044      fun->u.i.script->code[0] = JSOP_STOP;      fun->u.i.script->code[0] = JSOP_STOP;
2045        *SCRIPT_NOTES(fun->u.i.script) = SRC_NULL;
2046  #ifdef CHECK_SCRIPT_OWNER  #ifdef CHECK_SCRIPT_OWNER
2047      fun->u.i.script->owner = NULL;      fun->u.i.script->owner = NULL;
2048  #endif  #endif
# Line 2089  Line 2090 
2090    
2091      /* Initialize all function members. */      /* Initialize all function members. */
2092      fun->nargs = nargs;      fun->nargs = nargs;
2093      fun->flags = flags & (JSFUN_FLAGS_MASK | JSFUN_INTERPRETED);      fun->flags = flags & (JSFUN_FLAGS_MASK | JSFUN_INTERPRETED | JSFUN_TRACEABLE);
2094      if (flags & JSFUN_INTERPRETED) {      if (flags & JSFUN_INTERPRETED) {
2095          JS_ASSERT(!native);          JS_ASSERT(!native);
2096          JS_ASSERT(nargs == 0);          JS_ASSERT(nargs == 0);
# Line 2100  Line 2101 
2101          fun->u.i.names.taggedAtom = 0;          fun->u.i.names.taggedAtom = 0;
2102  #endif  #endif
2103      } else {      } else {
         fun->u.n.native = native;  
2104          fun->u.n.extra = 0;          fun->u.n.extra = 0;
2105          fun->u.n.spare = 0;          fun->u.n.spare = 0;
2106          fun->u.n.clasp = NULL;          if (flags & JSFUN_TRACEABLE) {
2107    #ifdef JS_TRACER
2108                JSTraceableNative *trcinfo = (JSTraceableNative *) native;
2109                fun->u.n.native = (JSNative) trcinfo->native;
2110                FUN_TRCINFO(fun) = trcinfo;
2111    #else
2112                JS_ASSERT(0);
2113    #endif
2114            } else {
2115                fun->u.n.native = native;
2116                FUN_CLASP(fun) = NULL;
2117            }
2118      }      }
2119      fun->atom = atom;      fun->atom = atom;
2120    

Legend:
Removed from v.332  
changed lines
  Added in v.399

  ViewVC Help
Powered by ViewVC 1.1.24