Author: tene
Date: Sun Jul 20 15:43:19 2008
New Revision: 29634
Modified:
trunk/languages/cardinal/src/parser/actions.pm
trunk/languages/cardinal/src/parser/grammar.pg
trunk/languages/cardinal/t/08-class.t
Log:
[cardinal]
* Class variables
Modified: trunk/languages/cardinal/src/parser/actions.pm
==============================================================================
--- trunk/languages/cardinal/src/parser/actions.pm (original)
+++ trunk/languages/cardinal/src/parser/actions.pm Sun Jul 20 15:43:19 2008
@@ -279,6 +279,19 @@
make $past;
}
+method class_variable($/) {
+ our $?CLASS;
+ our $?BLOCK;
+ my $name := ~$/;
+ my $past := PAST::Var.new( :name($name), :scope('package'),
:viviself('Undef'), :node($/) );
+ my $block := $?CLASS[0];
+ unless $block.symbol(~$/) {
+ $block.symbol(~$name, :scope('package'));
+ $?BLOCK.symbol(~$name, :scope('package'));
+ }
+ make $past;
+}
+
method local_variable($/) {
our $?BLOCK;
my $past := PAST::Var.new( :name(~$/), :node($/), :viviself('Undef') );
Modified: trunk/languages/cardinal/src/parser/grammar.pg
==============================================================================
--- trunk/languages/cardinal/src/parser/grammar.pg (original)
+++ trunk/languages/cardinal/src/parser/grammar.pg Sun Jul 20 15:43:19 2008
@@ -158,9 +158,10 @@
token varname {
<!reserved_word>
[ <global> {*} #= global
+ | <class_variable> {*} #= class_variable
| <instance_variable> {*} #= instance_variable
| <local_variable> {*} #= local_variable
- | <constant_variable> {*} #= constant_variable
+ | <constant_variable> {*} #= constant_variable
]
}
Modified: trunk/languages/cardinal/t/08-class.t
==============================================================================
--- trunk/languages/cardinal/t/08-class.t (original)
+++ trunk/languages/cardinal/t/08-class.t Sun Jul 20 15:43:19 2008
@@ -1,4 +1,4 @@
-puts '1..5'
+puts '1..7'
class OkayOnCreate
def initialize(a)
@@ -43,3 +43,22 @@
b.speak
b.num = b.num + 1
puts "ok ", b.num
+
+class StaticTester
+ def num()
+ @@num
+ end
+ def num=(var)
+ @@num = var
+ end
+ def speak()
+ puts "ok ", @@num
+ end
+end
+
+x = StaticTester.new()
+x.num = 6
+y = StaticTester.new()
+y.speak
+y.num = y.num + 1
+x.speak