10% or so speed up
This commit is contained in:
@@ -15,7 +15,8 @@ import poset:*
|
|||||||
obj c_generator (Object) {
|
obj c_generator (Object) {
|
||||||
var id_counter: int
|
var id_counter: int
|
||||||
var ast_to_syntax: map<*ast_node, *tree<symbol>>
|
var ast_to_syntax: map<*ast_node, *tree<symbol>>
|
||||||
var ast_name_map: map<*ast_node, string>
|
var ast_name_map: hash_map<*ast_node, string>
|
||||||
|
var used_names: hash_set<string>
|
||||||
var function_type_map: map<type, string>
|
var function_type_map: map<type, string>
|
||||||
var function_typedef_string: string
|
var function_typedef_string: string
|
||||||
var closure_struct_definitions: string
|
var closure_struct_definitions: string
|
||||||
@@ -27,6 +28,7 @@ obj c_generator (Object) {
|
|||||||
id_counter = 0
|
id_counter = 0
|
||||||
ast_to_syntax.construct()
|
ast_to_syntax.construct()
|
||||||
ast_name_map.construct()
|
ast_name_map.construct()
|
||||||
|
used_names.construct()
|
||||||
function_type_map.construct()
|
function_type_map.construct()
|
||||||
function_typedef_string.construct()
|
function_typedef_string.construct()
|
||||||
closure_struct_definitions.construct()
|
closure_struct_definitions.construct()
|
||||||
@@ -89,6 +91,7 @@ obj c_generator (Object) {
|
|||||||
id_counter = old->id_counter
|
id_counter = old->id_counter
|
||||||
ast_to_syntax.copy_construct(&old->ast_to_syntax)
|
ast_to_syntax.copy_construct(&old->ast_to_syntax)
|
||||||
ast_name_map.copy_construct(&old->ast_name_map)
|
ast_name_map.copy_construct(&old->ast_name_map)
|
||||||
|
used_names.copy_construct(&old->used_names)
|
||||||
function_type_map.copy_construct(&old->function_type_map)
|
function_type_map.copy_construct(&old->function_type_map)
|
||||||
function_typedef_string.copy_construct(&old->function_typedef_string)
|
function_typedef_string.copy_construct(&old->function_typedef_string)
|
||||||
closure_struct_definitions.copy_construct(&old->closure_struct_definitions)
|
closure_struct_definitions.copy_construct(&old->closure_struct_definitions)
|
||||||
@@ -104,6 +107,7 @@ obj c_generator (Object) {
|
|||||||
fun destruct() {
|
fun destruct() {
|
||||||
ast_to_syntax.destruct()
|
ast_to_syntax.destruct()
|
||||||
ast_name_map.destruct()
|
ast_name_map.destruct()
|
||||||
|
used_names.destruct()
|
||||||
function_type_map.destruct()
|
function_type_map.destruct()
|
||||||
function_typedef_string.destruct()
|
function_typedef_string.destruct()
|
||||||
closure_struct_definitions.destruct()
|
closure_struct_definitions.destruct()
|
||||||
@@ -590,9 +594,10 @@ obj c_generator (Object) {
|
|||||||
if (result == "impossible name")
|
if (result == "impossible name")
|
||||||
error("HUGE PROBLEMS")
|
error("HUGE PROBLEMS")
|
||||||
// TODO keyword avoid seems not to work
|
// TODO keyword avoid seems not to work
|
||||||
if (make_unique && (ast_name_map.contains_value(result) || c_keyword_avoid.contains(result)))
|
if (make_unique && (used_names.contains(result) || c_keyword_avoid.contains(result)))
|
||||||
result += get_id()
|
result += get_id()
|
||||||
ast_name_map.set(node, result)
|
ast_name_map.set(node, result)
|
||||||
|
used_names.add(result)
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
fun cify_name(name: string): string {
|
fun cify_name(name: string): string {
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ fun string():string {
|
|||||||
return string("")
|
return string("")
|
||||||
}
|
}
|
||||||
|
|
||||||
obj string (Object, Serializable) {
|
obj string (Object, Serializable, Hashable) {
|
||||||
var data: vector::vector<char>;
|
var data: vector::vector<char>;
|
||||||
fun construct(): *string {
|
fun construct(): *string {
|
||||||
data.construct();
|
data.construct();
|
||||||
@@ -130,6 +130,13 @@ obj string (Object, Serializable) {
|
|||||||
construct(*old)
|
construct(*old)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun hash(): ulong {
|
||||||
|
var hash: ulong = 7
|
||||||
|
for (var i = 0; i < data.size; i++;)
|
||||||
|
hash = hash*31 + data[i]
|
||||||
|
return hash
|
||||||
|
}
|
||||||
|
|
||||||
fun operator=(str: *char): void {
|
fun operator=(str: *char): void {
|
||||||
destruct();
|
destruct();
|
||||||
construct(str)
|
construct(str)
|
||||||
@@ -147,8 +154,6 @@ obj string (Object, Serializable) {
|
|||||||
return serialize::serialize(data)
|
return serialize::serialize(data)
|
||||||
}
|
}
|
||||||
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
fun unserialize(it: ref vector::vector<char>, pos: int): int {
|
||||||
/*construct()*/
|
|
||||||
/*util::unpack(data, pos) = serialize::unserialize<vector::vector<char>>(it, pos)*/
|
|
||||||
return data.unserialize(it, pos)
|
return data.unserialize(it, pos)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user