fincsys.c
来自「FinC is Fava in C! A C-like syntax langu」· C语言 代码 · 共 1,211 行 · 第 1/3 页
C
1,211 行
void finc_sys_if ( FinCNode* p_node ){ FinCNode * l_test; FinCNode* l_true; FinCNode* l_false; l_test = FinC_NODE ( vector_at ( p_node->vector_node, 0 ) ); l_true = FinC_NODE ( vector_at ( p_node->vector_node, 1 ) ); l_false = FinC_NODE ( vector_at ( p_node->vector_node, 2 ) ); finc_node_evaluate ( l_test ); if ( access ( finc_data_get_raw_data ( l_test->data ), 0, Bool ) ) { finc_node_evaluate ( l_true ); } else { if ( l_false ) finc_node_evaluate ( l_false ); } unref ( l_test ); unref ( l_true ); unref ( l_false );}void finc_sys_for ( FinCNode* p_node ){ FinCNode * node1; FinCNode* node2; FinCNode* node3; FinCNode* code; Bool old_continue, old_break, old_in_cycle; node1 = FinC_NODE ( vector_at ( p_node->vector_node, 0 ) ); node2 = FinC_NODE ( vector_at ( p_node->vector_node, 1 ) ); node3 = FinC_NODE ( vector_at ( p_node->vector_node, 2 ) ); code = FinC_NODE ( vector_at ( p_node->vector_node, 3 ) ); finc_node_evaluate ( node1 ); finc_node_evaluate ( node2 ); old_continue = g_finc_app_continue; old_break = g_finc_app_break; old_in_cycle = g_finc_app_in_cycle; while ( access ( finc_data_get_raw_data ( node2->data ), 0, Bool ) ) { g_finc_app_in_cycle = TRUE; finc_node_evaluate ( code ); if (g_finc_app_break) { g_finc_app_break = FALSE; g_finc_app_in_cycle = FALSE; break; } g_finc_app_continue = FALSE; finc_node_evaluate ( node3 ); finc_node_evaluate ( node2 ); g_finc_app_in_cycle = FALSE; } unref ( node1 ); unref ( node2 ); unref ( node3 ); unref ( code ); g_finc_app_continue = old_continue; g_finc_app_break = old_break; g_finc_app_in_cycle = old_in_cycle;}void finc_sys_while ( FinCNode* p_node ){ FinCNode * l_test; FinCNode* l_code; Bool old_continue, old_break, old_in_cycle; l_test = FinC_NODE ( vector_at ( p_node->vector_node, 0 ) ); l_code = FinC_NODE ( vector_at ( p_node->vector_node, 1 ) ); finc_node_evaluate ( l_test ); old_continue = g_finc_app_continue; old_break = g_finc_app_break; old_in_cycle = g_finc_app_in_cycle; while ( access ( finc_data_get_raw_data ( l_test->data ), 0, Bool ) ) { g_finc_app_in_cycle = TRUE; finc_node_evaluate ( l_code ); if (g_finc_app_break) { g_finc_app_break = FALSE; g_finc_app_in_cycle = FALSE; break; } g_finc_app_continue = FALSE; finc_node_evaluate ( l_test ); g_finc_app_in_cycle = FALSE; } unref ( l_test ); unref ( l_code ); g_finc_app_continue = old_continue; g_finc_app_break = old_break; g_finc_app_in_cycle = old_in_cycle;}void finc_sys_return ( FinCNode* p_node ){ FinCNode * l_node; l_node = FinC_NODE ( vector_at ( p_node->vector_node, 0 ) ); finc_node_evaluate ( l_node ); g_finc_func_return = addref ( FinCData, l_node->data ); /*g_finc_func_return = finc_data_new_copy (l_node->data);*/ unref ( l_node ); g_finc_func_halt = TRUE;}void finc_sys_continue ( FinCNode* p_node ){ if ( g_finc_app_in_cycle ) { g_finc_app_continue = TRUE; return; } printf("Runtime Error: can't use continue not in a cycle.\n");}void finc_sys_break ( FinCNode* p_node ){ if ( g_finc_app_in_cycle ) { g_finc_app_break = TRUE; return; } printf("Runtime Error: can't use break not in a cycle.\n");}void finc_sys_inc ( FinCNode* p_node ){ FinCNode * l_node; l_node = (FinCNode*)vector_at ( p_node->vector_node, 0 ); finc_node_evaluate ( l_node ); p_node->data = finc_data_new_copy(l_node->data); unref ( l_node ); access ( finc_data_get_raw_data ( l_node->data ), 0, unsigned int ) = access ( finc_data_get_raw_data ( l_node->data ), 0, unsigned int ) + 1;}void finc_sys_dec ( FinCNode* p_node ){ FinCNode * l_node; l_node = (FinCNode*)vector_at ( p_node->vector_node, 0 ); p_node->data = finc_data_new_copy(l_node->data); finc_node_evaluate ( l_node ); unref ( l_node ); access ( finc_data_get_raw_data ( l_node->data ), 0, unsigned int ) = access ( finc_data_get_raw_data ( l_node->data ), 0, unsigned int ) - 1;}void finc_sys_cmp_l ( FinCNode* p_node ){ FinCNode * l_left; FinCNode* l_right; FinCType* l_type; FinCData* l_data; FinCData* l_data_left; FinCData* l_data_right; l_left = (FinCNode*)vector_at ( p_node->vector_node, 0 ); l_right = (FinCNode*)vector_at ( p_node->vector_node, 1 ); finc_node_evaluate ( l_left ); l_data_left = finc_node_take_data (l_left); finc_node_evaluate ( l_right ); l_data_right = finc_node_take_data (l_right); l_type = finc_type_new ( FinCType_Bool, FinCArrayType_None, 0 ); l_data = finc_data_new ( l_type, NULL ); unref ( l_type ); if ( access ( finc_data_get_raw_data ( l_data_left ), 0, unsigned int ) < access ( finc_data_get_raw_data ( l_data_right ), 0, unsigned int ) ) access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = TRUE; else access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = FALSE; unref (l_left); unref (l_right); unref (l_data_left); unref (l_data_right); unref (p_node->data); p_node->data = l_data;}void finc_sys_cmp_g ( FinCNode* p_node ){ FinCNode * l_left; FinCNode* l_right; FinCType* l_type; FinCData* l_data; FinCData* l_data_left; FinCData* l_data_right; l_left = (FinCNode*)vector_at ( p_node->vector_node, 0 ); l_right = (FinCNode*)vector_at ( p_node->vector_node, 1 ); finc_node_evaluate ( l_left ); l_data_left = finc_node_take_data (l_left); finc_node_evaluate ( l_right ); l_data_right = finc_node_take_data (l_right); l_type = finc_type_new ( FinCType_Bool, FinCArrayType_None, 0 ); l_data = finc_data_new ( l_type, NULL ); unref ( l_type ); if ( access ( finc_data_get_raw_data ( l_data_left ), 0, unsigned int ) > access ( finc_data_get_raw_data ( l_data_right ), 0, unsigned int ) ) access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = TRUE; else access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = FALSE; unref ( l_left ); unref ( l_right ); unref (l_data_left); unref (l_data_right); unref ( p_node->data ); p_node->data = l_data;}void finc_sys_cmp_le ( FinCNode* p_node ){ FinCNode * l_left; FinCNode* l_right; FinCType* l_type; FinCData* l_data; FinCData* l_data_left; FinCData* l_data_right; l_left = (FinCNode*)vector_at ( p_node->vector_node, 0 ); l_right = (FinCNode*)vector_at ( p_node->vector_node, 1 ); finc_node_evaluate ( l_left ); l_data_left = finc_node_take_data (l_left); finc_node_evaluate ( l_right ); l_data_right = finc_node_take_data (l_right); l_type = finc_type_new ( FinCType_Bool, FinCArrayType_None, 0 ); l_data = finc_data_new ( l_type, NULL ); unref ( l_type ); if ( access ( finc_data_get_raw_data ( l_data_left ), 0, unsigned int ) <= access ( finc_data_get_raw_data ( l_data_right ), 0, unsigned int ) ) access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = TRUE; else access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = FALSE; unref ( l_left ); unref ( l_right ); unref (l_data_left); unref (l_data_right); unref ( p_node->data ); p_node->data = l_data;}void finc_sys_cmp_ge ( FinCNode* p_node ){ FinCNode * l_left; FinCNode* l_right; FinCType* l_type; FinCData* l_data; FinCData* l_data_left; FinCData* l_data_right; l_left = (FinCNode*)vector_at ( p_node->vector_node, 0 ); l_right = (FinCNode*)vector_at ( p_node->vector_node, 1 ); finc_node_evaluate ( l_left ); l_data_left = finc_node_take_data (l_left); finc_node_evaluate ( l_right ); l_data_right = finc_node_take_data (l_right); l_type = finc_type_new ( FinCType_Bool, FinCArrayType_None, 0 ); l_data = finc_data_new ( l_type, NULL ); unref ( l_type ); if ( access ( finc_data_get_raw_data ( l_data_left ), 0, unsigned int ) >= access ( finc_data_get_raw_data ( l_data_right ), 0, unsigned int ) ) access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = TRUE; else access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = FALSE; unref ( l_left ); unref ( l_right ); unref (l_data_left); unref (l_data_right); unref ( p_node->data ); p_node->data = l_data;}void finc_sys_cmp_ne ( FinCNode* p_node ){ FinCNode * l_left; FinCNode* l_right; FinCType* l_type; FinCData* l_data; FinCData* l_data_left; FinCData* l_data_right; l_left = (FinCNode*)vector_at ( p_node->vector_node, 0 ); l_right = (FinCNode*)vector_at ( p_node->vector_node, 1 ); finc_node_evaluate ( l_left ); l_data_left = finc_node_take_data (l_left); finc_node_evaluate ( l_right ); l_data_right = finc_node_take_data (l_right); l_type = finc_type_new ( FinCType_Bool, FinCArrayType_None, 0 ); l_data = finc_data_new ( l_type, NULL ); unref ( l_type ); if ( access ( finc_data_get_raw_data ( l_data_left ), 0, unsigned int ) != access ( finc_data_get_raw_data ( l_data_right ), 0, unsigned int ) ) access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = TRUE; else access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = FALSE; unref ( l_left ); unref ( l_right ); unref (l_data_left); unref (l_data_right); unref ( p_node->data ); p_node->data = l_data;}void finc_sys_cmp_e ( FinCNode* p_node ){ FinCNode * l_left; FinCNode* l_right; FinCType* l_type; FinCData* l_data; FinCData* l_data_left; FinCData* l_data_right; l_left = (FinCNode*)vector_at ( p_node->vector_node, 0 ); l_right = (FinCNode*)vector_at ( p_node->vector_node, 1 ); finc_node_evaluate ( l_left ); l_data_left = finc_node_take_data (l_left); finc_node_evaluate ( l_right ); l_data_right = finc_node_take_data (l_right); l_type = finc_type_new ( FinCType_Bool, FinCArrayType_None, 0 ); l_data = finc_data_new ( l_type, NULL ); unref ( l_type ); if ( access ( finc_data_get_raw_data ( l_data_left ), 0, unsigned int ) == access ( finc_data_get_raw_data ( l_data_right ), 0, unsigned int ) ) access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = TRUE; else access ( finc_data_get_raw_data ( l_data ), 0, Bool ) = FALSE; unref ( l_left ); unref ( l_right ); unref (l_data_left); unref (l_data_right); unref ( p_node->data ); p_node->data = l_data;}void finc_sys_block ( FinCNode* p_node ){ FinCNode * l_node; unsigned int l_size; unsigned int i; l_size = vector_get_size ( p_node->vector_node ); for ( i = 0; i < l_size; i++ ) { l_node = (FinCNode*)vector_at ( p_node->vector_node, i ); finc_node_evaluate ( l_node ); unref ( l_node ); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?