@@ -2,6 +2,7 @@ local javoc, classLoader = require("umfal")("javoc")
22
33local debugPrint = javoc .util .debug .print
44local binaryUtils = javoc .util .binaryUtils
5+ -- TODO: Split file and stream loaders
56--- Loads a class from a file. Path is relative from classpath
67--- @param file string @ Name of the class to load
78--- @param classpath string @ Absolute path to the classes to load
@@ -37,11 +38,10 @@ function classLoader.loadClassFromStream(stream)
3738
3839 debugPrint (" Correct 'magic value' is loaded" )
3940
40- -- TODO: Move all the code to the separate loaders
41- class .version = classLoader .loadVersion (stream )
42- class .constantPool = javoc .class .constantPoolLoader .load (stream )
43- class .accessFlags = javoc .class .accessFlagsLoader .load (stream )
44- class .thisClass , class .superClass = classLoader .loadClassNames (stream , class .constantPool )
41+ class .version = javoc .class .subloaders .version .load (stream )
42+ class .constantPool = javoc .class .subloaders .constantPool .load (stream )
43+ class .accessFlags = javoc .class .subloaders .accessFlags .load (stream )
44+ class .thisClass , class .superClass = javoc .class .subloaders .classNames .load (stream , class .constantPool )
4545
4646 debugPrint (" Class " .. class .thisClass .name .. " loaded successfully" )
4747
@@ -53,43 +53,4 @@ function classLoader.checkMagicValue(stream)
5353 local magicValue = binaryUtils .readU4 (stream )
5454
5555 return (magicValue == 0xCAFEBABE )
56- end
57-
58- function classLoader .loadVersion (stream )
59- debugPrint (" Loading versions (major and minor)" )
60- local version = {}
61-
62- version .minor = binaryUtils .readU2 (stream )
63- version .major = binaryUtils .readU2 (stream )
64-
65- debugPrint (" Versions loaded successfully!" )
66- debugPrint (" Major - " .. version .major .. " ; Minor - " .. version .minor )
67- return version
68- end
69-
70- function classLoader .loadClassNames (stream , constantPool )
71- debugPrint (" Loading this and super class names" )
72- local thisClass = {}
73- local superClass = {}
74-
75- thisClass .index = binaryUtils .readU2 (stream )
76- superClass .index = binaryUtils .readU2 (stream )
77-
78- -- Both 'thisClassIndex' and 'superClassIndex' point at
79- -- the CONSTANT_Class, which points at the CONSTANT_Utf8,
80- -- which contains the string we want
81- local thisClassConstantClass = constantPool [thisClass .index ]
82- local superClassConstantClass = constantPool [superClass .index ]
83-
84- local thisClassUTF8 = constantPool [thisClassConstantClass .nameIndex ]
85- local superClassUTF8 = constantPool [superClassConstantClass .nameIndex ]
86-
87- thisClass .name = thisClassUTF8 .value
88- superClass .name = superClassUTF8 .value
89-
90- debugPrint (" This class: #" .. thisClass .index .. " (" .. thisClass .name .. " )" )
91- debugPrint (" Super class: #" .. superClass .index .. " (" .. superClass .name .. " )" )
92- return thisClass , superClass
93- end
94-
95- return classLoader
56+ end
0 commit comments