MCPcopy Create free account
hub / github.com/boostorg/build / compile_to_function

Function compile_to_function

src/engine/function.cpp:1634–1680  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1632}
1633
1634static JAM_FUNCTION * compile_to_function( compiler * c )
1635{
1636 JAM_FUNCTION * const result = (JAM_FUNCTION*)BJAM_MALLOC( sizeof( JAM_FUNCTION ) );
1637 int32_t i;
1638 result->base.type = FUNCTION_JAM;
1639 result->base.reference_count = 1;
1640 result->base.formal_arguments = 0;
1641 result->base.num_formal_arguments = 0;
1642
1643 result->base.rulename = 0;
1644
1645 result->code_size = c->code->size;
1646 result->code = (instruction*)BJAM_MALLOC( c->code->size * sizeof( instruction ) );
1647 memcpy( result->code, c->code->data, c->code->size * sizeof( instruction ) );
1648
1649 result->constants = (OBJECT**)BJAM_MALLOC( c->constants->size * sizeof( OBJECT * ) );
1650 if ( c->constants->size != 0 )
1651 memcpy( result->constants, c->constants->data,
1652 c->constants->size * sizeof( OBJECT * ) );
1653 result->num_constants = c->constants->size;
1654
1655 result->num_subfunctions = c->rules->size;
1656 result->functions = (SUBFUNCTION*)BJAM_MALLOC( c->rules->size * sizeof( SUBFUNCTION ) );
1657 for ( i = 0; i < c->rules->size; ++i )
1658 {
1659 struct stored_rule * const rule = &dynamic_array_at( struct stored_rule,
1660 c->rules, i );
1661 result->functions[ i ].name = rule->name;
1662 result->functions[ i ].code = function_compile( rule->parse );
1663 result->functions[ i ].code->num_formal_arguments = rule->num_arguments;
1664 result->functions[ i ].code->formal_arguments = rule->arguments;
1665 result->functions[ i ].local = rule->local;
1666 }
1667
1668 result->actions = (SUBACTION*)BJAM_MALLOC( c->actions->size * sizeof( SUBACTION ) );
1669 if ( c->actions->size != 0 )
1670 memcpy( result->actions, c->actions->data,
1671 c->actions->size * sizeof( SUBACTION ) );
1672 result->num_subactions = c->actions->size;
1673
1674 result->generic = 0;
1675
1676 result->file = 0;
1677 result->line = -1;
1678
1679 return result;
1680}
1681
1682
1683/*

Callers 2

function_compileFunction · 0.85
function_compile_actionsFunction · 0.85

Calls 1

function_compileFunction · 0.85

Tested by

no test coverage detected