StackFrame.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System.Collections.Generic;
  2. using NTERA.Engine.Compiler;
  3. namespace NTERA.Engine.Runtime
  4. {
  5. public class StackFrame
  6. {
  7. public Dictionary<string, Variable> Variables { get; set; }
  8. public List<Parameter> Parameters { get; set; }
  9. public FunctionDefinition SelfDefinition { get; set; }
  10. }
  11. public enum ExecutionResultType
  12. {
  13. None,
  14. FunctionReturn
  15. }
  16. public class ExecutionResult
  17. {
  18. public static ExecutionResult None { get; } = new ExecutionResult(ExecutionResultType.None);
  19. public ExecutionResultType Type { get; }
  20. public Value? Result { get; }
  21. public ExecutionResult(ExecutionResultType type, Value? value = null)
  22. {
  23. Type = type;
  24. Result = value;
  25. }
  26. }
  27. public class Parameter
  28. {
  29. public Value Value { get; }
  30. public Variable BackingVariable { get; }
  31. public int[] BackingVariableIndex { get; }
  32. public Parameter(Value value, Variable backingVariable = null, int[] variableIndex = null)
  33. {
  34. Value = value;
  35. BackingVariable = backingVariable;
  36. BackingVariableIndex = variableIndex ?? new[] { 0 };
  37. }
  38. public static implicit operator Value(Parameter parameter)
  39. {
  40. return parameter.Value;
  41. }
  42. }
  43. }