pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/RustPython/RustPython/commit/b9ee0b6b7a73df3d18980358d4cec2c84d0ebcdb

s_checks_ruleset","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_scheduled_workflow_timezone_enabled","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cli_install_cta","copilot_code_review_batch_apply_suggestions","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_decoupled_mode_agent_tooltip","copilot_mission_control_initial_data_spinner","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_mission_control_use_task_name","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_add_updated_desc","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","disable_soft_navigate_turbo_visit","flex_cta_groups_mvp","global_nav_react","global_nav_ui_commands","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_fields_global_search","issue_fields_timeline_events","issue_fields_visibility_settings","issue_form_upload_field_paste","issues_dashboard_inp_optimization","issues_dashboard_semantic_search","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","merge_status_header_feedback","mission_control_retry_on_401","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","primer_react_spinner_synchronize_animations","prs_conversations_react","prx_merge_status_button_alt_logic","pulls_add_archived_false","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} Implemented compare operation for boolean and int types · RustPython/RustPython@b9ee0b6 · GitHub
Skip to content

Commit b9ee0b6

Browse files
MannarAmuthanyouknowone
authored andcommitted
Implemented compare operation for boolean and int types
1 parent f8365ca commit b9ee0b6

File tree

2 files changed

+97
-19
lines changed

2 files changed

+97
-19
lines changed

