[swift-dev] swift module format
Argyrios Kyrtzidis
kyrtzidis at apple.com
Thu Aug 24 18:35:10 CDT 2017
Hi,
What are you trying to do exactly ? Have you considered reading the decls with a tool using the C++ APIs (load a module and iterate over the decls) ?
I think that would be easier and more future-proof.
> On Aug 22, 2017, at 11:57 AM, Coder via swift-dev <swift-dev at swift.org> wrote:
>
> Hello,
>
> I’m working on extracting information from .swiftmodule files. Currently I can read all blocks and records but I’m having trouble identifying all DECLs in the DECLS_AND_TYPES_BLOCK. Below is a bcanalyzer dump of a swifmodule file created from this one line of code:
>
> class Example {}
>
> A couple questions:
>
> • The DECL_OFFSETS record contains 6 indexes but I only count 5 DECLs (class, destructor, constructor, 2 param). Where is the 6th?
> • According to documentation, the DECL_OFFSETS point to records in the DECLS_AND_TYPES_BLOCK blob but offset indexes show below (the “op” attributes) are larger than the blob length. Where do the indexes start from?
>
> Sorry if this is the wrong place to ask and thanks for any help,
> Aaron
>
>
>
>
> --------- bcanalyzer dump ---------
>
> <BLOCKINFO_BLOCK/>
> <MODULE_BLOCK NumWords=514 BlockCodeSize=2>
> <CONTROL_BLOCK NumWords=35 BlockCodeSize=3>
> <MODULE_NAME abbrevid=4/> blob data = 'tool'
> <METADATA abbrevid=5 op0=0 op1=310 op2=3/> blob data = '3.1/Apple Swift version 3.1 (swiftlang-802.0.53 clang-802.0.42)'
> <TARGET abbrevid=6/> blob data = 'x86_64-apple-macosx10.9'
> <OPTIONS_BLOCK NumWords=2 BlockCodeSize=3>
> <IS_SIB abbrevid=4 op0=0/>
> </OPTIONS_BLOCK>
> </CONTROL_BLOCK>
> <INPUT_BLOCK NumWords=17 BlockCodeSize=4>
> <IMPORTED_MODULE abbrevid=4 op0=0 op1=0/> blob data = 'Swift'
> <IMPORTED_MODULE abbrevid=4 op0=0 op1=0/> blob data = 'SwiftOnoneSupport'
> </INPUT_BLOCK>
> <SIL_BLOCK NumWords=72 BlockCodeSize=6>
> </SIL_BLOCK>
> <SIL_INDEX_BLOCK NumWords=3 BlockCodeSize=4>
> </SIL_INDEX_BLOCK>
> <DECLS_AND_TYPES_BLOCK NumWords=309 BlockCodeSize=8>
> <CLASS_DECL abbrevid=49 op0=3 op1=0 op2=0 op3=0 op4=0 op5=0 op6=0 op7=2 op8=1/> record string = ''
> <MEMBERS abbrevid=90 op0=2 op1=3/>
> <NORMAL_PROTOCOL_CONFORMANCE_ID abbrevid=85 op0=1/>
> <NOMINAL_TYPE abbrevid=7 op0=1 op1=0/>
> <ObjC_DECL_ATTR abbrevid=95 op0=1 op1=0 op2=0/> record string = ''
> <DESTRUCTOR_DECL abbrevid=54 op0=1 op1=1 op2=1 op3=0 op4=2/>
> <PARAMETERLIST abbrevid=55 op0=1/>
> <PARAMETERLIST_ELT abbrevid=56 op0=4 op1=0 op2=0/>
> <CONSTRUCTOR_DECL abbrevid=38 op0=1 op1=0 op2=1 op3=0 op4=0 op5=0 op6=0 op7=0 op8=3 op9=0 op10=2/> record string = ''
> <PARAMETERLIST abbrevid=55 op0=1/>
> <PARAMETERLIST_ELT abbrevid=56 op0=5 op1=0 op2=0/>
> <PARAMETERLIST abbrevid=55 op0=0/>
> <FUNCTION_TYPE abbrevid=11 op0=1 op1=4 op2=0 op3=0 op4=0 op5=0/>
> <LOCAL_DISCRIMINATOR abbrevid=88 op0=0/>
> <PARAM_DECL abbrevid=40 op0=0 op1=4 op2=2 op3=1 op4=1/>
> <FUNCTION_TYPE abbrevid=11 op0=5 op1=6 op2=0 op3=0 op4=0 op5=0/>
> <LOCAL_DISCRIMINATOR abbrevid=88 op0=0/>
> <PARAM_DECL abbrevid=40 op0=0 op1=4 op2=3 op3=1 op4=1/>
> <FUNCTION_TYPE abbrevid=11 op0=7 op1=7 op2=0 op3=0 op4=0 op5=0/>
> <METATYPE_TYPE abbrevid=12 op0=1 op1=0/>
> <FUNCTION_TYPE abbrevid=11 op0=7 op1=1 op2=0 op3=0 op4=0 op5=0/>
> <TUPLE_TYPE abbrevid=9/>
> <DECL_CONTEXT abbrevid=70 op0=1 op1=1/>
> <DECL_CONTEXT abbrevid=70 op0=2 op1=1/>
> <DECL_CONTEXT abbrevid=70 op0=3 op1=1/>
> <NORMAL_PROTOCOL_CONFORMANCE abbrevid=82 op0=6 op1=1 op2=0 op3=0 op4=0/> record string = ''
> <XREF abbrevid=91 op0=5 op1=1/>
> <XREF_TYPE_PATH_PIECE abbrevid=75 op0=6 op1=0/>
> </DECLS_AND_TYPES_BLOCK>
> <IDENTIFIER_DATA_BLOCK NumWords=10 BlockCodeSize=3>
> <IDENTIFIER_DATA abbrevid=4/> blob data = unprintable, 30 bytes.
> </IDENTIFIER_DATA_BLOCK>
> <INDEX_BLOCK NumWords=53 BlockCodeSize=4>
> <DECL_OFFSETS abbrevid=4 op0=73085 op1=73418 op2=73598 op3=73894 op4=74114 op5=74671/>
> <TYPE_OFFSETS abbrevid=4 op0=73348 op1=73817 op2=74037 op3=74257 op4=74334 op5=74375 op6=74452/>
> <IDENTIFIER_OFFSETS abbrevid=4 op0=1 op1=9 op2=14 op3=20/>
> <DECL_CONTEXT_OFFSETS abbrevid=4 op0=74460 op1=74500 op2=74540/>
> <LOCAL_DECL_CONTEXT_OFFSETS abbrevid=4/> record string = ''
> <GENERIC_ENVIRONMENT_OFFSETS abbrevid=4/> record string = ''
> <NORMAL_CONFORMANCE_OFFSETS abbrevid=4 op0=74580/> record string = 'T'
> <SIL_LAYOUT_OFFSETS abbrevid=4/> record string = ''
> <TOP_LEVEL_DECLS abbrevid=5 op0=28/> blob data = unprintable, 40 bytes.
> <OBJC_METHODS abbrevid=6 op0=32/> blob data = unprintable, 44 bytes.
> </INDEX_BLOCK>
> </MODULE_BLOCK>
> _______________________________________________
> swift-dev mailing list
> swift-dev at swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev
More information about the swift-dev
mailing list