From c920a3dfb6007fceb9cc35e9cc37f220f3c924e4 Mon Sep 17 00:00:00 2001 From: Christian Brier Date: Tue, 7 May 2024 11:54:54 +0200 Subject: [PATCH] add: Classbuilder & ClassFileBuilder --- src/ByteCode/ClassFile/Generator.hs | 35 +++++++++++++++++------------ src/ByteCode/Operations.hs | 3 +++ 2 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 src/ByteCode/Operations.hs diff --git a/src/ByteCode/ClassFile/Generator.hs b/src/ByteCode/ClassFile/Generator.hs index 5005f9d..7ceac96 100644 --- a/src/ByteCode/ClassFile/Generator.hs +++ b/src/ByteCode/ClassFile/Generator.hs @@ -1,31 +1,38 @@ module ByteCode.ClassFile.Generator( - fromAST + classBuilder ) where import ByteCode.Constants import ByteCode.ClassFile (ClassFile (..), ConstantInfo (..)) import Ast +import ByteCode.Operations -baseConstants = [ - ClassInfo 4, - MethodRefInfo 1 3, - NameAndTypeInfo 5 6, - Utf8Info "java/lang/Object", - Utf8Info "", - Utf8Info "()V" - ] +type ClassFileBuilder a = ClassFile -> a -> ClassFile -fromAST :: Class -> ClassFile -fromAST (Class name methods fields) = let +classBuilder :: ClassFileBuilder Class +classBuilder _ (Class name methods fields) = let + baseConstants = [ + ClassInfo 4, + MethodRefInfo 1 3, + NameAndTypeInfo 5 6, + Utf8Info "java/lang/Object", + Utf8Info "", + Utf8Info "()V" + ] + nameConstants = [ClassInfo 8, Utf8Info name] in ClassFile { - constantPool = baseConstants, + constantPool = baseConstants ++ nameConstants, accessFlags = accessPublic, - thisClass = 1, + thisClass = 7, superClass = 1, fields = [], methods = [], attributes = [] - } \ No newline at end of file + } + + + + diff --git a/src/ByteCode/Operations.hs b/src/ByteCode/Operations.hs new file mode 100644 index 0000000..42eec66 --- /dev/null +++ b/src/ByteCode/Operations.hs @@ -0,0 +1,3 @@ +module ByteCode.Operations where +data Operation = Iadd + -- | \ No newline at end of file