Correct spelling.
[SquirrelJME.git] / assets / developer-notes / stephanie-gawroriski / 2014 / 11 / 08.mkd
blob09f719401ac45cf3103adfb33358c14873c3ecfc
1 # 2014/11/08
3 ***DISCLAIMER***: _These notes are from the defunct k8 project which_
4 _precedes SquirrelJME. The notes for SquirrelJME start on 2016/02/26!_
5 _The k8 project was effectively a Java SE 8 operating system and as such_
6 _all of the notes are in the context of that scope. That project is no_
7 _longer my goal as SquirrelJME is the spiritual successor to it._
9 ## 03:07
11 Now that I am awake, work continues. Must annotate and informationize the
12 remaining opcodes so that I can begin writing descriptor information along
13 with actual byte code parsing.
15 ## 06:10
17 I need a better design on my LogicalClass and LogicalMethod code. Byte code
18 descriptions of a method just rely on the descriptor.
20 ## 06:26
22 I need to actually recreate any classes which are enums to not sort those
23 constants because if enumerations are switched around then static code that
24 relies on the ordinal order (such as switch) will break completely between
25 virtual machines, ouch. There are only 93 enumerated types in the standard
26 library however.
28 ## 06:41
30 Actually I do not have to worry about that, because using an enum switch
31 creates a new class which handles potential out of orders by statically
32 referring to the elements there.
34 ## 07:02
36 My logical class work needs to change to a factory like system and the
37 ClassFile locks need to change to the self object rather than an internal lock
38 because ClassFiles are operated on. The class cannot change while the logical
39 information is being constructed.
41 ## 09:51
43 I also do not like the LogicalClass, LogicalMethod, and LogicalField classes,
44 they should just be a single LogicalClass. Thought about reflection permission
45 checking, but all that is would be a simple access modifier check based on the
46 source call performing invoke. I do know that in my method tables I will need
47 to handle reflective call site stuff. Basically each class has its own method
48 tables which are mostly static, but the last entries will be when static
49 methods use reflection on a class or similar. Non static methods in classes
50 doing such things will then add it to the local field table in a hidden
51 manner. One thing my code generator must do it make it so the classes inside
52 reflect the same as initialization time as they do during run-time. This means
53 that calls such as Class.forName() or Method.invoke() will just be transformed
54 into call sites with potential cache (if applicable). So similar to my plan
55 for boxed types being simple, stuff like Method and Fields will be very basic
56 pointer-ish types. So if any code is detected which appears to just do the
57 invoke call on a Method will use a special bridge-like method that is only
58 internally visible at static compilation time which checks access control and
59 then invokes. The only real access control there is is the normal private,
60 package private, protected, and public. There would be two tiers though, one
61 for in same package and one outside of same package. But I need to work on
62 merging the Logicals into a single class, and make it a factory that locks on
63 a ClassFile instead of going crazy.