NOTE: This version requires recompilation of mruby and the C files.
NOTE: This version will only work with mruby 3.3.0 and above.
- Updated mruby to 3.3.0
- Updated MRI to 3.0.6
- Added error messages when Rake fails at installing
- Added error messages when mruby/MRI is missing
- Fixed Regex wrapper warnings when running Anyolite with newer Crystal versions
- Fixed warning message when compiling glue files
- Fixed some annotations not working properly
NOTE: This version requires recompilation of mruby and the C files.
NOTE: This version will only work with mruby 3.2.0 and above.
- Added direct bindings to
Regex
from Crystal (Regexp
in Ruby) - Added option to use a separate Ruby interpreter
- Added safeguard to catch non-fatal Crystal exceptions and raise them as Ruby errors
- Added option to transform procs into bytecode
- Added function to disable external program execution
- Added interpreter depth counter
- Updated to mruby 3.2.0
- Updated to MRI 3.0.5
- Added backtrace function for mruby
- Added option to fully protect Crystal values from the Ruby GC
- Added standalone wrappers for class properties
- Updated mruby config file to use
libucrt
instead ofmsvcrt
- Discarded old and problematic Regex mruby gem
- Made arguments for
Anyolite.call_rb_method_of_object
optional - Added automatic conversion from Ruby class names to class objects in method callers
- Improved testing script
- Added check for
RbValue
andRbRef
to some macro methods - Added ability to pass Ruby blocks via Crystal to Ruby function calls
- Added some internal methods to mruby to handle fibers
- Added some exception checking methods
- Added methods to check reference table size
- Removed now optional
Dir
gem from default build config - Removed need for
use_general_object_format_chars
flag for MRI - Added global option to use keyword args for optional arguments only
- Fixed error when running
shards install
on Windows - Fixed compilation warning messages for Windows
- Fixed problems with Regexes due to PCRE conflicts
- Fixed problems with Anyolite on Crystal 1.5.1
- Unspecified arguments now always correctly throw warnings instead of confusing errors
- Fixed compiletime error when casting to
Char
- Fixed errors when passing certain name arguments to Macros for calling Ruby functions
- Fixed
Anyolite.call_rb_method_of_object
argumentargs
not being optional - Fixed linker error due to typo in mruby bindings for block functions
- Fixed crash when casting Ruby numbers into objects in some cases
- Fixed script lines not printing exceptions
- Fixed memory leak when calling Ruby scripts and script lines
- Updated tests to account for reworked
inspect
method for enums - Fixed errors when building Anyolite in a path with spaces
- Fixed problems on Linux when
LD
is set, butgcc
should compile - Fixed Crystal functions for accessing global variables in mruby
- Fixed Anyolite to allow enums with types different than
Int32
This release marks the first full release of Anyolite, mostly focussed on code quality, specs and bugfixes.
Anyolite.eval
can be used to get return values from script lines- Added check methods for Ruby references
- Compacted most macro function options into hashes
- Adds default
inspect
andto_s
methods to wrapped enums automatically - Updated mruby to 3.1.0 and MRI to 3.0.4
- Config files now require
rb_minor
argument for MRI specifically
- Closing an interpreter will now correctly clean class and type caches
- Fixed segmentation fault when overwriting Crystal content of a class
- Changed block cache to a stack to avoid overwriting it
- Completed all wiki entries
- Unit tests in test script
- Converted macro body variables to fresh variables wherever possible
- More compatibility between methods accepting
RbRef
andRbValue
- Fixed error when passing blocks to certain method types
- Methods
inspect
,to_s
andhash
will now correctly respond to annotations - Fixed UTF-8 problems in MRI tests
- Fixed crash on returning a
RbRef
- Added annotation to ignore class ancestors
- Renamed
master
branch tomain
- Changed internal representation of wrapped pointers
- Methods named
==
with no type specification will now returnfalse
instead of an error if types are incompatible
- Private ancestors will now be ignored automatically
- Fixed typo in keyword module function wrappers
- Added annotation
DefaultOptionalArgsToKeywordArgs
- Added option to include bytecode as an array at compiletime
- Added environment variable for changing the mruby config path
- Added more debug information
- Fixed argument error for block methods without arguments
- Fixed build error on Windows while running Github Actions
- Methods for undefining Ruby methods
- Excluding copy methods manually will undefine them from Ruby
- Checks for overflow when casting numbers
- Anyolite now respects exclusions of
dup
andclone
- Instance method exclude annotations on classes or modules will exclude them from all inheriting classes
- Include annotations can reverse global exclusions
- Ruby exceptions instead of Crystal exceptions for casting overflows
- Casting to
Number
in mruby produced wrong values
- Support for copying wrapped objects
- Ruby classes and modules can be obtained by name
- All classes and structs automatically wrap the Crystal
dup
function as a copy constructor - Updates in C glue functions
- Windows support for the default mruby implementation
- CI for MRI (on Linux)
- Fixed macro error for MRI
- Fixed documentation
- Full MRI Ruby as alternative implementation
- AnyolitePointer helper class for accessing pointers
- Infrastructure to convert script files into bytecode at runtime and compiletime
- Support for setting and getting instance, class and global variables from Crystal
- Changed
RClass*
toRClassPtr
to allow compatibility with MRI - Reorganized some macros
- Changed directory structure
- Several code changes for compatibility with MRI
- Block variables for functions definitions have now an underscore in front of them
- Option for defaulting to usage of RbValue as data container for regular arguments
- Alternate build paths are now passed to Anyolite via the environment variable
ANYOLITE_BUILD_PATH
- Error messages for problems when loading scripts or bytecode files
- Alternate build paths are not recognized properly in implementation files
- Fixed typo in name of
rb_str_to_cstr
- Fixed inconsistent usage of
rb
in many functions
- Automatic wrapping of inherited methods from all non-trivial ancestors
- Direct methods for Ruby error messages
- Usage of
self
as argument type is now allowed - Option to default to regular args for an entire class
- Renamed
wrap_superclass
toconnect_to_superclass
for clarity - Excluded wrapping of
dup
andclone
methods
- Better handling for abstract classes
- Correct handling of
inspect
,to_s
andhash
methods - Enum class method
parse?
is now wrapped automatically - Better error messages for invalid data pointers
- Default exclusion of unwrappable
<=
class methods for inherited classes - More consistent debug information
- Error message when trying to wrap slices (for now)
- Added default equality method for structs and enums
- Argument specialization was not possible for operator methods
- Fixed class method exclusions not being recognized
- Fixed config file parsing
- Fixed generic argument parsing for regular arguments
- Fixed error when converting some generics with default arguments
- Default arguments for numeric regular arguments were not processed correctly
- Fixed error when using unions in the style of
Bool?
at some points
RbRef
values can now be used as argument type- Class inheritance wrapping can be disabled
- Operator methods take arguments using the
ForceKeywordArg
annotations
- Boolean operator methods with default arguments could not be wrapped correctly
- Some wrappers had undocumented options
- Superclass hierarchies will be transferred to Ruby
- Wrapping will skip classes if their superclass was not yet wrapped
Anyolite.wrap
will run multiple tries to ensure superclasses being wrapped first- Classes will only be wrapped twice with
overwrite: true
option - Objects may check whether they are created in mruby
- Ability to call mruby methods for mruby objects from Crystal by their name
- Ability to call mruby class and module methods from Crystal
- Macros to get the Ruby equivalents of modules and classes
- Checks for Ruby method availability from within Crystal
- Caching of RbValues in the reference table to avoid duplicate objects
- Storing of pure Ruby objects in GC-safe containers
- Annotations to enable obtaining Ruby block arguments
- A method to call contained Ruby procs from their containers in Crystal
- Reference table now has a reference to the interpreter
- Interpreter and reference table operate together now
- Reference table system was reworked completely
- Updated documentation to new features from 0.10.0 and 0.11.0
- If nil is expected, cast everything to it without exceptions
- Simplified internal object casting
- Support for block arguments
- Support for array arguments
- Support for hash arguments
- Support for symbols, arrays and hashes as returned values
- Support for chars
- Experimental (unsafe) casting of pointers to integers and back
- Rename
convert_arg
toconvert_regular_arg
- Rename
convert_keyword_arg
toconvert_from_ruby_to_crystal
- Rename
convert_resolved_arg
toresolve_regular_arg
- Rename
convert_resolved_keyword_arg
toresolve_from_ruby_to_crystal
- Better error messages when casting incompatible values
- Added dummy argument parsing to convert type calls into actual types
- More intelligent conversions (Char <-> String, Int -> Float, Symbol -> String)
- Fixed reference table throwing an error when increasing counter
- Call rb_finalize only if reference counter is going to be 0
- Fixed union type parsing
- Removed possible error when casting unions
- Allow for a wrapped function to return nil by default
- Fixed broken documentation
- Additional compatibility layer between Anyolite and mruby
- More configuration options
- Renamed
MrbWrap
toAnyolite
- Renamed
MrbMacro
toAnyolite::Macro
- Renamed
mrb
andmruby
in the code torb
andruby
- Reworked configurations for the Rakefile into a class
- Dropped support for mruby 2
- Warning message when a reference table with values is reset
- Added pedantic setting for reference table (default)
- More reliable internal checks for union arguments
- Split macro source file into smaller parts
- Update documentation to new code
- Enums are now correctly tracked in the reference table
- Explicitly exclude pointers
- Explicitly exclude procs
- Added recompilation options for the Rakefile
- Fixed exception for class methods with empty regular argument list
- Allow operator methods for class and module methods
- Fixed path resolution for types starting with
::
- Resolve generics as arguments for generics properly
- Fix broken floats in mruby
- Uses mruby 3.0.0 by default
- Compatibility with mruby 2.1.2 requires additional flag
- Casting methods are more compatible between mruby versions
- Support for wrapping generics using annotations
- Non-keyword arguments allow for union and generic type arguments
- Annotation for non-keyword arguments accepts number as optional argument
- Non-keyword arguments need to be specialized explicitly
- More consistent wrapping of operator methods
- More helpful error messages when path resolution fails
- Specialization to new arguments did not allow non-keyword annotations
- Correct wrapping of most aliased types
- Methods with non-letter-symbols could not be wrapped
- Default arguments with colons were wrongly assumed to be keywords
- Enabled support for regular string argument with default values
- Fixed incomplete resolution of paths
- Non-public constructor methods could not be wrapped
- Wrappers for unions
- Wrappers for nilable objects
- Wrapping of specific functions has a more consistent syntax using Arrays instead of Hashes
- More useful compiletime errors for macros
- More information when encountering type casting errors
- Use Array(TypeDeclaration) instead of Hash for keywords in internal methods
- Cleaned up some code fragments
- Wrapped struct objects were immutable
- Support for enums
- Ability to rename classes and modules
- Empty argument list for specialization can be specified with nil
- Exclusion message for mruby methods, finalize and to_unsafe
- Exclusion of non-public methods
- Exclusion of to_unsafe
- Non-fatal runtime errors are triggered in mruby instead of Crystal
- Proper resolution of class and module hierarchies
- Method names in annotations can be given as strings
- More and better verbose information for wrapping
- Setters can be excluded correctly
- Manually wrapped properties work correctly now
- Correct handling of generic function arguments like Int, Number or Float
- Easier wrapping of classes and all of their methods and constants
- Annotation to exclude functions from wrapping
- Annotation to specialize functions for wrapping
- Annotation to rename wrapped functions
- Full wrapping of module and class hierarchies
- Function names with operators do not include the operator into the ruby name anymore
- Unified module and class cache
- Documentation updates for the new wrapping routines
- Functions with only an operator in their name can now be wrapped using
MrbWrap::Empty
- Nested classes and modules can now be wrapped reliably
- Crystal structs are wrapped using wrapper objects
- Struct hash values as object ID replacements are obsolete
- Option hash for reference table instead of flags
- Consistent naming for mruby hooks
- Structs with equal hash values do not interfere anymore
- MrbModule instances and Crystal modules can both be used in wrapper methods
- More options for adjusting reference table
- Fixed reference counter not increasing
- Added more debugging methods
- Allowed for custom object IDs by defining
mruby_object_id
for a class
- Fixed problems with struct wrapping
- Operator suffixes as general optional argument for MrbWrap functions
- Option to inspect reference table
- Reference counting in reference table
- Reference table can be cleared
- Fixed structs not being able to be wrapped
- Fixed example in documentation
- Fixed memory leak when returning nontrivial objects in mruby
- Removed constructor limitations for types being able to be used as return values
- Keyword argument support
- Support for optional keywords
- Casting from MrbValue objects to closest Crystal values
- Option to use a JSON config file
- Optional arguments are passed using tuples instead of
MrbWrap::Opt
- Class checks for arguments
- Checks for correct keyword classes
- Module cache analogous to the class cache
- Simplified some macro functions considerably
- Arguments can be specified consistently as arrays or standalone
- Documentation builds only for releases
- Uniform system for passing optional arguments
- Updated examples and documentation for keyword support
- Fixed erros when naming MrbState instances anything other than 'mrb'
- Added safeguards for reference table access
- Fixed mruby function return values not being cached
- Fixed minor documentation errors
- Basic structure
- Ubuntu support
- Wrappers for classes
- Wrappers for modules
- Support for classes in modules
- Wrappers for properties
- Wrappers for instance methods
- Wrappers for module and class methods
- Wrappers for constants
- Optional values for simple argument types
- Crystal GC respects the mruby GC
- Hooks for mruby object creation and deletion
- Simple examples
- Build tests
- Basic documentation