projects
/
henge
/
apc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1f5e543
)
fixes
author
Jordan
<jordanlavatai@gmail.com>
Thu, 12 Jan 2017 02:11:50 +0000
(18:11 -0800)
committer
Jordan
<jordanlavatai@gmail.com>
Thu, 12 Jan 2017 02:11:50 +0000
(18:11 -0800)
src/ir.c
patch
|
blob
|
history
diff --git
a/src/ir.c
b/src/ir.c
index
63fe72b
..
0f98698
100644
(file)
--- a/
src/ir.c
+++ b/
src/ir.c
@@
-48,6
+48,21
@@
struct pagenode_t {
/* Enumerated types */
\r
enum dtype { FSDAT, MSDAT, ADAT, LDAT, FBDAT };
\r
enum ltype { OLINK, MLINK, VLINK, ALINK };
\r
/* Enumerated types */
\r
enum dtype { FSDAT, MSDAT, ADAT, LDAT, FBDAT };
\r
enum ltype { OLINK, MLINK, VLINK, ALINK };
\r
+/* Set link data */
\r
+struct ir_namelist_t;
\r
+struct ir_namelist_t
\r
+{ struct ir_namelist_t* nextsib;
\r
+ uint8_t* name;
\r
+};
\r
+struct ir_classld_t
\r
+{ struct ir_class_t* root_class;
\r
+ struct ir_namelist_t* namelist;
\r
+};
\r
+struct ir_setld_t
\r
+{ struct classld_t* classld;
\r
+ long long ref;
\r
+ struct ir_namelist_t* namelist;
\r
+};
\r
/* Set data mem */
\r
struct ir_setdata_header_t
\r
{ enum dtype type;
\r
/* Set data mem */
\r
struct ir_setdata_header_t
\r
{ enum dtype type;
\r
@@
-69,7
+84,8
@@
struct ir_simplex_t
{ struct ir_setdata_header_t header; };
\r
struct ir_link_t
\r
{ struct ir_setdata_header_t header;
\r
{ struct ir_setdata_header_t header; };
\r
struct ir_link_t
\r
{ struct ir_setdata_header_t header;
\r
- struct ir_set_t* src, * trg;
\r
+ struct ir_classld_t* classld;
\r
+ struct ir_setld_t* setld;
\r
enum ltype type;
\r
};
\r
union ir_setdata_t
\r
enum ltype type;
\r
};
\r
union ir_setdata_t
\r
@@
-183,7
+199,9
@@
struct ir_class_t* ir_class_addchild
{ iter = iter->nextsib;
\r
goto check;
\r
}
\r
{ iter = iter->nextsib;
\r
goto check;
\r
}
\r
- return iter->nextsib = struct_alloc(ir_class_t);
\r
+ iter = struct_alloc(ir_class_t);
\r
+ iter->nextsib = class->nextchild;
\r
+ return class->nextchild = iter;
\r
}
\r
\r
/* Add a set to a class
\r
}
\r
\r
/* Add a set to a class
\r
@@
-205,7
+223,9
@@
struct ir_set_t* ir_class_addset
{ iter = iter->nextsib;
\r
goto check;
\r
}
\r
{ iter = iter->nextsib;
\r
goto check;
\r
}
\r
- return iter->nextsib = struct_alloc(ir_set_t);
\r
+ iter = struct_alloc(ir_set_t);
\r
+ iter->nextsib = class->root_set;
\r
+ return class->root_set = iter;
\r
}
\r
\r
/* Add a set to a set
\r
}
\r
\r
/* Add a set to a set
\r
@@
-227,7
+247,9
@@
struct ir_set_t* ir_set_addchild
{ iter = iter->nextsib;
\r
goto check;
\r
}
\r
{ iter = iter->nextsib;
\r
goto check;
\r
}
\r
- return iter->nextsib = struct_alloc(ir_set_t);
\r
+ iter = struct_alloc(ir_set_t);
\r
+ iter->nextsib = set->nextchild;
\r
+ return set->nextchild = iter;
\r
}
\r
\r
/* Add a framebox to a set
\r
}
\r
\r
/* Add a framebox to a set
\r
@@
-250,8
+272,9
@@
struct ir_framebox_t* ir_set_add_framebox
{ iter = (struct ir_framebox_t*) iter->header.nextsib;
\r
goto check;
\r
}
\r
{ iter = (struct ir_framebox_t*) iter->header.nextsib;
\r
goto check;
\r
}
\r
- iter->header.nextsib = (union ir_setdata_t*) struct_alloc(ir_framebox_t);
\r
- return (struct ir_framebox_t*) iter->header.nextsib;
\r
+ iter = struct_alloc(ir_framebox_t);
\r
+ iter->header.nextsib = (union ir_setdata_t*) set->frameboxes;
\r
+ return set->frameboxes = iter;
\r
}
\r
\r
/* Match two null-terminated bytestrings
\r
}
\r
\r
/* Match two null-terminated bytestrings
\r
@@
-262,10
+285,12
@@
int bytes_identical
( uint8_t* stra,
\r
uint8_t* strb
\r
)
\r
( uint8_t* stra,
\r
uint8_t* strb
\r
)
\r
-{ while (*stra && *strb)
\r
- if (*stra++ != *strb++)
\r
- return 0;
\r
- return *stra == *strb;
\r
+{ int ca, cb;
\r
+ do {
\r
+ ca = *stra++;
\r
+ cb = *strb++;
\r
+ } while (ca && ca == cb);
\r
+ return (ca == cb);
\r
}
\r
\r
/* Assign Setdata to Set
\r
}
\r
\r
/* Assign Setdata to Set
\r
@@
-277,7
+302,6
@@
void ir_set_assign_data
)
\r
{ struct ir_framebox_t* framebox;
\r
struct ir_simplex_t* simplex;
\r
)
\r
{ struct ir_framebox_t* framebox;
\r
struct ir_simplex_t* simplex;
\r
- struct ir_link_t* link;
\r
switch (setdata->header.type)
\r
{ case FSDAT:
\r
framebox = ir_set_add_framebox(set, setdata->header.data_name);
\r
switch (setdata->header.type)
\r
{ case FSDAT:
\r
framebox = ir_set_add_framebox(set, setdata->header.data_name);
\r
@@
-303,7
+327,7
@@
void ir_set_assign_data
if (bytes_identical(simplex->header.data_name, setdata->header.data_name))
\r
{ wprintf("Duplicate audio %s\n", setdata->header.data_name);
\r
*simplex = setdata->audio;
\r
if (bytes_identical(simplex->header.data_name, setdata->header.data_name))
\r
{ wprintf("Duplicate audio %s\n", setdata->header.data_name);
\r
*simplex = setdata->audio;
\r
- //setdata
->audio
is now a pointer to redundant, unused memory.
\r
+ //setdata is now a pointer to redundant, unused memory.
\r
return;
\r
}
\r
else
\r
return;
\r
}
\r
else
\r
@@
-311,14
+335,8
@@
void ir_set_assign_data
simplex->header.nextsib = setdata;
\r
break;
\r
case LDAT:
\r
simplex->header.nextsib = setdata;
\r
break;
\r
case LDAT:
\r
- if (set->links == NULL)
\r
- { set->links = (struct ir_link_t*) setdata;
\r
- return;
\r
- }
\r
- link = set->links;
\r
- while (link->header.nextsib != NULL)
\r
- link = (struct ir_link_t*) link->header.nextsib;
\r
- link->header.nextsib = setdata;
\r
+ setdata->link.header.nextsib = set->links;
\r
+ set->links = (struct ir_link_t*) setdata;
\r
break;
\r
default:
\r
fprintf(stderr, "Unknown setdata type %x\n", setdata->header.type);
\r
break;
\r
default:
\r
fprintf(stderr, "Unknown setdata type %x\n", setdata->header.type);
\r