Loading js/src/frontend/Frontend2.cpp +16 −7 Original line number Diff line number Diff line Loading @@ -221,7 +221,8 @@ bool ConvertScopeStencil(JSContext* cx, const SmooshResult& result, bool hasParameterExprs = function.has_parameter_exprs; bool needsEnvironment = function.non_positional_formal_start; FunctionIndex functionIndex = FunctionIndex(function.function_index); FunctionIndex functionIndex = FunctionIndex(function.function_index + 1); bool isArrow = function.is_arrow; ScopeIndex enclosingIndex(function.enclosing); Loading Loading @@ -366,7 +367,7 @@ bool ConvertGCThings(JSContext* cx, const SmooshResult& result, } case SmooshGCThing::Tag::Function: { gcThings.infallibleAppend( mozilla::AsVariant(FunctionIndex(item.AsFunction()))); mozilla::AsVariant(FunctionIndex(item.AsFunction() + 1))); break; } case SmooshGCThing::Tag::Scope: { Loading Loading @@ -409,7 +410,7 @@ bool ConvertScriptStencil(JSContext* cx, const SmooshResult& result, script.immutableFlags.setFlag(ImmutableFlags::HasNonSyntacticScope, options.nonSyntacticScope); if (&smooshScript == &result.scripts.data[0]) { if (&smooshScript == &result.top_level_script) { script.immutableFlags.setFlag(ImmutableFlags::TreatAsRunOnce, options.isRunOnce); script.immutableFlags.setFlag(ImmutableFlags::NoScriptRval, Loading Loading @@ -552,17 +553,25 @@ bool Smoosh::compileGlobalScriptToStencil(JSContext* cx, return false; } if (!compilationInfo.stencil.scriptData.reserve(result.scripts.len)) { if (!compilationInfo.stencil.scriptData.reserve(result.functions.len + 1)) { js::ReportOutOfMemory(cx); return false; } for (size_t i = 0; i < result.scripts.len; i++) { compilationInfo.stencil.scriptData.infallibleEmplaceBack(); if (!ConvertScriptStencil(cx, result, result.scripts.data[i], allAtoms, if (!ConvertScriptStencil( cx, result, result.top_level_script, allAtoms, compilationInfo, compilationInfo.stencil.scriptData[CompilationInfo::TopLevelIndex])) { return false; } for (size_t i = 0; i < result.functions.len; i++) { compilationInfo.stencil.scriptData.infallibleEmplaceBack(); if (!ConvertScriptStencil(cx, result, result.functions.data[i], allAtoms, compilationInfo, compilationInfo.stencil.scriptData[i])) { compilationInfo.stencil.scriptData[i + 1])) { return false; } } Loading js/src/frontend/smoosh/src/lib.rs +32 −6 Original line number Diff line number Diff line Loading @@ -347,7 +347,8 @@ pub struct SmooshResult { scopes: CVec<SmooshScopeData>, regexps: CVec<SmooshRegExpItem>, scripts: CVec<SmooshScriptStencil>, top_level_script: SmooshScriptStencil, functions: CVec<SmooshScriptStencil>, script_data_list: CVec<SmooshImmutableScriptData>, all_atoms: *mut c_void, Loading Loading @@ -375,7 +376,27 @@ impl SmooshResult { scopes: CVec::empty(), regexps: CVec::empty(), scripts: CVec::empty(), top_level_script: SmooshScriptStencil { immutable_flags: 0, gcthings: CVec::empty(), immutable_script_data: COption::None, extent: SmooshSourceExtent { source_start: 0, source_end: 0, to_string_start: 0, to_string_end: 0, lineno: 0, column: 0, }, fun_name: COption::None, fun_nargs: 0, fun_flags: 0, lazy_function_enclosing_scope_index: COption::None, is_standalone_function: false, was_function_emitted: false, is_singleton_function: false, }, functions: CVec::empty(), script_data_list: CVec::empty(), all_atoms: std::ptr::null_mut(), Loading Loading @@ -512,9 +533,11 @@ pub unsafe extern "C" fn smoosh_run( let scopes = convert_scopes(result.scopes, &mut scope_index_map); let regexps = CVec::from(result.regexps.into_iter().map(|x| x.into()).collect()); let scripts = CVec::from( let top_level_script = convert_script(result.top_level_script, &scope_index_map); let functions = CVec::from( result .scripts .functions .into_iter() .map(|x| convert_script(x, &scope_index_map)) .collect(), Loading Loading @@ -548,7 +571,8 @@ pub unsafe extern "C" fn smoosh_run( scopes, regexps, scripts, top_level_script, functions, script_data_list, all_atoms: opaque_all_atoms, Loading Loading @@ -697,7 +721,9 @@ pub unsafe extern "C" fn smoosh_free(result: SmooshResult) { let _ = result.scopes.into(); let _ = result.regexps.into(); for fun in result.scripts.into() { free_script(result.top_level_script); for fun in result.functions.into() { free_script(fun); } Loading Loading
js/src/frontend/Frontend2.cpp +16 −7 Original line number Diff line number Diff line Loading @@ -221,7 +221,8 @@ bool ConvertScopeStencil(JSContext* cx, const SmooshResult& result, bool hasParameterExprs = function.has_parameter_exprs; bool needsEnvironment = function.non_positional_formal_start; FunctionIndex functionIndex = FunctionIndex(function.function_index); FunctionIndex functionIndex = FunctionIndex(function.function_index + 1); bool isArrow = function.is_arrow; ScopeIndex enclosingIndex(function.enclosing); Loading Loading @@ -366,7 +367,7 @@ bool ConvertGCThings(JSContext* cx, const SmooshResult& result, } case SmooshGCThing::Tag::Function: { gcThings.infallibleAppend( mozilla::AsVariant(FunctionIndex(item.AsFunction()))); mozilla::AsVariant(FunctionIndex(item.AsFunction() + 1))); break; } case SmooshGCThing::Tag::Scope: { Loading Loading @@ -409,7 +410,7 @@ bool ConvertScriptStencil(JSContext* cx, const SmooshResult& result, script.immutableFlags.setFlag(ImmutableFlags::HasNonSyntacticScope, options.nonSyntacticScope); if (&smooshScript == &result.scripts.data[0]) { if (&smooshScript == &result.top_level_script) { script.immutableFlags.setFlag(ImmutableFlags::TreatAsRunOnce, options.isRunOnce); script.immutableFlags.setFlag(ImmutableFlags::NoScriptRval, Loading Loading @@ -552,17 +553,25 @@ bool Smoosh::compileGlobalScriptToStencil(JSContext* cx, return false; } if (!compilationInfo.stencil.scriptData.reserve(result.scripts.len)) { if (!compilationInfo.stencil.scriptData.reserve(result.functions.len + 1)) { js::ReportOutOfMemory(cx); return false; } for (size_t i = 0; i < result.scripts.len; i++) { compilationInfo.stencil.scriptData.infallibleEmplaceBack(); if (!ConvertScriptStencil(cx, result, result.scripts.data[i], allAtoms, if (!ConvertScriptStencil( cx, result, result.top_level_script, allAtoms, compilationInfo, compilationInfo.stencil.scriptData[CompilationInfo::TopLevelIndex])) { return false; } for (size_t i = 0; i < result.functions.len; i++) { compilationInfo.stencil.scriptData.infallibleEmplaceBack(); if (!ConvertScriptStencil(cx, result, result.functions.data[i], allAtoms, compilationInfo, compilationInfo.stencil.scriptData[i])) { compilationInfo.stencil.scriptData[i + 1])) { return false; } } Loading
js/src/frontend/smoosh/src/lib.rs +32 −6 Original line number Diff line number Diff line Loading @@ -347,7 +347,8 @@ pub struct SmooshResult { scopes: CVec<SmooshScopeData>, regexps: CVec<SmooshRegExpItem>, scripts: CVec<SmooshScriptStencil>, top_level_script: SmooshScriptStencil, functions: CVec<SmooshScriptStencil>, script_data_list: CVec<SmooshImmutableScriptData>, all_atoms: *mut c_void, Loading Loading @@ -375,7 +376,27 @@ impl SmooshResult { scopes: CVec::empty(), regexps: CVec::empty(), scripts: CVec::empty(), top_level_script: SmooshScriptStencil { immutable_flags: 0, gcthings: CVec::empty(), immutable_script_data: COption::None, extent: SmooshSourceExtent { source_start: 0, source_end: 0, to_string_start: 0, to_string_end: 0, lineno: 0, column: 0, }, fun_name: COption::None, fun_nargs: 0, fun_flags: 0, lazy_function_enclosing_scope_index: COption::None, is_standalone_function: false, was_function_emitted: false, is_singleton_function: false, }, functions: CVec::empty(), script_data_list: CVec::empty(), all_atoms: std::ptr::null_mut(), Loading Loading @@ -512,9 +533,11 @@ pub unsafe extern "C" fn smoosh_run( let scopes = convert_scopes(result.scopes, &mut scope_index_map); let regexps = CVec::from(result.regexps.into_iter().map(|x| x.into()).collect()); let scripts = CVec::from( let top_level_script = convert_script(result.top_level_script, &scope_index_map); let functions = CVec::from( result .scripts .functions .into_iter() .map(|x| convert_script(x, &scope_index_map)) .collect(), Loading Loading @@ -548,7 +571,8 @@ pub unsafe extern "C" fn smoosh_run( scopes, regexps, scripts, top_level_script, functions, script_data_list, all_atoms: opaque_all_atoms, Loading Loading @@ -697,7 +721,9 @@ pub unsafe extern "C" fn smoosh_free(result: SmooshResult) { let _ = result.scopes.into(); let _ = result.regexps.into(); for fun in result.scripts.into() { free_script(result.top_level_script); for fun in result.functions.into() { free_script(fun); } Loading