- Binding generator can now be configured with custom library paths
- Binding generator can optimally wrap a field that has multiple possible types using the new @UnionOf annotation
- Binding generator can automatically generate permission checks using the new @AssertPermission annotation
- Support for automatically mapping the values of Futures and Streams in the binding generator
- Fix bugs related to imports in the binding generator
- Support for the dart:io
Process
class and its support classes - Added ProcessRunPermission and ProcessKillPermission to guard running and killing processes
- Expose base
Object
properties (eg toString, hashCode) for classes declared inside dart_eval - Type autowrappers can now be added to the runtime to expose any type
for automatic wrapping using
runtime.wrap()
. - Support for testing function equality
- Deprecated
runtime.wrapRecursive()
. Useruntime.wrap(recursive: true)
instead. - Optimized generated bytecode for string interpolation
- Fixed $Future.$reified to unwrap its value
- Fix error when accessing or setting nullable static class fields without an initializer
- Support for factory constructors in the binding generator
- Add $runtime Runtime getter to $Bridge mixin
- Support for runtime methods, static setters, type parameters, class inheritance, anonymous function types, and typedefs in the binding generator
- Add bindings for
MapEntry
,List.firstWhere()
, andHttpStatus
(thanks @Noobware1) - Fix boxing error on default function parameters (thanks @Noobware1)
- Support for redirecting constructors
- Fixed issue where tree-shaking would not always detect uses of symbols made visible by an export
- Fixed dart:io File constructor
- Better detection of main.dart files
- Fixed empty function bodies causing scope leakage
- Support for
Map.remove()
- Support for 'break' inside loops
- Support for constructor block bodies
- Allow changing the value of static class fields
- Fix various errors caused by tree-shaking bridge class data that is required to set up the runtime
- Fix error when setting values on Maps
- Create writeback-capable List wrapper. Use
$List.view()
with a type mapper function to create a view of an underlying List that can be written to. - Support for
$List.view
in the binding generator - Binding generator can now generate
configureForRuntime
methods - Support for static methods and getters in the binding generator
- Fix compile error with empty map literals
- Automatically resolve bridged superclass field references without 'this.'
- Fix broken implementation of Object.hashCode
- Fix return value boxing of equals and not equals operators
- Fix assigning enums in conditional expressions
- Fix error thrown by null assertion operator (thanks @Noobware1)
- Add bindings for
Error
,UnimplementedError
,UnsupportedError
, andStackTrace
(thanks @Noobware1) - Add bindings for
InternetAddress
andInternetAddressType
(thanks @Noobware1) - Support for calling
toString()
on dynamic types (thanks @Noobware1) - Support for
jsonEncode()
andjsonDecode()
(thanks @Noobware1)
- Fix error when setting a top-level variable
- Fix for-each loops that specify the type of the loop variable
- Allow exceptions to bubble up through an asynchronous gap
- Fix CLI error resolving URIs from a Dart package_config.json file (thanks @think-of-xiao)
- Support for
List.of()
,List.from()
, andList.removeWhere()
(thanks @Noobware1)
- Compiler now infers variable types when using the
if (x is Y)
pattern - Support for setters with a different type than getters / fields of the same name
- Support for return statements without a value
- Fix type resolution of super constructor parameters
- Support for most
Uri
methods and constructors (thanks @Noobware1 and @kodjodevf) - Support for
Base64Codec
,Base64Decoder
,Base64Encoder
,utf8.decode()
, andutf8.encode()
(thanks @kodjodevf) - Support for
Map.containsKey()
(thanks @DeleMike) - Support for
String.codeUnits
(thanks @Noobware1) - Support for
String.fromCharCodes
(thanks @kodejodevf) - Support for
ArgumentError
,StateError
, andStreamView
- Eliminate requirement to call setup() on the Runtime. Setup is now invoked automatically and the setup method is deprecated.
- Add experimental wrapper binding generator to the CLI (thanks to @a-wallen). See README for details and caveats.
- Add
[]
indexed getter for strings - Fix loop boxing/unboxing bugs
- Fix argument type of String.replaceAll()
- Fix error when trying to resolve a method on an enum
- Fix incorrect type inference of conditional and assignment expressions
- Make
RegExpMatch
bimodal
- (Breaking) Removed RuntimeTypes. All builtin types are referenced with CoreTypes/AsyncTypes etc now.
- (Breaking) Improve extension method syntax and make it the default for examples
- (Breaking) Added tree-shaking for dead code elimination. To ensure
a file is compiled you must add it as an entrypoint to the Compiler.
main.dart
is always an entrypoint. See README for details. - Support for compiling Pub packages in the CLI
- Support tryParse() and parse() for
num
andint
- Support Iterable.generate() and List.generate() (thanks @wrbl606)
- Support for ++i and --i prefix operators (thanks @wrbl606)
- Fix increment and decrement operations on list elements (thanks @wrbl606)
- Support for
RegExpMatch
and most RegExp methods (thanks @Noobware1) - Support for function type arguments and inferring generic return types based on argument types
- Support for Comparable
- Support invoking functions stored as fields in a class
- Add
identical
andObject.hash
functions - Basic support for
runtimeType
- Add Runtime.valueToString helper for converting a $Value to a string correctly
- Support for default positional parameters
- Use short-circuit evaluation for null coalescing operator
??
- Support for null-shorted method calls and property access
using
?.
- Support null assertion operator
!
- Fix type resolution with self-referential generic types such as
class T implements Comparable<T>
- Support for
rethrow
- Support for symbol literals
- Add bindings for
Exception
,RangeError
, andFormatException
- Add bindings for
Symbol
andZone
- Add bindings for
ByteBuffer
,TypedData
,ByteData
, andUint8List
from dart:typed_data - Add binding for
LinkedHashMap
from dart:collection - Improved performance by optimizing to static method calls and field accesses when the concrete type of a variable is known
- Fix super constructor parameter type resolution
- Fix various errors when using non-reserved language keywords as the name of a variable or function
- Fix incorrect type hint for String.contains()
- Fix top-level getters
- Fix named constructor calls using "new" or "const"
- Runtime errors now print out the scope stack for easier debugging
- Reformat line length to 80 for standardization with Dart ecosystem
- Documentation improvements
- Support for try/finally and try/catch/finally
- Fix numerous bugs related to exception handling
- Support for casting (
as
) - Support for asserts and
AssertionError
- Add magic constant and version to EVC bytecode to prevent errors.
- Fix for error when extending a bridge class
- Support for cascades
- Support for null coalescing assignment operator
??=
- Support for many
List
andIterable
methods (thanks @kodjodevf) - Fix error with do-while loops
- Fix scope leak when using arrow functions
- Fix properties not being properly boxed/unboxed when passed to a function
- Fix constructor field initializer boxing
- Improve test coverage
- Add topics to pubspec
- Hotfix to increase size of globals array in runtime
- Initial support for enums
- Fix null coalescing expression
- Support for bitwise int xor operator
- Support for optional positional and unspecified named parameters in function expressions and tearoffs
- Support for multiple catch clauses and
on
- $Map is now bimodal
- Fix for error when accessing values on a map returned from json.decode()
- Fix loops causing errors by attempting to repeatedly unbox variables declared outside the loop on each iteration
- Support for bitwise int operators
|
,&
,<<
, and>>
- Support for most DateTime functions, getters, and
parse
/tryParse
constructors (thanks @oneplus1000) - Support for ! and != operators (thanks @oneplus1000)
- Support for most Duration getters (thanks @oneplus1000)
- Support automatic await of Future return values in async functions
- Upgrade to analyzer v6
- Support Dart 3
- (Deprecated)
BridgeTypeRef.spec
, use the default constructor instead - (Breaking) The $runtimeType getter on $Value has been replaced with a $getRuntimeType method that accepts a Runtime argument.
- (Breaking) Many bridge types now use CoreTypes/AsyncTypes etc instead of RuntimeTypes. This allows specifying generic type arguments.
- (Breaking) EvalPlugin now uses the supertype
BridgeDeclarationRegistry
instead of Compiler in configureForCompile(). - (Breaking) Removed the typeMapper parameter from $Future. It was mostly useless and didn't support async/await. Use bimodal wrappers instead.
- Support for relative imports and exports
- Support for Streams and StreamController
- Support for dart:io filesystem and HTTP classes
- Basic support for try/catch and throw. Only 1 untyped catch clause is supported for now, and finally is unsupported.
- Support for ternary expressions
- Support for
is
type-test expressions - Basic support for RegExp
- Add a runtime permissions system to control access to dart:io. See the README for details.
- @RuntimeOverride annotations are now parsed at compile-time to create dynamic runtime overrides consumed by the runtime. See README for details.
- Support for Utf8Codec and JsonCodec
- Add BridgeSerializer, a class that can serialize bridge classes to JSON for use in the dart_eval CLI.
- Add an optional extensions syntax to make writing bridge classes
easier (thanks @canewsin). See
examples/dart_eval_extensions_syntax.dart
. - Add $Closure for an easier way to pass external functions as arguments
- Support modulo operator on numbers
- Add dart:math functions and constants
- Support for prefixed imports of top-level functions and constructors
- Very basic support for generic function types that simply resolves
them to
Function
- Improved code documentation (thanks @maxiee)
- Fix type inference using
await
- Added type inference for class fields
- Fix method resolution on top-level variables
- Fixed an bug where compilation could fail due to a null function offset (thanks @maxiee)
- Fixed a type inference error where bridged functions could resolve incorrectly to a unboxed return type
- Fixed empty list literals causing the compiler to stall
- Fixed bugs when accessing list elements from class methods and/or closures
- Add a feature support table to the README
- (Breaking) Use DartTypes.list instead of RuntimeTypes.listType in bridge class definitions.
- Support for Iterable and for-each
- Support for collection
for
- Fixes to branching logic
- Improved generic type inference
- Fix return value boxing in arrow functions
- Allow arrow function entrypoints in
eval()
- Remove dcli to eliminate many extraneous dependencies
- Improved documentation
- Bindings for most String methods (thanks to @maks)
- Support for super constructor params
- Support for plugins in the
eval()
method - Deprecated compilerSettings and runtimeSettings in
eval()
in favor of plugins - Support for nullable type annotations in argument lists
- Removed the
nullable
param from KnownMethodArg in favor of the newnullable
param in TypeRef - Improved many error messages to display filename and a code snippet
- Error messages about type assignments now disambuigate between types if they have the same name
- Support for class getters and setters
- Automatic default constructor when none is specified
- Fix prefixed imports causing other types to be unresolvable
- Allow null to be boxed
- Fix Maps without explicit type parameters
- Other bug fixes
- Propagate expected types from variable declarations and argument lists to the expressions they contain.
- Allow specifying doubles with int literals when the expected type is known
- Fix static bridge method return types being null
Note: EVC bytecode generated with this version may not be compatible with previous versions.
- Web support for both compiler and runtime
- Incremental parsing for faster recompilation
- New plugin system for bridge libraries to enable reusing a Compiler instance
- Support for tear-offs (top-level functions and methods within the current class only)
- Improve async/await
- Reduce size of generated bytecode
- Add bindings for the dart:math Point class
- Add Duration.zero and some other Duration static getters
- Support unary minus on ints and doubles
- Support for optional positional parameters on bridge classes
- Support for bridged static getters
- Support for top-level and class arrow functions
- Support for arrow function expressions
- CLI: allow invoking without
dart pub global run
- CLI: Improved ease of use and documentation
- CLI: Added support for JSON bindings
- Type arguments are now applied when extending a bridge class that declares a generic type parameter
BridgeTypeRef.ref
is now supported in limited cases for referencing generic class type parameters- Support for bridged getters
- Support for string interpolation
- The
eval()
method now lets you specify an output file path and does not automatically output a file if left unspecified - Fix broken sample in README (thanks @g123k)
- Fix analyzer version constraint
- Fix a potential crash when resolving common base types.
- Support for calling methods on a bridge class's supertype without having to declare the method on the subtype's declaration.
- Documentation improvements
- (Breaking) You must now specify the
bridge
orwrap
parameter in aBridgeClassDef
- (Breaking) You must now specify
isBridge: true
when registering a bridge class constructor withruntime.registerBridgeFunc()
- Support for bridged (only) enums
- Support for variable captures inside closures
- Support for implicit class field accesses including
this
andsuper
in closures - Bridge declarations are now merged with a Dart source file of the same URI, if one exists
- Basic support for top-level variables and static fields
- Support for bool literals and logical and/or
- Support
String.substring()
(thanks to @maks) - Now using continuous integration (thanks to @maks)
- Various bug fixes and code cleanups
- (Breaking) Modified public API for defining bridge classes. See Pub example.
- (Breaking) Relative import URIs may no longer work (it's unclear whether they worked before). Support will be re-added in a future release.
- (Deprecated)
Runtime.executeNamed()
is deprecated. UseRuntime.executeLib()
instead. - Compiler now uses graphs to compose libraries from imports, exports, and parts, and should now mostly follow the Dart spec.
- Partial support for
show
andhide
on imports and exports - Support defining
extends
,implements
, andwith
on bridge classes - Support for adding files to the compiler before compiling, for use in bridge libraries to enable exports.
- Add recursion guard for type resolution
- Partial support for anonymous functions and the Dart runtime type system
- New serializable interop descriptor classes to allow for code push in the future
- Runtime overrides
- Implement collection
if
for Lists - Support for
async
/await
via continuations, as well asFuture.then()
- Basic CLI
- Rebuilt from the ground up around the new DBC bytecode compiler
- Public API changes: see readme
- Massive performance improvements, up to 350x
- Support for the Dart type system (compile-time checks only)
- Refactor class system to support
super
- New simpler Bridge interop that also allows const classes
- Add support for
if
, basicfor
, number comparison operators, and postfix++
- Fix
+
,-
,*
, and/
operators - Improve performance significantly
- Make the Pub analyzer happy
- Add some Dartdoc comments
- Fix scoping
- Add support for List and Map types
- Create parser and interpreter
- Add interop