FunctionDefinition.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Diagnostics;
  3. namespace NTERA.Engine.Compiler
  4. {
  5. [DebuggerDisplay("{Name} ({Parameters.Length})")]
  6. public class FunctionDefinition
  7. {
  8. public string Name { get; }
  9. public FunctionParameter[] Parameters { get; }
  10. public FunctionVariable[] Variables { get; }
  11. public bool IsReturnFunction { get; }
  12. public string Filename { get; }
  13. public Marker Position { get; }
  14. public FunctionDefinition(string name, FunctionParameter[] parameters, FunctionVariable[] methodVariables, bool isReturnFunction, string filename, Marker position = default(Marker))
  15. {
  16. Name = name;
  17. Parameters = parameters;
  18. Variables = methodVariables;
  19. IsReturnFunction = isReturnFunction;
  20. Filename = filename;
  21. Position = position;
  22. }
  23. }
  24. [Flags]
  25. public enum VariableType
  26. {
  27. None = 0,
  28. Constant = 1,
  29. Reference = 2,
  30. Dynamic = 4,
  31. SaveData = 8,
  32. CharaData = 16,
  33. Global = 32,
  34. }
  35. public class FunctionVariable
  36. {
  37. public string Name { get; }
  38. public ValueType ValueType { get; }
  39. public VariableType VariableType { get; }
  40. public Value? DefaultValue { get; }
  41. public Value CalculatedValue => DefaultValue.HasValue ? DefaultValue.Value : ValueType == ValueType.String ? new Value("") : new Value(0d); //for some reason, this can't be null coalesce (??), as it disregards the value
  42. public FunctionVariable(string name, ValueType valueType, VariableType variableType = VariableType.None, Value? defaultValue = null)
  43. {
  44. Name = name;
  45. ValueType = valueType;
  46. VariableType = variableType;
  47. DefaultValue = defaultValue;
  48. }
  49. }
  50. public class FunctionParameter
  51. {
  52. public string Name { get; }
  53. public string[] Indices { get; }
  54. public bool IsArrayParameter { get; }
  55. public Value? DefaultValue { get; }
  56. public FunctionParameter(string name, string[] indices, Value? defaultValue = null, bool isArrayParameter = false)
  57. {
  58. Name = name;
  59. Indices = indices;
  60. DefaultValue = defaultValue;
  61. IsArrayParameter = isArrayParameter;
  62. }
  63. }
  64. }