加入自动类型转换

This commit is contained in:
2025-10-16 10:24:59 +08:00
parent 70051b46a5
commit 3866cdd525
3 changed files with 139 additions and 48 deletions

View File

@@ -206,7 +206,7 @@ namespace Convention.RScript
}
if (CurrentLocalSpaceVariableNames.Peek().Contains(varName) == false)
{
Variables.Add(varName, new() { type = varType, data = varDefaultValue });
Variables.Add(varName, new(varType, varDefaultValue));
parser.context.Variables[varName] = varDefaultValue;
CurrentLocalSpaceVariableNames.Peek().Add(varName);
}
@@ -350,48 +350,59 @@ namespace Convention.RScript
private object RunNextStep(ExpressionParser parser)
{
var sentence = CurrentSentence;
switch (sentence.mode)
try
{
case RScriptSentence.Mode.Expression:
return parser.Evaluate(sentence.content);
case RScriptSentence.Mode.DefineVariable:
{
DoDefineVariable(parser, sentence);
}
break;
case RScriptSentence.Mode.EnterNamespace:
{
DoEnterNamespace(parser);
}
break;
case RScriptSentence.Mode.ExitNamespace:
{
DoExitNamespace(parser);
}
break;
case RScriptSentence.Mode.Goto:
{
DoGoto(parser, sentence);
}
break;
case RScriptSentence.Mode.Breakpoint:
{
DoBreakpoint(parser, sentence);
}
break;
case RScriptSentence.Mode.Backpoint:
{
DoBackpoint(parser, sentence);
}
break;
case RScriptSentence.Mode.NamedSpace:
{
DoEnterNamedSpace(sentence);
}
break;
default:
// Do nothing
break;
switch (sentence.mode)
{
case RScriptSentence.Mode.Expression:
return parser.Evaluate(sentence.content);
case RScriptSentence.Mode.DefineVariable:
{
DoDefineVariable(parser, sentence);
}
break;
case RScriptSentence.Mode.EnterNamespace:
{
DoEnterNamespace(parser);
}
break;
case RScriptSentence.Mode.ExitNamespace:
{
DoExitNamespace(parser);
}
break;
case RScriptSentence.Mode.Goto:
{
DoGoto(parser, sentence);
}
break;
case RScriptSentence.Mode.Breakpoint:
{
DoBreakpoint(parser, sentence);
}
break;
case RScriptSentence.Mode.Backpoint:
{
DoBackpoint(parser, sentence);
}
break;
case RScriptSentence.Mode.NamedSpace:
{
DoEnterNamedSpace(sentence);
}
break;
default:
// Do nothing
break;
}
}
catch (RScriptRuntimeException)
{
throw;
}
catch (Exception ex)
{
throw new RScriptRuntimeException($"Runtime error: {ex.Message}", CurrentRuntimePointer, ex);
}
return null;
}