CallStackElement.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. Expression?._expression.Location ?? ((Node?) Function._functionDefinition?.Function)?.Location ?? default;
  21. public NodeList<Expression>? Arguments =>
  22. Function._functionDefinition?.Function.Params;
  23. public override string ToString()
  24. {
  25. var name = TypeConverter.ToString(Function.Get(CommonProperties.Name));
  26. if (string.IsNullOrWhiteSpace(name))
  27. {
  28. if (Expression is not null)
  29. {
  30. name = JintExpression.ToString(Expression._expression);
  31. }
  32. }
  33. return name ?? "(anonymous)";
  34. }
  35. }
  36. }