aboutsummaryrefslogtreecommitdiff
path: root/src/modules.js
diff options
context:
space:
mode:
authormax99x <max99x@gmail.com>2011-07-21 22:15:54 +0300
committermax99x <max99x@gmail.com>2011-07-22 00:36:42 +0300
commit12cc157d6e84c74b2291496b3dd0ed1c1f1d24a4 (patch)
treef1035bb04ff6dc8f51400a1854179d2f65444f55 /src/modules.js
parent50face8e644709e140ffa4dcba2be6d42e088c64 (diff)
Refactored the new struct layouter to work with QUANTUM_SIZE != 4.
Diffstat (limited to 'src/modules.js')
-rw-r--r--src/modules.js52
1 files changed, 26 insertions, 26 deletions
diff --git a/src/modules.js b/src/modules.js
index 243fed69..982d1b8c 100644
--- a/src/modules.js
+++ b/src/modules.js
@@ -39,7 +39,7 @@ var Debugging = {
var form6 = new RegExp(/^ (tail )?call void \@llvm.dbg.\w+\(metadata .*$/);
var formStruct = /^!(\d+) = metadata !\{i32 \d+, metadata !\d+, metadata !"([^"]+)", metadata !\d+, i32 \d+, i64 (\d+), [^,]*, [^,]*, [^,]*, [^,]*, metadata !(\d+), .*} ; \[ DW_TAG_(?:structure|class)_type \]$/;
var formStructMembers = /^!(\d+) = metadata !\{(.*)\}$/;
- var formMember = /^!(\d+) = metadata !\{i32 \d+, metadata !\d+, metadata !"([^"]+)", metadata !\d+, i32 \d+, i64 (\d+), i64 \d+, i64 (\d+), .+?, metadata !(\d+)} ; \[ DW_TAG_member \]$/;
+ var formMember = /^!(\d+) = metadata !\{i32 \d+, metadata !\d+, metadata !"([^"]+)", metadata !\d+, i32 \d+, i64 \d+, i64 \d+, i64 \d+, .+?, metadata !(\d+)} ; \[ DW_TAG_member \]$/;
var debugComment = new RegExp(/; +\[debug line = \d+:\d+\]/);
@@ -117,33 +117,33 @@ var Debugging = {
this.llvmLineToSourceFile[l] = metadataToFilename[m];
}
- // Create base struct definitions.
- for (var structName in structToMemberMeta) {
- // TODO: Account for bitfields.
- Types.structDefinitions[structName] = {
- size: parseInt(structToSize[structName]) / 8,
- members: {}
- }
- }
- // Fill struct members.
- for (var structName in structToMemberMeta) {
- var struct = Types.structDefinitions[structName];
- var memberMetaId = structToMemberMeta[structName];
- var memberIds = memberMetaToMembers[memberMetaId];
- for (var i = 0; i < memberIds.length; i++) {
- if (memberIds[i] in metadataToMember) {
- var member = metadataToMember[memberIds[i]];
- var memberObj = {
- size: parseInt(member[1]) / 8,
- offset: parseInt(member[2]) / 8
+ // Create struct definitions.
+ // TODO: Account for bitfields.
+ function generateStructDefinition(name) {
+ if (!Types.structMetadata.hasOwnProperty(name)) {
+ var struct = [];
+ var membersMetaId = structToMemberMeta[name];
+ var memberIds = memberMetaToMembers[membersMetaId];
+ for (var i = 0; i < memberIds.length; i++) {
+ var memberId = memberIds[i];
+ if (memberId in metadataToMember) {
+ var member = metadataToMember[memberId];
+ if (member[1] in structMetaToStruct) {
+ var def = generateStructDefinition(structMetaToStruct[member[1]]);
+ var record = {};
+ record[member[0]] = def;
+ struct.push(record);
+ } else {
+ struct.push(member[0]);
+ }
}
- if (member[3] in structMetaToStruct) {
- var subStruct = Types.structDefinitions[structMetaToStruct[member[3]]];
- memberObj.members = subStruct.members;
- }
- struct.members[member[0]] = memberObj;
}
+ Types.structMetadata[name] = struct;
}
+ return Types.structMetadata[name];
+ }
+ for (var name in structToMemberMeta) {
+ generateStructDefinition(name);
}
this.on = true;
@@ -179,7 +179,7 @@ var Types = {
this.fatTypes = this.types;
this.types = temp;
},
- structDefinitions: {},
+ structMetadata: {},
// Remove all data not needed during runtime (like line numbers, JS, etc.)
cleanForRuntime: function() {