|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r83920 - trunk/tools/build/v2/engine
From: steven_at_[hidden]
Date: 2013-04-15 19:30:37
Author: steven_watanabe
Date: 2013-04-15 19:30:36 EDT (Mon, 15 Apr 2013)
New Revision: 83920
URL: http://svn.boost.org/trac/boost/changeset/83920
Log:
Eliminate some extra list_copy/INSTR_POPs.
Text files modified:
trunk/tools/build/v2/engine/function.c | 50 ++++++++++++++++++++++++++++------------
1 files changed, 35 insertions(+), 15 deletions(-)
Modified: trunk/tools/build/v2/engine/function.c
==============================================================================
--- trunk/tools/build/v2/engine/function.c (original)
+++ trunk/tools/build/v2/engine/function.c 2013-04-15 19:30:36 EDT (Mon, 15 Apr 2013)
@@ -2325,7 +2325,6 @@
compile_set_label( c, top );
compile_emit_branch( c, INSTR_FOR_LOOP, end );
compile_emit( c, INSTR_SET, var );
- compile_emit( c, INSTR_POP, 0 );
/* Run the loop body */
compile_parse( parse->right, c, RESULT_NONE );
@@ -2600,6 +2599,10 @@
group->elems, 0 ) )->s );
var_parse_group_free( group );
compile_parse( parse->right, c, RESULT_STACK );
+ if ( result_location != RESULT_NONE )
+ {
+ compile_emit( c, INSTR_SET_RESULT, 1 );
+ }
compile_emit( c, op_code, name );
}
else
@@ -2607,6 +2610,10 @@
var_parse_group_compile( group, c );
var_parse_group_free( group );
compile_parse( parse->right, c, RESULT_STACK );
+ if ( result_location != RESULT_NONE )
+ {
+ compile_emit( c, INSTR_SET_RESULT, 1 );
+ }
compile_emit( c, op_code_group, 0 );
}
}
@@ -2614,9 +2621,16 @@
{
compile_parse( parse->left, c, RESULT_STACK );
compile_parse( parse->right, c, RESULT_STACK );
+ if ( result_location != RESULT_NONE )
+ {
+ compile_emit( c, INSTR_SET_RESULT, 1 );
+ }
compile_emit( c, op_code_group, 0 );
}
- adjust_result( c, RESULT_STACK, result_location );
+ if ( result_location != RESULT_NONE )
+ {
+ adjust_result( c, RESULT_RETURN, result_location );
+ }
}
else if ( parse->type == PARSE_SETCOMP )
{
@@ -3761,7 +3775,10 @@
case INSTR_SET_RESULT:
list_free( result );
- result = stack_pop( s );
+ if ( !code->arg )
+ result = stack_pop( s );
+ else
+ result = list_copy( stack_top( s ) );
break;
case INSTR_PUSH_RESULT:
@@ -3997,18 +4014,18 @@
*/
case INSTR_SET:
- function_set_variable( function, frame, code->arg, list_copy(
- stack_top( s ) ) );
+ function_set_variable( function, frame, code->arg,
+ stack_pop( s ) );
break;
case INSTR_APPEND:
- function_append_variable( function, frame, code->arg, list_copy(
- stack_top( s ) ) );
+ function_append_variable( function, frame, code->arg,
+ stack_pop( s ) );
break;
case INSTR_DEFAULT:
- function_default_variable( function, frame, code->arg, list_copy(
- stack_top( s ) ) );
+ function_default_variable( function, frame, code->arg,
+ stack_pop( s ) );
break;
case INSTR_SET_FIXED:
@@ -4016,7 +4033,7 @@
LIST * * ptr = &frame->module->fixed_variables[ code->arg ];
assert( code->arg < frame->module->num_fixed_variables );
list_free( *ptr );
- *ptr = list_copy( stack_top( s ) );
+ *ptr = stack_pop( s );
break;
}
@@ -4024,16 +4041,19 @@
{
LIST * * ptr = &frame->module->fixed_variables[ code->arg ];
assert( code->arg < frame->module->num_fixed_variables );
- *ptr = list_append( *ptr, list_copy( stack_top( s ) ) );
+ *ptr = list_append( *ptr, stack_pop( s ) );
break;
}
case INSTR_DEFAULT_FIXED:
{
LIST * * ptr = &frame->module->fixed_variables[ code->arg ];
+ LIST * value = stack_pop( s );
assert( code->arg < frame->module->num_fixed_variables );
if ( list_empty( *ptr ) )
- *ptr = list_copy( stack_top( s ) );
+ *ptr = value;
+ else
+ list_free( value );
break;
}
@@ -4047,7 +4067,7 @@
function_set_named_variable( function, frame, list_item( iter ),
list_copy( value ) );
list_free( vars );
- stack_push( s, value );
+ list_free( value );
break;
}
@@ -4061,7 +4081,7 @@
function_append_named_variable( function, frame, list_item( iter
), list_copy( value ) );
list_free( vars );
- stack_push( s, value );
+ list_free( value );
break;
}
@@ -4075,7 +4095,7 @@
function_default_named_variable( function, frame, list_item(
iter ), list_copy( value ) );
list_free( vars );
- stack_push( s, value );
+ list_free( value );
break;
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk