asm: fix referencing arguments where function is not exported and argument list may be unknown

This commit is contained in:
Rairii 2025-04-11 12:59:29 +01:00
parent 2dca25d95b
commit 301c583ce2
2 changed files with 11 additions and 0 deletions

View File

@ -537,6 +537,16 @@ namespace IFPSAsmLib
return function.CreateArgumentVariable(i);
}
value = value.ToLower();
// For a non-exported function, allow use of hardcoded Argx to refer to unknown arguments
if (!function.Exported)
{
if (value.StartsWith(Constants.VARIABLE_ARG_PREFIX)) {
if (!int.TryParse(value.Substring(Constants.VARIABLE_ARG_PREFIX.Length), out var argIdx)) return null;
argIdx--;
if (argIdx < 0) return null;
return function.CreateArgumentVariable(argIdx);
}
}
if (value == Constants.VARIABLE_RET) return function.CreateReturnVariable();
if (!value.StartsWith(Constants.VARIABLE_LOCAL_PREFIX)) return null;
if (!int.TryParse(value.Substring(Constants.VARIABLE_LOCAL_PREFIX.Length), out var idx)) return null;

View File

@ -71,6 +71,7 @@ namespace IFPSAsmLib
internal const string VARIABLE_RET = "retval";
internal const string VARIABLE_LOCAL_PREFIX = "var";
internal const string VARIABLE_ARG_PREFIX = "arg";
internal const string LABEL_NULL = "null";
}