In the file Jars.java, the function findSelf(boolean) depends on a Windows-like filesystem to find the bytes of CodeSimian.jar.
Therefore if you're not using Windows, CodeSimian probably cant find the files inside itself
to use them in more ways than Java normally does (example: saving a new JAR file).
This needs to be fixed to work with any operating-system.
In classes codesimian.Compile.TokenizeCode and .TokensToObjects and codesimian.S
and in any code that uses string literals...
THERE ARE PROBLEMS WITH ESCAPE CHARACTERS FOR ' AND " (BOTH TYPES OF QUOTES ARE EQUAL)
These problems probably come from toString() in S.java, which returns a string 2 chars
bigger than other languages would. It adds single-quotes onto the 2 ends of the string.
For example, what would happen if the last char in the string is \ (the escape char)?
When code that uses that string literal is converted back to text, it will escape
the ending quote, therefore making some of the code after the string literal be part of the string literal.
The code usually does not work after that. But string literals' toString() function needs
to add the quotes on the 2 ends so when code is printed its a string literal instead of a list of tokens.
The solution will include TokenizeCode and TokensToObjects and possibly S.
too many parenthesis. Instead of 2*3+4*5*6, you have to type: +(*(2 3) *(4 5 6))
Some parts of the GUI (on-screen parts) do not update when they should.
The things inside them could change to return a different java.awt.Component.
Things are added and deleted from the GUI and sometimes it doesnt update.
These problems come from the GUI objects being generated
only when they're asked for (dynamicly). They're not in hard-code.
Its best to have as little hard-code as possible and
generate most of the code only when you need it.
But since this bug is hard-coded, thats where you should look to fix it.
Sometimes in a TreeOfCodeGUI object displaying a tree of CSs on-screen,
a CS in the tree moves up the tree toward the root,
moving up one parent with each click of the mouse or few clicks until it reaches the root,
but sometimes it just moves up 1 parent then stops. It shouldnt move at all.
I dont know if the CS is actually moving in the network of CSs or if its just in the JTree in the TreeOfCodeGUI.
+(2 3 4 list(65 66 67 +(60 6) 65) 6 7)
in the tree sometimes becomes:
+(2 3 4 5 6 7)
because lists always return their own size: 5 in this case,
but that is very confusing since 5 is a primitive and 5 (and everything else) in codesimian code is a CS object.
How did it become an object? There is a lot of reflection code. Maybe that did it accidentally.
Sometimes this same bug continues toward the root.
Then it would change from: +(2 3 4 5 6 7) and change to: 5.
Note: 5 can also be written as 5().
Since CS.parent() is not yet working, a CS shouldnt be able to know which CS contains it,
therefore shouldnt be able to move toward the root of the tree on-screen,
so its probably an error in the GUI (code to generate on-screen things) code of TreeOfCodeGUI.java.
If you click SAVE or use setInternalFile(anything ""#emptyString) then saveUpdatedSelf will create a JAR file
that throws ZipException when it loads the file with no name.
Very slow. CodeSimian is an intepreted language inside an other interpreted language (Java).
I used Java to build CodeSimian. It could easily be 10 times slower than Java, and Java is already slow.
This problem can be minimized by optimizing new code as strings of java code compiled at runtime,
the java code for a new subclass of CS.java (or one of its subclasses, like DefaultCS).
Small quantity of library classes. Its new. Not much external code has been written for it to use.
But in a limited way, CodeSimian can use any Java library dynamicly.
CodeSimian code: +(100 method#java.lang.Math.sin(0 0 /(3.14 2)))
Java code: return 100 + Math.sin(3.14/2);
There are 5 deprecated functions in the root class (CS.java)
that must be refactored out. 2 of them (keyword() and setPrevExec(double)) have strong dependencies to the rest of the code.
When those functions are removed from all code files (and replaced) then CodeSimian will understand itself better.
Start using parent(), and keyword() should be replaced by parent().name().
If you type code that has invalid syntax, an Exception is thrown,
but you cant see it unless you started CodeSimian on the command-line this way: java -jar CodeSimian.jar and optionally add: someCodeFile.cs
Sound quality has been decreased to 22050 hz to
increase speed, which is half quality of the samples on the intro page.
This unusual picture was accidentally created and displayed after
compiling the code in CodeSimian.jar/cs/tetris10.cs.
The squares of solid color are a direct result of the
code in CodeSimian.jar/codesimian/ImageCS.class (and indirectly ImageCS.java),
but I dont know why the other things are displayed.