From 6070dd8fd69ab046ef991ebdb042c402b07d2a6b Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Mon, 4 Aug 2003 09:09:49 +0000 Subject: [PATCH] Refactorings. * jam_src/modules.c: (import_module, imported_modules): New functions. * jam_src/builtins.c (builtin_import_module, builtin_imported_modules): Just call the above. * new/class.jam: Add some extra tests. [SVN r19424] --- historic/jam/src/builtins.c | 25 +++---------------------- historic/jam/src/modules.c | 36 ++++++++++++++++++++++++++++++++++++ historic/jam/src/modules.h | 7 +++++++ jam_src/builtins.c | 25 +++---------------------- jam_src/modules.c | 36 ++++++++++++++++++++++++++++++++++++ jam_src/modules.h | 7 +++++++ new/class.jam | 25 +++++++++++++++++++++++-- v2/kernel/class.jam | 25 +++++++++++++++++++++++-- 8 files changed, 138 insertions(+), 48 deletions(-) diff --git a/historic/jam/src/builtins.c b/historic/jam/src/builtins.c index b8db662f8..c801a23e1 100644 --- a/historic/jam/src/builtins.c +++ b/historic/jam/src/builtins.c @@ -871,38 +871,19 @@ LIST *builtin_import_module( PARSE *parse, FRAME *frame ) LIST* arg2 = lol_get( frame->args, 1 ); module_t* m = arg2 ? bindmodule(arg2->string) : root_module(); - - for(;arg1; arg1 = arg1->next) { - - char* s = arg1->string; - char** ss = &s; - if (!m->imported_modules) - m->imported_modules = hashinit( sizeof(char*), "imported"); - - hashenter(m->imported_modules, (HASHDATA**)&ss); - } + + import_module(arg1, m); return L0; } -static void add_module_name( void* r_, void* result_ ) -{ - char** r = (char**)r_; - LIST** result = (LIST**)result_; - - *result = list_new( *result, copystr( *r ) ); -} - LIST *builtin_imported_modules( PARSE *parse, FRAME *frame ) { LIST *arg0 = lol_get( frame->args, 0 ); - LIST *result = L0; module_t* source_module = bindmodule( arg0 ? arg0->string : 0 ); - if ( source_module->rules ) - hashenumerate( source_module->imported_modules, add_module_name, &result ); - return result; + return imported_modules(source_module); } LIST *builtin_instance( PARSE *parse, FRAME *frame ) diff --git a/historic/jam/src/modules.c b/historic/jam/src/modules.c index f0e069774..e039bf039 100644 --- a/historic/jam/src/modules.c +++ b/historic/jam/src/modules.c @@ -111,3 +111,39 @@ void exit_module( module_t* m ) { var_hash_swap( &m->variables ); } + +void import_module(LIST* module_names, module_t* target_module) +{ + struct hash* h; + + if (!target_module->imported_modules) + target_module->imported_modules = hashinit( sizeof(char*), "imported"); + h = target_module->imported_modules; + + for(;module_names; module_names = module_names->next) { + + char* s = module_names->string; + char** ss = &s; + + hashenter(h, (HASHDATA**)&ss); + } +} + +static void add_module_name( void* r_, void* result_ ) +{ + char** r = (char**)r_; + LIST** result = (LIST**)result_; + + *result = list_new( *result, copystr( *r ) ); +} + +LIST* imported_modules(module_t* module) +{ + LIST *result = L0; + + if ( module->rules ) + hashenumerate( module->imported_modules, add_module_name, &result ); + + return result; +} + diff --git a/historic/jam/src/modules.h b/historic/jam/src/modules.h index dc3f279e0..b458ceab4 100644 --- a/historic/jam/src/modules.h +++ b/historic/jam/src/modules.h @@ -6,6 +6,8 @@ #ifndef MODULES_DWA10182001_H # define MODULES_DWA10182001_H +#include "lists.h" + struct module_t { char* name; @@ -23,7 +25,12 @@ void bind_module_var( module_t*, char* name ); void enter_module( module_t* ); void exit_module( module_t* ); void delete_module( module_t* ); + +void import_module(LIST* module_names, module_t* target_module); +LIST* imported_modules(module_t* module); + struct hash* demand_rules( module_t* ); + #endif diff --git a/jam_src/builtins.c b/jam_src/builtins.c index b8db662f8..c801a23e1 100644 --- a/jam_src/builtins.c +++ b/jam_src/builtins.c @@ -871,38 +871,19 @@ LIST *builtin_import_module( PARSE *parse, FRAME *frame ) LIST* arg2 = lol_get( frame->args, 1 ); module_t* m = arg2 ? bindmodule(arg2->string) : root_module(); - - for(;arg1; arg1 = arg1->next) { - - char* s = arg1->string; - char** ss = &s; - if (!m->imported_modules) - m->imported_modules = hashinit( sizeof(char*), "imported"); - - hashenter(m->imported_modules, (HASHDATA**)&ss); - } + + import_module(arg1, m); return L0; } -static void add_module_name( void* r_, void* result_ ) -{ - char** r = (char**)r_; - LIST** result = (LIST**)result_; - - *result = list_new( *result, copystr( *r ) ); -} - LIST *builtin_imported_modules( PARSE *parse, FRAME *frame ) { LIST *arg0 = lol_get( frame->args, 0 ); - LIST *result = L0; module_t* source_module = bindmodule( arg0 ? arg0->string : 0 ); - if ( source_module->rules ) - hashenumerate( source_module->imported_modules, add_module_name, &result ); - return result; + return imported_modules(source_module); } LIST *builtin_instance( PARSE *parse, FRAME *frame ) diff --git a/jam_src/modules.c b/jam_src/modules.c index f0e069774..e039bf039 100644 --- a/jam_src/modules.c +++ b/jam_src/modules.c @@ -111,3 +111,39 @@ void exit_module( module_t* m ) { var_hash_swap( &m->variables ); } + +void import_module(LIST* module_names, module_t* target_module) +{ + struct hash* h; + + if (!target_module->imported_modules) + target_module->imported_modules = hashinit( sizeof(char*), "imported"); + h = target_module->imported_modules; + + for(;module_names; module_names = module_names->next) { + + char* s = module_names->string; + char** ss = &s; + + hashenter(h, (HASHDATA**)&ss); + } +} + +static void add_module_name( void* r_, void* result_ ) +{ + char** r = (char**)r_; + LIST** result = (LIST**)result_; + + *result = list_new( *result, copystr( *r ) ); +} + +LIST* imported_modules(module_t* module) +{ + LIST *result = L0; + + if ( module->rules ) + hashenumerate( module->imported_modules, add_module_name, &result ); + + return result; +} + diff --git a/jam_src/modules.h b/jam_src/modules.h index dc3f279e0..b458ceab4 100644 --- a/jam_src/modules.h +++ b/jam_src/modules.h @@ -6,6 +6,8 @@ #ifndef MODULES_DWA10182001_H # define MODULES_DWA10182001_H +#include "lists.h" + struct module_t { char* name; @@ -23,7 +25,12 @@ void bind_module_var( module_t*, char* name ); void enter_module( module_t* ); void exit_module( module_t* ); void delete_module( module_t* ); + +void import_module(LIST* module_names, module_t* target_module); +LIST* imported_modules(module_t* module); + struct hash* demand_rules( module_t* ); + #endif diff --git a/new/class.jam b/new/class.jam index 61762d9e8..8c16cbca8 100644 --- a/new/class.jam +++ b/new/class.jam @@ -357,6 +357,8 @@ local rule __test__ ( ) # 'myclass' xclass myclass { + import assert ; + rule __init__ ( x_ * : y_ * ) { # set some instance variables @@ -409,6 +411,17 @@ local rule __test__ ( ) { return $(__class__) ; } + + rule get-instance ( ) + { + return $(__name__) ; + } + + rule invariant ( ) + { + assert.equal 1 : 1 ; + } + } xclass derived1 : myclass @@ -434,6 +447,11 @@ local rule __test__ ( ) { return $(z) ; } + + rule invariant2 ( ) + { + assert.equal 2 : 2 ; + } } xclass derived2 : myclass @@ -456,7 +474,6 @@ local rule __test__ ( ) } } - xclass derived2a : derived2 { rule __init__ @@ -524,10 +541,14 @@ local rule __test__ ( ) assert.result derived1.g : $(b).f ; assert.result derived2.g : $(c).f ; assert.result derived2.g : $(d).f ; - + + $(a).invariant ; + $(b).invariant2 ; + # Check that the __class__ attribute is getting properly set. assert.result myclass : $(a).get-class ; assert.result derived1 : $(b).get-class ; + assert.result $(a) : $(a).get-instance ; $(a).set-x a.x ; $(b).set-x b.x ; diff --git a/v2/kernel/class.jam b/v2/kernel/class.jam index 61762d9e8..8c16cbca8 100644 --- a/v2/kernel/class.jam +++ b/v2/kernel/class.jam @@ -357,6 +357,8 @@ local rule __test__ ( ) # 'myclass' xclass myclass { + import assert ; + rule __init__ ( x_ * : y_ * ) { # set some instance variables @@ -409,6 +411,17 @@ local rule __test__ ( ) { return $(__class__) ; } + + rule get-instance ( ) + { + return $(__name__) ; + } + + rule invariant ( ) + { + assert.equal 1 : 1 ; + } + } xclass derived1 : myclass @@ -434,6 +447,11 @@ local rule __test__ ( ) { return $(z) ; } + + rule invariant2 ( ) + { + assert.equal 2 : 2 ; + } } xclass derived2 : myclass @@ -456,7 +474,6 @@ local rule __test__ ( ) } } - xclass derived2a : derived2 { rule __init__ @@ -524,10 +541,14 @@ local rule __test__ ( ) assert.result derived1.g : $(b).f ; assert.result derived2.g : $(c).f ; assert.result derived2.g : $(d).f ; - + + $(a).invariant ; + $(b).invariant2 ; + # Check that the __class__ attribute is getting properly set. assert.result myclass : $(a).get-class ; assert.result derived1 : $(b).get-class ; + assert.result $(a) : $(a).get-instance ; $(a).set-x a.x ; $(b).set-x b.x ;