StackFrame.java 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package processor;
  2. import java.util.HashMap;
  3. /**
  4. * a frame containing variables.
  5. * can be used for storing variables and/or for pushing them to the stack.
  6. * @author kolja
  7. *
  8. */
  9. public class StackFrame {
  10. /**
  11. * whether the frame belongs to a function or a loop.
  12. * @author kolja
  13. *
  14. */
  15. public enum FrameType {
  16. FUNCTION,
  17. LOOP
  18. }
  19. private HashMap< String, Object > data;
  20. private FrameType type;
  21. public StackFrame( FrameType type )
  22. {
  23. this.type = type;
  24. data = new HashMap< String, Object >();
  25. }
  26. public FrameType getType()
  27. {
  28. return type;
  29. }
  30. public <T> void declare( String name, T value )
  31. {
  32. if( data.containsKey( name ) )
  33. throw new IllegalStateException( "Variable is already declared" );
  34. data.put( name, (Object)value );
  35. }
  36. public <T> void set( String name, T value )
  37. {
  38. data.put( name, (Object)value );
  39. }
  40. public void undeclare( String name )
  41. {
  42. data.remove( name );
  43. }
  44. public boolean isDefined( String name )
  45. {
  46. return data.containsKey( name );
  47. }
  48. @SuppressWarnings("unchecked")
  49. public <T> T get( String name )
  50. {
  51. return (T)data.get( name );
  52. }
  53. }