Generator.pm 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package Logos::Generator::Base::Generator;
  2. use strict;
  3. sub findPreamble {
  4. my $self = shift;
  5. my $aref = shift;
  6. my @matches = grep(/\s*#\s*(import|include)\s*[<"]logos\/logos\.h[">]/, @$aref);
  7. return @matches > 0;
  8. }
  9. sub preamble {
  10. return <<END;
  11. #if defined(__clang__)
  12. #if __has_feature(objc_arc)
  13. #define _LOGOS_SELF_TYPE_NORMAL __unsafe_unretained
  14. #define _LOGOS_SELF_TYPE_INIT __attribute__((ns_consumed))
  15. #define _LOGOS_SELF_CONST const
  16. #define _LOGOS_RETURN_RETAINED __attribute__((ns_returns_retained))
  17. #else
  18. #define _LOGOS_SELF_TYPE_NORMAL
  19. #define _LOGOS_SELF_TYPE_INIT
  20. #define _LOGOS_SELF_CONST
  21. #define _LOGOS_RETURN_RETAINED
  22. #endif
  23. #else
  24. #define _LOGOS_SELF_TYPE_NORMAL
  25. #define _LOGOS_SELF_TYPE_INIT
  26. #define _LOGOS_SELF_CONST
  27. #define _LOGOS_RETURN_RETAINED
  28. #endif
  29. END
  30. }
  31. sub generateClassList {
  32. my $self = shift;
  33. my $return = "";
  34. map $return .= "\@class $_; ", @_;
  35. return $return;
  36. }
  37. sub classReferenceWithScope {
  38. my $self = shift;
  39. my $classname = shift;
  40. my $scope = shift;
  41. my $prefix = Logos::sigil($scope eq "+" ? "static_metaclass_lookup" : "static_class_lookup");
  42. return $prefix.$classname."()";
  43. }
  44. 1;