1+ //! Module
2+ //!
3+ //! Contains ZenLang module structs
14use crate :: opcode:: Opcode ;
25use :: serde:: { Deserialize , Serialize } ;
36use alloc:: string:: String ;
@@ -7,10 +10,16 @@ use bincode::config::Configuration;
710use bincode:: error:: DecodeError ;
811use bincode:: * ;
912
13+ /// ModuleFunction
14+ ///
15+ /// Contains information about a module function
1016#[ derive( Encode , Decode , Serialize , Deserialize , Debug ) ]
1117pub struct ModuleFunction {
18+ /// Function name
1219 pub name : String ,
20+ /// Function address relative to the module offset
1321 pub addr : u32 ,
22+ /// Argument count
1423 pub args_count : u64 ,
1524}
1625
@@ -24,9 +33,14 @@ impl ModuleFunction {
2433 }
2534}
2635
36+ /// Module
37+ ///
38+ /// Contains module information (code)
2739#[ derive( Encode , Decode , Debug ) ]
2840pub struct Module {
41+ /// Opcodes of the module (entire code)
2942 pub opcodes : Vec < Opcode > ,
43+ /// Function informations
3044 pub functions : Vec < ModuleFunction > ,
3145}
3246
@@ -38,12 +52,14 @@ impl Module {
3852 } ;
3953 }
4054
55+ /// Compiles the module into bytes vector (Serializes)
4156 pub fn compile ( & self ) -> Result < Vec < u8 > , bincode:: error:: EncodeError > {
4257 let cfg = bincode:: config:: standard ( ) ;
4358 let bytes = bincode:: encode_to_vec ( self , cfg) ;
4459 return bytes;
4560 }
4661
62+ /// Load the module from bytes vector (Deserializes)
4763 pub fn load ( & mut self , bytes : Vec < u8 > ) -> Result < ( ) , DecodeError > {
4864 let cfg = bincode:: config:: standard ( ) ;
4965 match bincode:: decode_from_slice :: < Module , Configuration > ( & bytes, cfg) {
@@ -57,6 +73,7 @@ impl Module {
5773 }
5874 }
5975
76+ /// Get an opcode at a certain address
6077 pub fn get_opcode ( & self , addr : u32 ) -> & Opcode {
6178 return & self . opcodes [ addr as usize ] ;
6279 }
0 commit comments