Commit ccc527c1 authored by Razvan Maries's avatar Razvan Maries
Browse files

Backed out changeset dc0e79665aa5 (bug 1662383) for Linux SM bustages. CLOSED TREE

parent 6b63ec50
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -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);
@@ -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: {
@@ -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,
@@ -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;
    }
  }
+32 −6
Original line number Diff line number Diff line
@@ -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,
@@ -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(),
@@ -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(),
@@ -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,
@@ -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);
    }