Question: I'm trying to implement a stack without using Python's in-built stack/queue methods to understand the logic. Could someone please resolve the error below and provide a working solution - i think I'm close. 

```
data = ("a","b","c","d","e","f","g")

stackArray = []
stackPointer = 0
stackMaximum = 7

#Routine to Push
if stackPointer < stackMaximum:
    stackPointer = stackPointer + 1
    stackArray[stackPointer] = data
else:
    print("Stack Full")

#Routine to pop
if stackPointer > 0:
    stackPointer = stackPointer - 1
    stackArray[stackPointer] = data
else:
    print("No data to pop off")

```

stackArray[stackPointer] = data
NameError: name 'data' is not defined

Answer: 
The Java Virtual Machine Specification (which is responsible for defining what the bytecode looks like) puts [no constraints related to keywords on the names of things](https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.2).

Those constraints only exist [on the Java **Language** level](https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.9). The bytecode you used does not decompile into valid Java, because it uses names that are not valid in the Java language, but that *are* valid to the JVM. 

A similar logic applies to the two `getViewName` methods that differ only in return type: This is allowed (and works perfectly fine) in bytecode by the JVM spec, but the Java Language specification forbids it.

The most common reason for bytecode like this is Java code that was compiled to bytecode and then [obfuscated](https://en.wikipedia.org/wiki/Obfuscation_(software)).

Another possible reason is that the code was not originally produced by compiling Java code, but another language that targets the JVM. This is rather unlikely in this case, since no one would name a variable `do` when it's supposed to hold the view name.
I'd almost think that the code were obfuscated, but then you would see it in method names as well. Sometimes obfuscators do things that aren't allowed in the language, so when you decompile them you can't recompile the source. It's only the Java syntax that doesn't allow `do` or `try` as variable names, the JVM (and other languages that run on the JVM) doen't care about it.

Either this was deliberate obfuscation or they were not compiled from Java classes.