Class.pm 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package Logos::Generator::internal::Class;
  2. use strict;
  3. use parent qw(Logos::Generator::Base::Class);
  4. sub superVariable {
  5. my $self = shift;
  6. my $class = shift;
  7. return Logos::sigil("superclass").$class->group->name."\$".$class->name;
  8. }
  9. sub superMetaVariable {
  10. my $self = shift;
  11. my $class = shift;
  12. return Logos::sigil("supermetaclass").$class->group->name."\$".$class->name;
  13. }
  14. sub declarations {
  15. my $self = shift;
  16. my $class = shift;
  17. my $return = "";
  18. if($class->hasinstancehooks) {
  19. $return .= "static Class ".$self->superVariable($class)."; ";
  20. }
  21. if($class->hasmetahooks) {
  22. $return .= "static Class ".$self->superMetaVariable($class)."; ";
  23. }
  24. $return .= $self->SUPER::declarations($class);
  25. return $return;
  26. }
  27. sub initializers {
  28. my $self = shift;
  29. my $class = shift;
  30. my $return = "";
  31. if($class->required || $class->overridden || $class->hasinstancehooks || $class->hasmetahooks) {
  32. $return .= "Class ".$self->variable($class)." = ".$self->_initExpression($class)."; ";
  33. }
  34. if($class->hasmetahooks) {
  35. $return .= "Class ".$self->metaVariable($class)." = ".$self->_metaInitExpression($class)."; ";
  36. }
  37. if ($class->hasinstancehooks) {
  38. $return .= $self->superVariable($class)." = class_getSuperclass(".$self->variable($class)."); ";
  39. }
  40. if ($class->hasmetahooks) {
  41. $return .= $self->superMetaVariable($class)." = class_getSuperclass(".$self->metaVariable($class)."); ";
  42. }
  43. $return .= $self->SUPER::initializers($class);
  44. return $return;
  45. }
  46. 1;