complex-member-access.azsl 728 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. class getter
  2. {
  3. float2x2 fval();
  4. };
  5. float2x2 getter::fval()
  6. {
  7. float2x2 mat = {1,0,0,1};
  8. return mat;
  9. }
  10. class intermediate
  11. {
  12. getter g1;
  13. getter getgetter() { return g1; }
  14. };
  15. class interferer
  16. {
  17. intermediate many[3];
  18. };
  19. interferer getinterferer() { interferer i; return i; }
  20. float2x2 fval() // impostor to lead the compiler in difficulty
  21. {
  22. return (float2x2)0;
  23. }
  24. void h()
  25. {
  26. // create an expression with as much syntactic variety as possible
  27. // to render difficult the job of finding what scope we should
  28. // be looking into for fval.
  29. // this ensures we're robust enough to track symbols to their real definition point.
  30. float f = getinterferer().many[1].getgetter().fval()[0][0];
  31. }