新增UndefinedIdentifiersAsStrings
This commit is contained in:
@@ -218,11 +218,15 @@ namespace Flee.ExpressionElements.MemberElements
|
||||
return;
|
||||
}
|
||||
|
||||
// 允许void返回类型的函数,将其返回值视为0
|
||||
// Void return type functions are allowed and treated as returning 0
|
||||
/*
|
||||
// Any function reference in an expression must return a value
|
||||
if (object.ReferenceEquals(this.Method.ReturnType, typeof(void)))
|
||||
{
|
||||
base.ThrowCompileException("FunctionHasNoReturnValue", CompileExceptionReason.FunctionHasNoReturnValue, MyName);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
public override void Emit(FleeILGenerator ilg, IServiceProvider services)
|
||||
@@ -342,7 +346,21 @@ namespace Flee.ExpressionElements.MemberElements
|
||||
this.EmitParamArrayArguments(parameters, elements, ilg, services);
|
||||
}
|
||||
|
||||
MemberElement.EmitMethodCall(this.ResultType, nextRequiresAddress, this.Method, ilg);
|
||||
// 检查方法是否返回void
|
||||
bool isVoidMethod = object.ReferenceEquals(this.Method.ReturnType, typeof(void));
|
||||
|
||||
if (isVoidMethod)
|
||||
{
|
||||
// 对于void方法,使用原始的ReturnType调用方法,然后将0压入栈
|
||||
MemberElement.EmitMethodCall(this.Method.ReturnType, nextRequiresAddress, this.Method, ilg);
|
||||
// 将0压入栈作为返回值
|
||||
ilg.Emit(OpCodes.Ldc_I4_0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 对于非void方法,正常调用
|
||||
MemberElement.EmitMethodCall(this.ResultType, nextRequiresAddress, this.Method, ilg);
|
||||
}
|
||||
}
|
||||
|
||||
private void EmitExtensionFunctionInternal(ParameterInfo[] parameters, ExpressionElement[] elements, FleeILGenerator ilg, IServiceProvider services)
|
||||
@@ -397,6 +415,12 @@ namespace Flee.ExpressionElements.MemberElements
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果方法返回void,将其视为返回int类型(值为0)
|
||||
// If method returns void, treat it as returning int (value 0)
|
||||
if (object.ReferenceEquals(this.Method.ReturnType, typeof(void)))
|
||||
{
|
||||
return typeof(int);
|
||||
}
|
||||
return this.Method.ReturnType;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user