static bool CheckArgumentsWithinEval(JSContext *cx, Parser<FullParseHandler> &parser, HandleFunction fun) { if (fun->hasRest()) { // It's an error to use |arguments| in a function that has a rest // parameter. parser.report(ParseError, false, nullptr, JSMSG_ARGUMENTS_AND_REST); return false; } // Force construction of arguments objects for functions that use // |arguments| within an eval. RootedScript script(cx, fun->getOrCreateScript(cx)); if (!script) return false; if (script->argumentsHasVarBinding()) { if (!JSScript::argumentsOptimizationFailed(cx, script)) return false; } // It's an error to use |arguments| in a legacy generator expression. if (script->isGeneratorExp() && script->isLegacyGenerator()) { parser.report(ParseError, false, nullptr, JSMSG_BAD_GENEXP_BODY, js_arguments_str); return false; } return true; }
JS_GetFunctionScript(JSContext *cx, HandleFunction fun) { if (fun->isNative()) return nullptr; if (fun->isInterpretedLazy()) { AutoCompartment funCompartment(cx, fun); JSScript *script = fun->getOrCreateScript(cx); if (!script) MOZ_CRASH(); return script; } return fun->nonLazyScript(); }