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

Reply via email to