darklua 0.18.0

Transform Lua scripts
Documentation
pub struct FuzzBudget {
    statements: usize,
    expressions: usize,
    types: usize,
}

impl FuzzBudget {
    pub fn new(statements: usize, expressions: usize) -> Self {
        Self {
            statements,
            expressions,
            types: 0,
        }
    }

    pub fn with_types(mut self, types_budget: usize) -> Self {
        self.types = types_budget;
        self
    }

    pub fn remaining_expressions(&self) -> usize {
        self.expressions
    }

    pub fn take_statement(&mut self) -> bool {
        if self.statements == 0 {
            false
        } else {
            self.statements -= 1;
            true
        }
    }

    pub fn try_take_statements(&mut self, amount: usize) -> usize {
        let took = amount.min(self.statements);
        self.statements -= took;
        took
    }

    pub fn take_expression(&mut self) -> bool {
        if self.expressions == 0 {
            false
        } else {
            self.expressions -= 1;
            true
        }
    }

    pub fn try_take_expressions(&mut self, amount: usize) -> usize {
        let took = amount.min(self.expressions);
        self.expressions -= took;
        took
    }

    pub fn take_type(&mut self) -> bool {
        if self.types == 0 {
            false
        } else {
            self.types -= 1;
            true
        }
    }

    pub fn try_take_types(&mut self, amount: usize) -> usize {
        let took = amount.min(self.types);
        self.types -= took;
        took
    }

    #[inline]
    pub fn can_have_expression(&self, amount: usize) -> bool {
        self.expressions >= amount
    }

    #[inline]
    pub fn can_have_type(&self, amount: usize) -> bool {
        self.types >= amount
    }

    #[inline]
    pub fn has_types(&self) -> bool {
        self.types > 0
    }

    #[inline]
    pub fn has_expressions(&self) -> bool {
        self.expressions > 0
    }
}