Author: bernhard
Date: Fri Jan 2 09:35:05 2009
New Revision: 34825
Modified:
trunk/languages/pipp/src/classes/Object.pir
trunk/languages/pipp/src/pct/actions.pm
Log:
[Pipp] Add a default __construct in ['PippObject']
Modified: trunk/languages/pipp/src/classes/Object.pir
==============================================================================
--- trunk/languages/pipp/src/classes/Object.pir (original)
+++ trunk/languages/pipp/src/classes/Object.pir Fri Jan 2 09:35:05 2009
@@ -74,6 +74,17 @@
.return ($P1)
.end
+=item __construct
+
+A default constructor. Used for checking that there are no args.
+TODO: Should be a method.
+
+=cut
+
+.sub '__construct' # :method
+ .return ()
+.end
+
=back
=head2 Private methods
Modified: trunk/languages/pipp/src/pct/actions.pm
==============================================================================
--- trunk/languages/pipp/src/pct/actions.pm (original)
+++ trunk/languages/pipp/src/pct/actions.pm Fri Jan 2 09:35:05 2009
@@ -236,21 +236,17 @@
PAST::Stmts.new(
PAST::Var.new( :name('obj'), :scope('register'), :isdecl(1) ),
PAST::Var.new( :name('cons'), :scope('register'), :isdecl(1) ),
- PAST::Op.new( # check whether there is a
constructor
+ # use default constructor when there is no explicit constructor
+ PAST::Op.new(
:pasttype('if'),
PAST::Op.new(
:pirop('isnull'),
- PAST::Op.new(
- :inline("%r = get_global ['" ~ $class_name ~ "'],
'__construct'", 'cons = %r') # condition
- )
- ),
- PAST::Op.new( # no constructor
call needed
- :inline('%r = new %0',
- 'obj = %r'),
- $class_name
+ PAST::Op.new( :inline("%r = get_global ['" ~ $class_name ~
"'], '__construct'") ) # condition
),
- $cons_call # call the
constructor
+ PAST::Op.new( :inline("cons = get_global ['PippObject'],
'__construct'") ),
+ PAST::Op.new( :inline("cons = get_global ['" ~ $class_name ~
"'], '__construct'") )
),
+ $cons_call, # call the
constructor
PAST::Var.new( :name('obj'), :scope('register') ) # return the
created object
);
}