Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into cne-pr
Browse files Browse the repository at this point in the history
  • Loading branch information
mcagabe19 committed Nov 11, 2024
2 parents eafd09f + 74ce175 commit d56702e
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 52 deletions.
2 changes: 1 addition & 1 deletion project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@
<haxedef name="USE_ADAPTED_ASSETS" unless="web" />

<!-- Comment this out to disable support for custom ndlls. !-->
<haxedef name="NDLLS_SUPPORTED" unless="web || iphonesim" />
<haxedef name="NDLLS_SUPPORTED" unless="web || iphonesim || hl" />

<!-- Comment this out to disable support for Away3D Flixel Intergration (reduces compile times)-->
<define name="THREE_D_SUPPORT" />
Expand Down
2 changes: 1 addition & 1 deletion source/funkin/backend/system/github/GitHub.hx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package funkin.backend.system.github;

#if GITHUB_API
import haxe.Json;
import haxe.Exception;
#end
import haxe.Exception;

// TODO: Document further and perhaps make this a Haxelib.
class GitHub {
Expand Down
91 changes: 42 additions & 49 deletions source/funkin/backend/system/macros/HashLinkFixer.hx
Original file line number Diff line number Diff line change
Expand Up @@ -42,26 +42,12 @@ class HashLinkFixer {
var cl = clRef.get();

if (cl.isAbstract || cl.isExtern || cl.isInterface) return fields;
if (!cl.name.endsWith("_Impl_") && !cl.name.endsWith("_HSX") && !cl.name.endsWith("_HSC") && !cl.name.endsWith("_HLFHelper")) {
var metas = cl.meta.get();

if (!cl.name.endsWith("_Impl_") && !cl.name.endsWith("_HSX") && !cl.name.endsWith("_HSC")) {
if(cl.params.length > 0)
return fields;

if(cl.module == "EReg") return fields; // private typedef in same class
if(cl.module == "hl.Format") return fields; // enum in same class

var definedFields = [];

var helperClass = macro class {

};

helperClass.pos = cl.pos;

var module = cl.module + "_HLFHelper";
var hcClassName = cl.name + "_HLFHelper";

for(f in fields.copy()) {
if (f == null)
continue;
Expand All @@ -70,10 +56,12 @@ class HashLinkFixer {

if(definedFields.contains(f.name)) continue; // no duplicate fields

var hlNativeMeta = null;
var hasHlNative = false;
for(m in f.meta)
if (m.name == ":hlNative") {
hasHlNative = true;
hlNativeMeta = m;
break;
}

Expand All @@ -92,67 +80,72 @@ class HashLinkFixer {
var overrideExpr:Expr;
var returns:Bool = !fun.ret.match(TPath({name: "Void"}));

var printer = new haxe.macro.Printer();
if(cl.module == "hl.Gc" && fun.ret == null) returns = false; // fix since they dont explicitly set :Void
if(cl.module == "hl.Format" && fun.ret == null) returns = false; // fix since they dont explicitly set :Void

var name = 'hlf_${f.name}';

var arguments = fun.args == null ? [] : [for(a in fun.args) macro $i{a.name}];

var funcExpr:Expr = returns ? {
//macro return $i{name}($a{arguments});
macro return @:privateAccess $i{hcClassName}.$name($a{arguments});
} : {
macro @:privateAccess $i{hcClassName}.$name($a{arguments});
};
var funcExpr:Expr = macro @:privateAccess $i{name}($a{arguments});
if(returns) funcExpr = macro return $funcExpr;

var cleanMeta = f.meta.copy().filter(function(m) return m.name != ":hlNative");
var hasBareMeta = hlNativeMeta.params.length == 0;

var meta = f.meta.copy();
switch hlNativeMeta {
case {params: []}:
meta = [{name: ":hlNative", params: [macro "std", macro $v{f.name}], pos: Context.currentPos()}].concat(cleanMeta);
case {params: [_.expr => EConst(CString(name))]}:
meta = [{name: ":hlNative", params: [macro "std", macro $v{name}], pos: Context.currentPos()}].concat(cleanMeta);
case {params: [_.expr => EConst(CFloat(version))]}:
var curVersion = Context.definedValue("hl_ver");
if(curVersion == null) curVersion = "";
if(version > curVersion) {
meta = cleanMeta;
if(f.meta.filter((m) -> m.name == ":noExpr").length > 0)
Context.error("Missing function body", f.pos);
funcExpr = fun.expr; // restore to default behaviour
} else {
meta = [{name: ":hlNative", params: [macro "std", macro $v{f.name}], pos: Context.currentPos()}].concat(cleanMeta);
}
default:
}

var fiel:Field = {
name: name,
pos: Context.currentPos(),
kind: FFun({
ret: fun.ret,
params: fun.params.copy(),
expr: fun.expr,
expr: funcExpr,
args: fun.args.copy()
}),
access: f.access.copy(),
meta: f.meta.copy()
access: f.access.copy().filter(function(a) return a != APublic && a != APrivate).concat([APrivate]),
meta: meta
};
helperClass.fields.push(fiel);
fields.push(fiel);
definedFields.push(f.name);

// Remove meta from original function
for(m in f.meta.copy())
if (m.name == ":hlNative") {
f.meta.remove(m);
}

fun.expr = funcExpr;
default:
}
}

helperClass.pack = cl.pack.copy();
helperClass.pos = cl.pos;
helperClass.name = hcClassName;

if(definedFields.length > 0) {
/*if(definedFields.length > 0) {
trace(cl.module);
/*for(m in metas.copy()) {
trace(" " + m.name);
if(m.name == ":coreApi") {
metas.remove(m);
}
}*/

var imports = Context.getLocalImports().copy();
Context.defineModule(module, [helperClass], imports);

Context.getLocalImports().push({
path: [for(m in module.split(".")) {
name: m,
pos: Context.currentPos()
}],
mode: INormal
});
}
var printer = new haxe.macro.Printer();
for(field in fields) if(field.name.startsWith("hlf_"))
Sys.println(printer.printField(field));
}*/
}

return fields;
Expand Down
4 changes: 3 additions & 1 deletion source/funkin/backend/utils/DiscordUtil.hx
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ class DiscordUtil
#end
}

#if cpp
@:noCompletion public static function fixString(str:String)
{
return new cpp.ConstCharStar(cast(str, String));
Expand All @@ -174,6 +175,7 @@ class DiscordUtil
{
return cast(str, String);
}
#end

public static function changePresenceAdvanced(data:DPresence)
{
Expand Down Expand Up @@ -469,7 +471,7 @@ typedef DPresence =
var ?matchSecret:String; /* max 128 bytes */
var ?joinSecret:String; /* max 128 bytes */
var ?spectateSecret:String; /* max 128 bytes */
var ?instance:OneOfTwo<Int, cpp.Int8>;
var ?instance:#if cpp OneOfTwo<Int, cpp.Int8> #else Int #end;
var ?button1Label:String; /* max 32 bytes */
var ?button1Url:String; /* max 512 bytes */
var ?button2Label:String; /* max 32 bytes */
Expand Down

0 comments on commit d56702e

Please sign in to comment.