Skip to content

Commit 61319d7

Browse files
Fixed problem with incidence reported for 'end'.
1 parent b9be72d commit 61319d7

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

src/Symbolic.jl

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ Examples of use can be found in TestSymbolic.jl
1010
"""
1111
module Symbolic
1212

13-
export removeBlock, makeDerVar, append, prepend, Incidence, findIncidence!, linearFactor, solveEquation,
13+
export removeBlock, removeQuoteNode, makeDerVar, append, prepend, Incidence, findIncidence!, linearFactor, solveEquation,
1414
isLinear, getCoefficients, substitute, removeUnits, resetEventCounters, getEventCounters, substituteForEvents
1515

1616
using Base.Meta: isexpr
17-
#using OrderedCollections
17+
using OrderedCollections
1818
using ModiaBase.Simplify
1919
using Unitful
2020
using Measurements
@@ -29,16 +29,33 @@ Remove :block with LineNumberNode from expressions
2929
* `return `e`: ex with :block removed
3030
"""
3131
removeBlock(ex) = ex
32-
#removeBlock(arr::Array{Any,1}) = [removeBlock(a) for a in arr]
32+
removeBlock(arr::Array{Any,1}) = [removeBlock(a) for a in arr]
3333
removeBlock(arr::Array{Expr,1}) = [removeBlock(a) for a in arr]
34+
removeBlock(q::QuoteNode) = q
35+
# if typeof(q.value) == Symbol; q.value else q end # begin print("QuoteNode: "); dump(q); q; end # q.value
36+
removeBlock(d::OrderedDict) = OrderedDict{Symbol, Any}([(k,removeBlock(v)) for (k,v) in d])
37+
3438
function removeBlock(ex::Expr)
35-
if isexpr(ex, :block) && typeof(ex.args[1]) == LineNumberNode && length(ex.args) == 2
39+
if isexpr(ex, :block) && length(ex.args) == 2 && typeof(ex.args[1]) == LineNumberNode
3640
ex.args[2]
41+
elseif isexpr(ex, :block) && length(ex.args) == 3 && typeof(ex.args[1]) == LineNumberNode && typeof(ex.args[2]) == LineNumberNode
42+
ex.args[3]
3743
else
3844
Expr(ex.head, [removeBlock(arg) for arg in ex.args]...)
3945
end
4046
end
4147

48+
removeQuoteNode(ex) = ex
49+
removeQuoteNode(arr::Array{Any,1}) = [removeQuoteNode(a) for a in arr]
50+
removeQuoteNode(arr::Array{Expr,1}) = [removeQuoteNode(a) for a in arr]
51+
removeQuoteNode(q::QuoteNode) = q.value
52+
# if typeof(q.value) == Symbol; q.value else q end # begin print("QuoteNode: "); dump(q); q; end # q.value
53+
removeQuoteNode(d::OrderedDict) = OrderedDict{Symbol, Any}([(k,removeQuoteNode(v)) for (k,v) in d])
54+
55+
function removeQuoteNode(ex::Expr)
56+
Expr(ex.head, [removeQuoteNode(arg) for arg in ex.args]...)
57+
end
58+
4259
prependPar(ex, prefix, parameters=[], inputs=[]) = ex
4360

4461
function prependPar(ex::Symbol, prefix, parameters=[], inputs=[])
@@ -237,7 +254,7 @@ Traverses an expression and finds incidences of Symbols and der(...)
237254
* `incidence`: array of incidences. New incidences of `ex` are pushed.
238255
"""
239256
findIncidence!(ex, incidence::Array{Incidence,1}) = nothing
240-
findIncidence!(s::Symbol, incidence::Array{Incidence,1}) = begin if s != :(:); push!(incidence, s) end end
257+
findIncidence!(s::Symbol, incidence::Array{Incidence,1}) = begin if ! (s in [:(:), :end]); push!(incidence, s) end end
241258
findIncidence!(arr::Array{Any,1}, incidence::Array{Incidence,1}) = [findIncidence!(a, incidence) for a in arr]
242259
findIncidence!(arr::Array{Expr,1}, incidence::Array{Incidence,1}) = [findIncidence!(a, incidence) for a in arr]
243260
function findIncidence!(ex::Expr, incidence::Array{Incidence,1})

0 commit comments

Comments
 (0)