CallStackElement.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #nullable enable
  2. using Esprima;
  3. using Esprima.Ast;
  4. using Jint.Native.Function;
  5. using Jint.Runtime.Interpreter.Expressions;
  6. namespace Jint.Runtime.CallStack
  7. {
  8. internal readonly struct CallStackElement
  9. {
  10. public CallStackElement(
  11. FunctionInstance function,
  12. JintExpression expression)
  13. {
  14. Function = function;
  15. Expression = expression;
  16. }
  17. public readonly FunctionInstance Function;
  18. public readonly JintExpression? Expression;
  19. public Location Location
  20. {
  21. get
  22. {
  23. var expressionLocation = Expression?._expression.Location;
  24. if (expressionLocation != null && expressionLocation.Value != default)
  25. {
  26. return expressionLocation.Value;
  27. }
  28. return ((Node?) Function._functionDefinition?.Function)?.Location ?? default;
  29. }
  30. }
  31. public NodeList<Expression>? Arguments =>
  32. Function._functionDefinition?.Function.Params;
  33. public override string ToString()
  34. {
  35. var name = TypeConverter.ToString(Function.Get(CommonProperties.Name));
  36. if (string.IsNullOrWhiteSpace(name))
  37. {
  38. if (Expression is not null)
  39. {
  40. name = JintExpression.ToString(Expression._expression);
  41. }
  42. }
  43. return name ?? "(anonymous)";
  44. }
  45. }
  46. }