MCPcopy Create free account
hub / github.com/GDRETools/gdsdecomp / create_decomp_for_version

Method create_decomp_for_version

bytecode/bytecode_base.cpp:1642–1692  ·  view source on GitHub ↗

static Ref create_decomp_for_version(String ver);

Source from the content-addressed store, hash-verified

1640
1641// static Ref<GDScriptDecomp> create_decomp_for_version(String ver);
1642Ref<GDScriptDecomp> GDScriptDecomp::create_decomp_for_version(String str_ver, bool p_force) {
1643 bool include_dev = false;
1644 Ref<GodotVer> ver = GodotVer::parse(str_ver);
1645 ERR_FAIL_COND_V_MSG(ver.is_null() || ver->get_major() == 0, Ref<GDScriptDecomp>(), "Invalid version: " + str_ver);
1646 if (ver->get_prerelease().contains("dev")) {
1647 include_dev = true;
1648 }
1649 auto versions = GDScriptDecompVersion::get_decomp_versions(include_dev, ver->get_major());
1650 versions.reverse();
1651 // Exact match for dev versions
1652 if (include_dev) {
1653 str_ver = ver->as_tag();
1654 for (auto &v : versions) {
1655 bool has_max = !v.max_version.is_empty();
1656 if (v.min_version == str_ver || (has_max && v.max_version == str_ver)) {
1657 return Ref<GDScriptDecomp>(create_decomp_for_commit(v.commit));
1658 }
1659 }
1660 ERR_FAIL_COND_V_MSG(include_dev, Ref<GDScriptDecomp>(), "No version found for: " + str_ver);
1661 }
1662 if (p_force && ver->get_major() == 4 && ver->get_minor() < 3 && (ver->get_minor() != 0 || !ver->is_prerelease())) {
1663 return Ref<GDScriptDecomp>(create_decomp_for_version("4.3.0"));
1664 }
1665 Ref<GodotVer> prev_ver = nullptr;
1666 int prev_ver_commit = 0;
1667 for (auto &curr_version : versions) {
1668 Ref<GodotVer> min_ver = curr_version.get_min_version();
1669 if (ver->eq(min_ver)) {
1670 return Ref<GDScriptDecomp>(create_decomp_for_commit(curr_version.commit));
1671 }
1672
1673 if (ver->gt(min_ver) && !curr_version.max_version.is_empty()) {
1674 Ref<GodotVer> max_ver = curr_version.get_max_version();
1675 if (ver->lte(max_ver)) {
1676 return Ref<GDScriptDecomp>(create_decomp_for_commit(curr_version.commit));
1677 }
1678 }
1679 if (prev_ver_commit > 0 && ver->lt(min_ver) && ver->gte(prev_ver)) {
1680 // 3.4 -> 3.2
1681 if (ver->get_major() == prev_ver->get_major()) {
1682 return Ref<GDScriptDecomp>(create_decomp_for_commit(prev_ver_commit));
1683 }
1684 }
1685 prev_ver = min_ver;
1686 prev_ver_commit = curr_version.commit;
1687 }
1688 if (ver->get_major() == prev_ver->get_major() && ver->gte(prev_ver)) {
1689 return Ref<GDScriptDecomp>(create_decomp_for_commit(prev_ver_commit));
1690 }
1691 ERR_FAIL_V_MSG(Ref<GDScriptDecomp>(), "No version found for: " + str_ver);
1692}
1693
1694template <typename T>
1695static int64_t continuity_tester(const Vector<T> &p_vector, const Vector<T> &p_other, String name, int pos = 0) {

Callers

nothing calls this directly

Calls 14

parseFunction · 0.85
get_majorMethod · 0.80
get_prereleaseMethod · 0.80
get_minorMethod · 0.80
is_prereleaseMethod · 0.80
get_min_versionMethod · 0.80
eqMethod · 0.80
gtMethod · 0.80
get_max_versionMethod · 0.80
lteMethod · 0.80
ltMethod · 0.80
gteMethod · 0.80

Tested by

no test coverage detected