Yeah, I know, not strictly on topic, but I just got my expression
evaluator emitting correct uOps for a BASIC interpreter.
Anyway, a sequence like this:
Dim i(10, 20, 30) As Double
Dim j As Int
j=5
i(0,0,0)=i(1,2,3)+i(4,5,6)
Generates:
1 : EXEC_VAR_CREATE : Local [0] of type EVAR_SIGNED_INT
1 : EXEC_ASSIGN : Local [0](10) = 10
1 : EXEC_VAR_CREATE : Local [1] of type EVAR_SIGNED_INT
1 : EXEC_ASSIGN : Local [1](20) = 20
1 : EXEC_VAR_CREATE : Local [2] of type EVAR_SIGNED_INT
1 : EXEC_ASSIGN : Local [2](30) = 30
1 : EXEC_VAR_CREATE : Global [0] "i" of type EVAR_DOUBLE 3 dimensions
1 : EXEC_VAR_DELETE : Local [0]
1 : EXEC_VAR_DELETE : Local [1]
1 : EXEC_VAR_DELETE : Local [2]
2 : EXEC_VAR_CREATE : Global [1] "j" of type EVAR_SIGNED_INT
3 : EXEC_ASSIGN : Global [1](5) = 5
4 : EXEC_VAR_CREATE : Local [0] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [0](1) = 1
4 : EXEC_VAR_CREATE : Local [1] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [1](2) = 2
4 : EXEC_VAR_CREATE : Local [2] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [2](3) = 3
4 : EXEC_VAR_CREATE : Local [3] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [3](4) = 4
4 : EXEC_VAR_CREATE : Local [4] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [4](5) = 5
4 : EXEC_VAR_CREATE : Local [5] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [5](6) = 6
4 : EXEC_OP : Global [0](0.000000) "i" = Global [0](0.000000)
"i" + Global [0](0.000000) "i"
4 : EXEC_VAR_DELETE : Local [0]
4 : EXEC_VAR_DELETE : Local [1]
4 : EXEC_VAR_DELETE : Local [2]
4 : EXEC_VAR_DELETE
: Local [3]
4 : EXEC_VAR_DELETE : Local [4]
4 : EXEC_VAR_DELETE : Local [5]
Now, let's go for the nasty (believe it or not, the sequence of uOps it
generates is 100% correct):
Dim i(10, 20, 30) As Double
Dim j As Int
j=5
i(0,0,0)=i(1, i(7,8,9) * i(9,10,11) /i( i(5,2,1), 14*7/9, i(7,3,2)),14)+i(4*j +
7,5,6)
Generates:
1 : EXEC_VAR_CREATE : Local [0] of type EVAR_SIGNED_INT
1 : EXEC_ASSIGN : Local [0](10) = 10
1 : EXEC_VAR_CREATE : Local [1] of type EVAR_SIGNED_INT
1 : EXEC_ASSIGN : Local [1](20) = 20
1 : EXEC_VAR_CREATE : Local [2] of type EVAR_SIGNED_INT
1 : EXEC_ASSIGN : Local [2](30) = 30
1 : EXEC_VAR_CREATE : Global [0] "i" of type EVAR_DOUBLE 3 dimensions
1 : EXEC_VAR_DELETE : Local [0]
1 : EXEC_VAR_DELETE : Local [1]
1 : EXEC_VAR_DELETE : Local [2]
2 : EXEC_VAR_CREATE : Global [1] "j" of type EVAR_SIGNED_INT
3 : EXEC_ASSIGN : Global [1](5) = 5
4 : EXEC_VAR_CREATE : Local [0] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [0](1) = 1
4 : EXEC_VAR_CREATE : Local [1] of type EVAR_SIGNED_INT
4 : EXEC_VAR_CREATE : Local [2] of type EVAR_UNSPECIFIED
4 : EXEC_VAR_CREATE : Local [3] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [3](7) = 7
4 : EXEC_VAR_CREATE : Local [4] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [4](8) = 8
4 : EXEC_VAR_CREATE : Local [5] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [5](9) = 9
4 : EXEC_VAR_CREATE : Local [6] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [6](9) = 9
4 : EXEC_VAR_CREATE : Local [7] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [7](10) = 10
4 : EXEC_VAR_CREATE : Local [8] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [8](11) = 11
4 : EXEC_OP : Local [2](0.000000) = Global [0](0.000000) "i" *
Global [0](0.000000) "i"
4 : EXEC_VAR_DELETE : Local [3]
4 : EXEC_VAR_DELETE : Local [4]
4 : EXEC_VAR_DELETE : Local [5]
4 : EXEC_VAR_DELETE : Local [6]
4 : EXEC_VAR_DELETE : Local [7]
4 : EXEC_VAR_DELETE : Local [8]
4 : EXEC_VAR_CREATE : Local [3] of type EVAR_SIGNED_INT
4 : EXEC_VAR_CREATE : Local [4] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [4](5) = 5
4 : EXEC_VAR_CREATE : Local [5] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [5](2) = 2
4 : EXEC_VAR_CREATE : Local [6] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [6](1) = 1
4 : EXEC_ASSIGN : Local [3](0) = Global [0](0.000000) "i"
4 : EXEC_VAR_DELETE : Local [4]
4 : EXEC_VAR_DELETE : Local [5]
4 : EXEC_VAR_DELETE : Local [6]
4 : EXEC_VAR_CREATE : Local [4] of type EVAR_SIGNED_INT
4 : EXEC_VAR_CREATE : Local [5] of type EVAR_UNSPECIFIED
4 : EXEC_OP : Local [5](98) = 14 * 7
4 : EXEC_OP : Local [4](10) = Local [5](98) / (FP) 9
4 : EXEC_VAR_DELETE : Local [5]
4 : EXEC_VAR_CREATE : Local [5] of type EVAR_SIGNED_INT
4 : EXEC_VAR_CREATE : Local [6] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [6](7) = 7
4 : EXEC_VAR_CREATE : Local [7] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [7](3) = 3
4 : EXEC_VAR_CREATE : Local [8] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [8](2) = 2
4 : EXEC_ASSIGN : Local [5](0) = Global [0](0.000000) "i"
4 : EXEC_VAR_DELETE : Local [6]
4 : EXEC_VAR_DELETE : Local [7]
4 : EXEC_VAR_DELETE : Local [8]
4 : EXEC_OP : Local [1](0) = Local [2](0.000000) / (FP) Global
[0](0.000000) "i"
4 : EXEC_VAR_DELETE : Local [3]
4 : EXEC_VAR_DELETE : Local [4]
4 : EXEC_VAR_DELETE : Local [5]
4 : EXEC_VAR_DELETE : Local [2]
4 : EXEC_VAR_CREATE : Local [2] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [2](14) = 14
4 : EXEC_VAR_CREATE : Local [3] of type EVAR_SIGNED_INT
4 : EXEC_VAR_CREATE : Local [4] of type EVAR_UNSPECIFIED
4 : EXEC_OP : Local [4](20) = 4 * Global [1](5)
4 : EXEC_OP : Local [3](27) = Local [4](20) + 7
4 : EXEC_VAR_DELETE : Local [4]
4 : EXEC_VAR_CREATE : Local [4] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [4](5) = 5
4 : EXEC_VAR_CREATE : Local [5] of type EVAR_SIGNED_INT
4 : EXEC_ASSIGN : Local [5](6) = 6
4 : EXEC_OP : Global [0](0.000000) "i" = Global [0](0.000000)
"i" + Global [0](0.000000) "i"
4 : EXEC_VAR_DELETE : Local [0]
4 : EXEC_VAR_DELETE : Local [1]
4 : EXEC_VAR_DELETE : Local [2]
4 : EXEC_VAR_DELETE : Local [3]
4 : EXEC_VAR_DELETE : Local [4]
4 : EXEC_VAR_DELETE : Local [5]
So yes, folks, you too can write lousy code and we'll still run it. ;-)
The final values being pulled from (and written to) the arrays aren't
working yet, but they will soon...
-->Neil
----------------------------------------------------------------------------
C. Neil Bradley - KE7IXP - The one eyed man in the land of the blind is not
king. He's a prisoner.