Menu

Variables

Donald Strong

[Home]


Language features

Variables

Local variables

The ClassMaker methods to declare and access local variables are:

      public Type Declare(String name, Class javaClass, int modifiers) throws ClassMakerException
      public Type Get(String name) throws ClassMakerException
      public Type Set(String name, Type type) throws ClassMakerException

The methods are overloaded to handle local variables, member variables and static variables.

Java codeClassMaker code
      {
        int a;
        int b;
        a     = 2
        b     = a
      {
      Begin();
        Declare("a", int.class, 0);
        Declare("b", int.class, 0);
        Eval(Set("a", Literal(2)));
        Eval(Set("b", Get("a")));
      End();

Formal variables

ClassMaker uses the same methods to declare and access formal parameters.

      public Type Declare(String name, Class javaClass, int modifiers) throws ClassMakerException
      public Type Get(String name) throws ClassMakerException
      public Type Set(String name, Type type) throws ClassMakerException

The only difference is that the Declare method is called between the
Method and Begin methods.

Java codeClassMaker code
      void exec(int a, int b)
      {
        int c;
        c = a + b;
        a = c;
      }
      Method("exec", void.class, 0);
        Declare("a", int.class, 0);
        Declare("b", int.class, 0);
      Begin();
        Declare("c", int.class, 0);
        Eval(Set("c", Add(Get("a"), Get("b")));
        Eval(Set("a", Get("c")));
      End();

Member variables

ClassMaker uses the following methods to declare and access member variables.

      public Type Declare(String name, Class javaClass, int modifiers) throws ClassMakerException
      public Type Get(Type classType, String fieldName) throws ClassMakerException
      public Type Set(Type classType, String name, Type type) throws ClassMakerException

The Declare method is the same as that used for local variables and method parameters
but it is used outside any method.

The Get and Set methods take an extra parameter which is a reference to the
appropriate Object.

To access a variable in the current instance, the this reference
must be provided. ClasMaker provides a special method This() to push a reference
to the current instance onto the stack.

To access a variable in another class instance, a reference to the appropriate object must
be pushed onto the stack. This is usually provided by one of the Get methods.

Java codeClassMaker code
        public    int a;
        protected int b;
        private   int c;
 
        public void exec(MyClass other)
 
        {
          c = 2;  // implicit this reference
          b = c;  // implicit this reference
          a = other.a;
          other.a = c;
        }
        Declare("a", int.class, ACC_PUBLIC);
        Declare("b", int.class, ACC_PROTECTED);
        Declare("c", int.class, ACC_PRIVATE);
 
        Method("exec", void.class, ACC_PUBLIC);
          Declare("other", getClassType(), 0);
        Begin();
          Eval(Set(This(), "c", Literal(2)));
          Eval(Set(This(), "b", Get(This(), "c")));
          Eval(Set(This(), "a", Get(Get("other"), "a")));
          Eval(Set(Get("other"), "a", Get(This(), "c")));
        End();

The other object is of type MyClass, which is assumed to be the class being generated.
This Type of the class being generated is available through the getClassType()
method of the ClassMaker instance.

Static variables

Static variables are declared and accessed in ClassMaker using the following methods.

      public Type Declare(String name, Class javaClass, int modifiers) throws ClassMakerException
      public Type Get(String className, String fieldName) throws ClassMakerException
      public Type Set(String className, String name, Type type) throws ClassMakerException

The Declare method is the same as that used for all other declarations. For a variable
to be declared as static, the Declare method must be called outside any method declaration
and the modifiers parameter must include the ACC_STATIC bit-mask.

The Get and Set methods take the name of the class containing the static variable
instead of an object reference.

Java codeClassMaker code
        public static int s;
         
        public void run()
        {
          int a;
          MyClass.s = a;
          a = MyClass.s;
        }
        Declare("s", int.class, ACC_PUBLIC | ACC_STATIC);
         
        Method("exec", void.class, ACC_PUBLIC);
        Begin();
          Declare("a", int.class, 0);
          Set("MyClass", "s", Get("a"));
          Set("a", Get("MyClass", "s"));
        End();

Array variables

FIXME - Example of array variables

Variable scope

FIXME - Variable scope is implemented so need an example

[Home]


Related

Wiki: Home

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.