freesci-develop
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freesci-develop] r1592 - in freesci/branches/glutton: . src/engine


From: freesci
Subject: [freesci-develop] r1592 - in freesci/branches/glutton: . src/engine
Date: Sun, 11 Mar 2007 00:18:52 +0100

Author: skovmanden
Date: 2007-03-11 00:18:45 +0100 (Sun, 11 Mar 2007)
New Revision: 1592

Modified:
   freesci/branches/glutton/ChangeLog
   freesci/branches/glutton/src/engine/seg_manager.c
Log:
Refactoring work to make the segment manager less
format-dependent. Not finished yet. 


Modified: freesci/branches/glutton/ChangeLog
===================================================================
--- freesci/branches/glutton/ChangeLog  2007-01-14 22:21:58 UTC (rev 1591)
+++ freesci/branches/glutton/ChangeLog  2007-03-10 23:18:45 UTC (rev 1592)
@@ -1,3 +1,7 @@
+2007-03-11  Lars Skovlund  <address@hidden>
+
+       * src/engine/seg_manager.c: A bit of refactoring work.
+
 2006-12-13  Lars Skovlund  <address@hidden>
 
        * src/engine/kstring.c (kStrAt): Make the SQ4 detection heuristics

Modified: freesci/branches/glutton/src/engine/seg_manager.c
===================================================================
--- freesci/branches/glutton/src/engine/seg_manager.c   2007-01-14 22:21:58 UTC 
(rev 1591)
+++ freesci/branches/glutton/src/engine/seg_manager.c   2007-03-10 23:18:45 UTC 
(rev 1592)
@@ -234,10 +234,8 @@
        return mem;
        }
 
-int sm_initialise_script(mem_obj_t *mem, struct _state *s, int script_nr) 
+static int sm_set_locals_size(mem_obj_t *mem, struct _state *s, int script_nr) 
 {
-       /* allocate the script.buf */
-       script_t *scr;
        resource_t *script = scir_find_resource(s->resmgr, sci_script, 
script_nr, 0);
        if (s->version < SCI_VERSION_FTU_NEW_SCRIPT_HEADER) {
                mem->data.script.buf_size = script->size + 
getUInt16(script->data)*2; 
@@ -246,6 +244,14 @@
        else {
                mem->data.script.buf_size = script->size;
        }
+}
+
+int sm_initialise_script(mem_obj_t *mem, struct _state *s, int script_nr) 
+{
+       /* allocate the script.buf */
+       script_t *scr;
+
+       sm_set_locals_size(mem, s, script_nr);
        mem->data.script.buf = (char*) sci_malloc (mem->data.script.buf_size);
        dbg_print( "mem->data.script.buf ", (int) mem->data.script.buf );
        if (!mem->data.script.buf) {
@@ -645,6 +651,23 @@
        }
 };
 
+int
+sm_hash_segment_data(struct _seg_manager_t* self, int id)
+{
+       int i, len, hash_code = 0x55555555;
+       char *buf;
+
+       if (self->heap[id]->type == MEM_OBJ_LISTS) return 0;
+       if (self->heap[id]->type == MEM_OBJ_NODES) return 0;
+       if (self->heap[id]->type == MEM_OBJ_CLONES) return 0;
+       buf = sm_dereference(self, make_reg(id, 0), &len);
+
+       for (i = 0; i < len; i++)
+               hash_code = (hash_code * 19) + *(buf + i);
+
+       return hash_code;
+}
+
 void
 sm_set_export_width(struct _seg_manager_t* self, int flag)
 {
@@ -837,8 +860,8 @@
        }
 }
 
-object_t *
-sm_script_obj_init(seg_manager_t *self, reg_t obj_pos)
+static object_t *
+sm_script_obj_init0(seg_manager_t *self, reg_t obj_pos)
 {
        mem_obj_t *mobj = self->heap[obj_pos.segment];
        script_t *scr;
@@ -912,6 +935,12 @@
        return obj;
 }
 
+object_t *
+sm_script_obj_init(seg_manager_t *self, reg_t obj_pos)
+{
+       return sm_script_obj_init0(self, obj_pos);
+}
+
 static local_variables_t *
 _sm_alloc_locals_segment(seg_manager_t *self, script_t *scr, int count)
 {





reply via email to

[Prev in Thread] Current Thread [Next in Thread]