Specialize Variable class.
authorJean Privat <jean@pryen.org>
Mon, 19 Jan 2009 20:22:42 +0000 (15:22 -0500)
committerJean Privat <jean@pryen.org>
Mon, 19 Jan 2009 20:22:42 +0000 (15:22 -0500)
Create 3 subclasses: VarVariable, ParamVariable and AutoVariable

src/syntax/mmbuilder.nit
src/syntax/syntax_base.nit
src/syntax/typing.nit

index dd911d7..7bfb9b4 100644 (file)
@@ -1118,7 +1118,7 @@ end
 redef class PParam
        redef readable attr _position: Int
 
-       redef readable attr _variable: Variable 
+       redef readable attr _variable: ParamVariable 
 
        # The type of the parameter in signature
        readable writable attr _stype: MMType
@@ -1127,7 +1127,7 @@ redef class PParam
        do
                super
                _position = v.params.length
-               _variable = new Variable(n_id.to_symbol, self)
+               _variable = new ParamVariable(n_id.to_symbol, self)
                v.params.add(self)
                v.untyped_params.add(self)
                if n_type != null then
index d6ebe97..4e4bd01 100644 (file)
@@ -190,8 +190,8 @@ special MMMethSrcMethod
        end
 end
 
-# Local variable and method parameter
-class Variable
+# Local variables
+abstract class Variable
        # Name of the variable
        readable attr _name: Symbol 
 
@@ -203,6 +203,8 @@ class Variable
 
        redef meth to_s do return _name.to_s
 
+       meth kind: String is abstract
+
        init(n: Symbol, d: PNode)
        do
                assert n != null
@@ -212,6 +214,27 @@ class Variable
        end
 end
 
+# Variable declared with 'var'
+class VarVariable
+special Variable
+       redef meth kind do return once "variable"
+       init(n: Symbol, d: PNode) do super
+end
+
+# Parameter of method (declared in signature)
+class ParamVariable
+special Variable
+       redef meth kind do return once "parameter"
+       init(n: Symbol, d: PNode) do super
+end
+
+# Automatic variable (like in the 'for' statement)
+class AutoVariable
+special Variable
+       redef meth kind do return once "automatic variable"
+       init(n: Symbol, d: PNode) do super
+end
+
 ###############################################################################
 
 # Visitor used during the syntax analysis
@@ -384,7 +407,7 @@ redef class PParam
        meth position: Int is abstract
 
        # Associated local variable
-       meth variable: Variable is abstract 
+       meth variable: ParamVariable is abstract 
 end
 
 redef class PType
@@ -527,12 +550,12 @@ end
 
 redef class AVardeclExpr
        # Assiociated local variable
-       readable writable attr _variable: Variable
+       readable writable attr _variable: VarVariable
 end
 
 redef class AForVardeclExpr
        # Associated automatic local variable
-       readable writable attr _variable: Variable
+       readable writable attr _variable: AutoVariable
 end
 
 redef class AVarFormExpr
index d92038c..cea4b10 100644 (file)
@@ -303,7 +303,7 @@ end
 redef class AVardeclExpr
        redef meth after_typing(v)
        do
-               var va = new Variable(n_id.to_symbol, self)
+               var va = new VarVariable(n_id.to_symbol, self)
                variable = va
                v.variable_ctx.add(va)
 
@@ -387,7 +387,7 @@ redef class AForVardeclExpr
        redef meth after_typing(v)
        do
                v.variable_ctx = v.variable_ctx.sub
-               var va = new Variable(n_id.to_symbol, self)
+               var va = new AutoVariable(n_id.to_symbol, self)
                variable = va
                v.variable_ctx.add(va)