[pypy-commit] stmgc default: Shrink the init_prebuilt_xxx functions by using stm_setup_prebuilt(). Yay.

arigo noreply at buildbot.pypy.org
Sun Mar 2 20:29:17 CET 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r930:8852b39a1b63
Date: 2014-03-02 20:29 +0100
http://bitbucket.org/pypy/stmgc/changeset/8852b39a1b63/

Log:	Shrink the init_prebuilt_xxx functions by using
	stm_setup_prebuilt(). Yay.

diff --git a/duhton/duhton.h b/duhton/duhton.h
--- a/duhton/duhton.h
+++ b/duhton/duhton.h
@@ -186,6 +186,8 @@
 #define _du_read1(p1)           stm_read((object_t *)(p1))
 #define _du_write1(p1)          stm_write((object_t *)(p1))
 
+#define INIT_PREBUILT(p)       ((typeof(p))stm_setup_prebuilt((object_t *)(p)))
+
 
 #ifndef NDEBUG
 # define _check_not_free(ob)                                    \
diff --git a/duhton/frame.c b/duhton/frame.c
--- a/duhton/frame.c
+++ b/duhton/frame.c
@@ -47,18 +47,12 @@
 
 void init_prebuilt_frame_objects(void)
 {
-    du_empty_framenode = (DuFrameNodeObject *)
-        _stm_allocate_old(sizeof(DuFrameNodeObject));
-    du_empty_framenode->ob_base.type_id = DUTYPE_FRAMENODE;
-    du_empty_framenode->ob_count = 0;
+    static DuFrameNodeObject empty_framenode = { {.type_id=DUTYPE_FRAMENODE} };
+    static DuFrameObject g = { {.type_id=DUTYPE_FRAME},
+                               .ob_nodes=&empty_framenode };
 
-    DuFrameObject *g = (DuFrameObject *)
-        _stm_allocate_old(sizeof(DuFrameObject));
-    g->ob_base.type_id = DUTYPE_FRAME;
-    g->ob_nodes = du_empty_framenode;
-    Du_Globals = (DuObject *)g;
-
-    _du_save2(du_empty_framenode, Du_Globals);
+    du_empty_framenode = INIT_PREBUILT(&empty_framenode);
+    Du_Globals = (DuObject *)INIT_PREBUILT(&g);
 }
 
 DuObject *DuFrame_New()
diff --git a/duhton/listobject.c b/duhton/listobject.c
--- a/duhton/listobject.c
+++ b/duhton/listobject.c
@@ -205,12 +205,8 @@
 
 void init_prebuilt_list_objects(void)
 {
-    du_empty_tuple = (DuTupleObject *)
-        _stm_allocate_old(sizeof(DuTupleObject));
-    du_empty_tuple->ob_base.type_id = DUTYPE_TUPLE;
-    du_empty_tuple->ob_count = 0;
-    du_empty_tuple->ob_capacity = 0;
-    _du_save1(du_empty_tuple);
+    static DuTupleObject empty_tuple = { { { }, DUTYPE_TUPLE } };
+    du_empty_tuple = INIT_PREBUILT(&empty_tuple);
 }
 
 DuObject *DuList_New()
diff --git a/duhton/object.c b/duhton/object.c
--- a/duhton/object.c
+++ b/duhton/object.c
@@ -69,9 +69,8 @@
 
 void init_prebuilt_object_objects(void)
 {
-    Du_None = (DuObject *)_stm_allocate_old(sizeof(DuObject));
-    Du_None->type_id = DUTYPE_NONE;
-    _du_save1(Du_None);
+    static DuObject none = { { }, DUTYPE_NONE };
+    Du_None = INIT_PREBUILT(&none);
 }
 
 void Du_FatalError(char *msg, ...)
diff --git a/duhton/symbol.c b/duhton/symbol.c
--- a/duhton/symbol.c
+++ b/duhton/symbol.c
@@ -55,13 +55,8 @@
 
 void init_prebuilt_symbol_objects(void)
 {
-    _Du_AllSymbols = (DuSymbolObject *)
-        _stm_allocate_old(sizeof(DuSymbolObject));
-    _Du_AllSymbols->ob_base.type_id = DUTYPE_SYMBOL;
-    _Du_AllSymbols->myid = 0;
-    _Du_AllSymbols->name = "";
-    _Du_AllSymbols->next = NULL;
-    _du_save1(_Du_AllSymbols);
+    static DuSymbolObject allsymbols = { {.type_id=DUTYPE_SYMBOL}, .name="" };
+    _Du_AllSymbols = INIT_PREBUILT(&allsymbols);
 }
 
 DuObject *DuSymbol_FromString(const char *name)
diff --git a/duhton/transaction.c b/duhton/transaction.c
--- a/duhton/transaction.c
+++ b/duhton/transaction.c
@@ -7,15 +7,11 @@
 
 void init_prebuilt_transaction_objects(void)
 {
+    static DuConsObject pending = { {.type_id = DUTYPE_CONS} };
+    du_pending_transactions = INIT_PREBUILT(&pending);
+
     assert(Du_None);   /* already created */
-
-    du_pending_transactions = (DuConsObject *)
-        _stm_allocate_old(sizeof(DuConsObject));
-    du_pending_transactions->ob_base.type_id = DUTYPE_CONS;
-    du_pending_transactions->car = NULL;
     du_pending_transactions->cdr = Du_None;
-
-    _du_save1(du_pending_transactions);
 };
 
 static pthread_mutex_t mutex_sleep = PTHREAD_MUTEX_INITIALIZER;


More information about the pypy-commit mailing list