Lib: Rework the API for cancelling a parse

Also, use beta on CI until atomic::AtomicU32 lands in stable.
This commit is contained in:
Max Brunsfeld 2019-03-15 16:10:45 -07:00
parent 55dd2330ab
commit 0ae304f582
9 changed files with 82 additions and 23 deletions

View file

@ -136,10 +136,10 @@ extern "C" {
) -> *mut TSTree;
}
extern "C" {
pub fn ts_parser_enabled(arg1: *const TSParser) -> bool;
pub fn ts_parser_cancellation_flag(arg1: *const TSParser) -> *const u32;
}
extern "C" {
pub fn ts_parser_set_enabled(arg1: *mut TSParser, arg2: bool);
pub fn ts_parser_set_cancellation_flag(arg1: *mut TSParser, arg2: *const u32);
}
extern "C" {
pub fn ts_parser_timeout_micros(arg1: *const TSParser) -> u64;

View file

@ -13,13 +13,10 @@ use regex::Regex;
use serde::de::DeserializeOwned;
use std::collections::HashMap;
use std::ffi::CStr;
use std::fmt;
use std::marker::PhantomData;
use std::os::raw::{c_char, c_void};
use std::ptr;
use std::slice;
use std::str;
use std::u16;
use std::sync::atomic::AtomicU32;
use std::{fmt, ptr, slice, str, u16};
pub const PARSER_HEADER: &'static str = include_str!("../include/tree_sitter/parser.h");
@ -338,6 +335,18 @@ impl Parser {
ffi::ts_parser_set_included_ranges(self.0, ts_ranges.as_ptr(), ts_ranges.len() as u32)
};
}
pub unsafe fn cancellation_flag(&self) -> Option<&AtomicU32> {
(ffi::ts_parser_cancellation_flag(self.0) as *const AtomicU32).as_ref()
}
pub unsafe fn set_cancellation_flag(&self, flag: Option<&AtomicU32>) {
if let Some(flag) = flag {
ffi::ts_parser_set_cancellation_flag(self.0, flag as *const AtomicU32 as *const u32);
} else {
ffi::ts_parser_set_cancellation_flag(self.0, ptr::null());
}
}
}
impl Drop for Parser {