diff --git a/Project.toml b/Project.toml index 10d76ae7..e23890c8 100644 --- a/Project.toml +++ b/Project.toml @@ -5,6 +5,7 @@ version = "1.15.0" [deps] ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" +JuliaInterpreter = "aa1ae85d-cabe-5617-a682-6adf51b2e16a" InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" @@ -21,6 +22,7 @@ InverseFunctionsUnitfulExt = "InverseFunctions" Aqua = "0.6.3" ConstructionBase = "1" InverseFunctions = "0.1" +JuliaInterpreter = "0.9" julia = "1" [extras] diff --git a/src/Unitful.jl b/src/Unitful.jl index e8919035..ef8a02e1 100644 --- a/src/Unitful.jl +++ b/src/Unitful.jl @@ -26,6 +26,8 @@ import LinearAlgebra: Diagonal, Bidiagonal, Tridiagonal, SymTridiagonal import LinearAlgebra: istril, istriu, norm import Random +using JuliaInterpreter: JuliaInterpreter + export logunit, unit, absoluteunit, dimension, uconvert, ustrip, upreferred export @dimension, @derived_dimension, @refunit, @unit, @affineunit, @u_str export Quantity, DimensionlessQuantity, NoUnits, NoDims diff --git a/src/user.jl b/src/user.jl index 8df784c9..c4949759 100644 --- a/src/user.jl +++ b/src/user.jl @@ -659,7 +659,10 @@ julia> uparse("1.0*dB") """ function uparse(str; unit_context=Unitful) ex = Meta.parse(str) - eval(lookup_units(unit_context, ex)) + isa(ex, Symbol) && return lookup_units(unit_context, ex) + isa(ex, Number) && return lookup_units(unit_context, ex) + ex_processed = lookup_units(unit_context, ex) + return JuliaInterpreter.finish_and_return!(JuliaInterpreter.Frame(Unitful, ex_processed)) end const allowed_funcs = [:*, :/, :^, :sqrt, :√, :+, :-, ://]