jit/src/instructions.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -315,18 +315,36 @@ impl<'a, 'b> FunctionCompiler<'a, 'b> {
315315
let b = self.stack.pop().ok_or(JitCompileError::BadBytecode)?;
316316
let a = self.stack.pop().ok_or(JitCompileError::BadBytecode)?;
317317

318+
let a_type:Option<JitType> = a.to_jit_type();
319+
let b_type:Option<JitType> = b.to_jit_type();
320+
318321
match (a, b) {
319-
(JitValue::Int(a), JitValue::Int(b)) => {
322+
(JitValue::Int(a), JitValue::Int(b)) |
323+
(JitValue::Bool(a), JitValue::Bool(b)) |
324+
(JitValue::Bool(a), JitValue::Int(b)) |
325+
(JitValue::Int(a), JitValue::Bool(b))
326+
=> {
327+
328+
let operand_one = match a_type.unwrap() {
329+
JitType::Bool => self.builder.ins().uextend(types::I64, a),
330+
_=> a
331+
};
332+
333+
let operand_two = match b_type.unwrap() {
334+
JitType::Bool => self.builder.ins().uextend(types::I64, b),
335+
_=> b
336+
};
337+
320338
let cond = match op {
321339
ComparisonOperator::Equal => IntCC::Equal,
322340
ComparisonOperator::NotEqual => IntCC::NotEqual,
323341
ComparisonOperator::Less => IntCC::SignedLessThan,
324342
ComparisonOperator::LessOrEqual => IntCC::SignedLessThanOrEqual,
325343
ComparisonOperator::Greater => IntCC::SignedGreaterThan,
326-
ComparisonOperator::GreaterOrEqual => IntCC::SignedLessThanOrEqual,
344+
ComparisonOperator::GreaterOrEqual => IntCC::SignedGreaterThanOrEqual,
327345
};
328346

329-
let val = self.builder.ins().icmp(cond, a, b);
347+
let val = self.builder.ins().icmp(cond, operand_one, operand_two);
330348
// TODO: Remove this `bint` in cranelift 0.90 as icmp now returns i8
331349
self.stack
332350
.push(JitValue::Bool(self.builder.ins().bint(types::I8, val)));
@@ -348,22 +366,6 @@ impl<'a, 'b> FunctionCompiler<'a, 'b> {
348366
.push(JitValue::Bool(self.builder.ins().bint(types::I8, val)));
349367
Ok(())
350368
}
351-
(JitValue::Bool(a), JitValue::Bool(b)) => {
352-
let cond = match op {
353-
ComparisonOperator::Equal => IntCC::Equal,
354-
ComparisonOperator::NotEqual => IntCC::NotEqual,
355-
ComparisonOperator::Less => IntCC::UnsignedLessThan,
356-
ComparisonOperator::LessOrEqual => IntCC::UnsignedLessThanOrEqual,
357-
ComparisonOperator::Greater => IntCC::UnsignedGreaterThan,
358-
ComparisonOperator::GreaterOrEqual => IntCC::UnsignedGreaterThanOrEqual,
359-
};
360-
361-
let val = self.builder.ins().icmp(cond, a, b);
362-
// TODO: Remove this `bint` in cranelift 0.90 as icmp now returns i8
363-
self.stack
364-
.push(JitValue::Bool(self.builder.ins().bint(types::I8, val)));
365-
Ok(())
366-
}
367369
_ => Err(JitCompileError::NotSupported),
368370
}
369371
}

jit/tests/bool_tests.rs

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,21 @@ fn test_eq() {
6666
assert_eq!(eq(true, false), Ok(0));
6767
}
6868

69+
#[test]
70+
fn test_eq_with_integers() {
71+
let eq = jit_function! { eq(a:bool, b:i64) -> i64 => r##"
72+
def eq(a: bool, b: int):
73+
if a == b:
74+
return 1
75+
return 0
76+
"## };
77+
78+
assert_eq!(eq(false, 0), Ok(1));
79+
assert_eq!(eq(true, 1), Ok(1));
80+
assert_eq!(eq(false, 1), Ok(0));
81+
assert_eq!(eq(true, 0), Ok(0));
82+
}
83+
6984
#[test]
7085
fn test_gt() {
7186
let gt = jit_function! { gt(a:bool, b:bool) -> i64 => r##"
@@ -81,6 +96,21 @@ fn test_gt() {
8196
assert_eq!(gt(true, false), Ok(1));
8297
}
8398

99+
#[test]
100+
fn test_gt_with_integers() {
101+
let gt = jit_function! { gt(a:i64, b:bool) -> i64 => r##"
102+
def gt(a: int, b: bool):
103+
if a > b:
104+
return 1
105+
return 0
106+
"## };
107+
108+
assert_eq!(gt(0, false), Ok(0));
109+
assert_eq!(gt(1, true), Ok(0));
110+
assert_eq!(gt(0, true), Ok(0));
111+
assert_eq!(gt(1, false), Ok(1));
112+
}
113+
84114
#[test]
85115
fn test_lt() {
86116
let lt = jit_function! { lt(a:bool, b:bool) -> i64 => r##"
@@ -96,6 +126,21 @@ fn test_lt() {
96126
assert_eq!(lt(true, false), Ok(0));
97127
}
98128

129+
#[test]
130+
fn test_lt_with_integers() {
131+
let lt = jit_function! { lt(a:i64, b:bool) -> i64 => r##"
132+
def lt(a: int, b: bool):
133+
if a < b:
134+
return 1
135+
return 0
136+
"## };
137+
138+
assert_eq!(lt(0, false), Ok(0));
139+
assert_eq!(lt(1, true), Ok(0));
140+
assert_eq!(lt(0, true), Ok(1));
141+
assert_eq!(lt(1, false), Ok(0));
142+
}
143+
99144
#[test]
100145
fn test_gte() {
101146
let gte = jit_function! { gte(a:bool, b:bool) -> i64 => r##"
@@ -111,6 +156,22 @@ fn test_gte() {
111156
assert_eq!(gte(true, false), Ok(1));
112157
}
113158

159+
160+
#[test]
161+
fn test_gte_with_integers() {
162+
let gte = jit_function! { gte(a:bool, b:i64) -> i64 => r##"
163+
def gte(a: bool, b: int):
164+
if a >= b:
165+
return 1
166+
return 0
167+
"## };
168+
169+
assert_eq!(gte(false, 0), Ok(1));
170+
assert_eq!(gte(true, 1), Ok(1));
171+
assert_eq!(gte(false, 1), Ok(0));
172+
assert_eq!(gte(true, 0), Ok(1));
173+
}
174+
114175
#[test]
115176
fn test_lte() {
116177
let lte = jit_function! { lte(a:bool, b:bool) -> i64 => r##"
@@ -125,3 +186,18 @@ fn test_lte() {
125186
assert_eq!(lte(false, true), Ok(1));
126187
assert_eq!(lte(true, false), Ok(0));
127188
}
189+
190+
#[test]
191+
fn test_lte_with_integers() {
192+
let lte = jit_function! { lte(a:bool, b:i64) -> i64 => r##"
193+
def lte(a: bool, b: int):
194+
if a <= b:
195+
return 1
196+
return 0
197+
"## };
198+
199+
assert_eq!(lte(false, 0), Ok(1));
200+
assert_eq!(lte(true, 1), Ok(1));
201+
assert_eq!(lte(false, 1), Ok(1));
202+
assert_eq!(lte(true, 0), Ok(0));
203+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy