Skip to content

Commit

Permalink
Redesigned implementation of builtin operators. elab only determines …
Browse files Browse the repository at this point in the history
…type and constant value properties. Ceval.ceval should be used to retrieve a value. The size operator has now been implemented using this new design. The other operators should also be implemented so. This code will probably destroy some parts of codegen, since size is not replace by functioncalls size_of_xxx_array, etc.

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@1031 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Peter Aronsson committed Nov 11, 2003
1 parent 265daab commit 6a56529
Show file tree
Hide file tree
Showing 11 changed files with 1,397 additions and 1,151 deletions.
15 changes: 9 additions & 6 deletions modeq/Makefile.in
Expand Up @@ -29,6 +29,7 @@ RTOBJ = runtime/systemimpl.o ../c_runtime/libc_runtime.a runtime/rtopts.o runt
SRCRML= absyn.rml \
algorithm.rml \
builtin.rml \
ceval.rml \
classinf.rml \
classloader.rml \
codegen.rml \
Expand Down Expand Up @@ -123,28 +124,30 @@ depend:

## dependencies
absyn.o: absyn.rml debug.sig dump.sig util.sig print.sig
algorithm.o: algorithm.rml exp.sig types.sig explode.sig print.sig
algorithm.o: algorithm.rml exp.sig types.sig explode.sig util.sig print.sig dump.sig debug.sig
builtin.o: builtin.rml absyn.sig explode.sig env.sig types.sig classinf.sig debug.sig print.sig
ceval.o: ceval.rml env.sig exp.sig interactive.sig values.sig staticexp.sig
classinf.o: classinf.rml explode.sig print.sig absyn.sig
classloader.o: classloader.rml absyn.sig system.sig lookup.sig interactive.sig util.sig parse.sig print.sig env.sig dump.sig
codegen.o: codegen.rml dae.sig print.sig dump.sig debug.sig absyn.sig algorithm.sig classinf.sig exp.sig modutil.sig types.sig util.sig inst.sig
connect.o: connect.rml exp.sig staticexp.sig dae.sig dump.sig print.sig
connect.o: connect.rml exp.sig staticexp.sig dae.sig env.sig dump.sig print.sig util.sig debug.sig
dae.o: dae.rml absyn.sig exp.sig algorithm.sig types.sig rtopts.sig graphviz.sig dump.sig print.sig util.sig
debug.o: debug.rml rtopts.sig dump.sig print.sig
dump.o: dump.rml absyn.sig interactive.sig debug.sig classinf.sig rtopts.sig print.sig util.sig
dumpgraphviz.o: dumpgraphviz.rml absyn.sig debug.sig graphviz.sig classinf.sig dump.sig
env.o: env.rml absyn.sig values.sig explode.sig types.sig classinf.sig exp.sig dump.sig graphviz.sig dae.sig print.sig
env.o: env.rml absyn.sig values.sig explode.sig types.sig classinf.sig exp.sig dump.sig graphviz.sig dae.sig print.sig util.sig system.sig
exp.o: exp.rml absyn.sig rtopts.sig util.sig print.sig
explode.o: explode.rml absyn.sig dump.sig debug.sig print.sig
graphviz.o: graphviz.rml
inst.o: inst.rml classinf.sig connect.sig dae.sig debug.sig env.sig exp.sig explode.sig mod.sig prefix.sig types.sig util.sig interactive.sig cache.sig absyn.sig algorithm.sig builtin.sig dump.sig lookup.sig modutil.sig rtopts.sig staticexp.sig values.sig print.sig system.sig
interactive.o: interactive.rml absyn.sig explode.sig dae.sig types.sig values.sig env.sig dump.sig debug.sig rtopts.sig util.sig parse.sig prefix.sig mod.sig lookup.sig classinf.sig exp.sig inst.sig staticexp.sig modutil.sig codegen.sig print.sig system.sig classloader.sig cache.sig
lookup.o: lookup.rml classinf.sig types.sig absyn.sig exp.sig env.sig explode.sig cache.sig parse.sig debug.sig dump.sig inst.sig mod.sig prefix.sig print.sig builtin.sig util.sig
lookup.o: lookup.rml classinf.sig types.sig absyn.sig exp.sig env.sig explode.sig cache.sig parse.sig debug.sig dump.sig inst.sig mod.sig prefix.sig print.sig builtin.sig util.sig modutil.sig
main.o: main.rml absyn.sig modutil.sig parse.sig dump.sig dumpgraphviz.sig explode.sig dae.sig inst.sig interactive.sig rtopts.sig debug.sig codegen.sig socket.sig print.sig
mod.o: mod.rml absyn.sig dae.sig env.sig exp.sig prefix.sig explode.sig types.sig staticexp.sig values.sig dump.sig debug.sig print.sig inst.sig
modsim.o: modsim.rml system.sig util.sig
modutil.o: modutil.rml absyn.sig dae.sig exp.sig algorithm.sig rtopts.sig util.sig print.sig
prefix.o: prefix.rml absyn.sig exp.sig env.sig lookup.sig util.sig print.sig
staticexp.o: staticexp.rml absyn.sig exp.sig explode.sig types.sig env.sig values.sig classinf.sig interactive.sig cache.sig dump.sig print.sig system.sig lookup.sig debug.sig inst.sig codegen.sig modutil.sig dae.sig util.sig rtopts.sig parse.sig classloader.sig mod.sig prefix.sig
staticexp.o: staticexp.rml absyn.sig exp.sig explode.sig types.sig env.sig values.sig classinf.sig interactive.sig cache.sig dump.sig print.sig system.sig lookup.sig debug.sig inst.sig codegen.sig modutil.sig dae.sig util.sig rtopts.sig parse.sig classloader.sig mod.sig prefix.sig modsim.sig
types.o: types.rml classinf.sig absyn.sig exp.sig values.sig explode.sig dump.sig debug.sig print.sig util.sig
util.o: util.rml
values.o: values.rml exp.sig print.sig system.sig util.sig
values.o: values.rml exp.sig absyn.sig print.sig system.sig util.sig dump.sig
86 changes: 85 additions & 1 deletion modeq/builtin.rml
Expand Up @@ -608,6 +608,47 @@ val array2real= (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(1)),(Types
(* Legal syntax: val array2one= (Types.T_FUNCTION([("x",(Types.T_ARRAY(1,(Types.T_REAL([]),NONE)),NONE))], TYPES.T_INTEGER) *)

(* For size(A) to transpose A *)
(* val array1dimint2array1dimint = ... already defined *)
val array2dimint2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(2)),(Types.T_INTEGER([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array3dimint2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(3)),(Types.T_INTEGER([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array4dimint2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(4)),(Types.T_INTEGER([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array5dimint2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(5)),(Types.T_INTEGER([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array6dimint2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(6)),(Types.T_INTEGER([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array7dimint2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(7)),(Types.T_INTEGER([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array8dimint2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(8)),(Types.T_INTEGER([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array9dimint2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(9)),(Types.T_INTEGER([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)

val array1dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array2dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(2)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array3dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(3)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array4dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(4)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array5dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(5)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array6dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(6)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array7dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(7)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array8dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(8)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array9dimreal2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(9)),(Types.T_REAL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)

val array1dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array2dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(2)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array3dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(3)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array4dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(4)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array5dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(5)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array6dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(6)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array7dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(7)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array8dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(8)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array9dimstring2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(9)),(Types.T_STRING([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)


val array1dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array2dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(2)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array3dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(3)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array4dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(4)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array5dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(5)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array6dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(6)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array7dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(7)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array8dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(8)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)
val array9dimbool2array1dimint = (Types.T_FUNCTION([("x",(Types.T_ARRAY(Types.DIM(SOME(9)),(Types.T_BOOL([]),NONE)),NONE))], (Types.T_ARRAY(Types.DIM(SOME(1)),(Types.T_INTEGER([]),NONE)),NONE)),NONE)

(*
val array2array= (Types.T_FUNCTION([("x",(Types.T_ARRAY)],
(Types.T_ARRAY),NONE)
Expand Down Expand Up @@ -778,7 +819,50 @@ relation initial_env =
Env.extend_frame_t(env, "size", array6dimbool2vectorint) => env &
Env.extend_frame_t(env, "size", array7dimbool2vectorint) => env &
Env.extend_frame_t(env, "size", array8dimbool2vectorint) => env &
Env.extend_frame_t(env, "scalar", array1dimint2int) => env &

(* size(A) *)
Env.extend_frame_t(env, "size", array1dimint2array1dimint) => env &
Env.extend_frame_t(env, "size", array2dimint2array1dimint) => env &
Env.extend_frame_t(env, "size", array3dimint2array1dimint) => env &
Env.extend_frame_t(env, "size", array4dimint2array1dimint) => env &
Env.extend_frame_t(env, "size", array5dimint2array1dimint) => env &
Env.extend_frame_t(env, "size", array6dimint2array1dimint) => env &
Env.extend_frame_t(env, "size", array7dimint2array1dimint) => env &
Env.extend_frame_t(env, "size", array8dimint2array1dimint) => env &
Env.extend_frame_t(env, "size", array9dimint2array1dimint) => env &

Env.extend_frame_t(env, "size", array1dimreal2array1dimint) => env &
Env.extend_frame_t(env, "size", array2dimreal2array1dimint) => env &
Env.extend_frame_t(env, "size", array3dimreal2array1dimint) => env &
Env.extend_frame_t(env, "size", array4dimreal2array1dimint) => env &
Env.extend_frame_t(env, "size", array5dimreal2array1dimint) => env &
Env.extend_frame_t(env, "size", array6dimreal2array1dimint) => env &
Env.extend_frame_t(env, "size", array7dimreal2array1dimint) => env &
Env.extend_frame_t(env, "size", array8dimreal2array1dimint) => env &
Env.extend_frame_t(env, "size", array9dimreal2array1dimint) => env &

Env.extend_frame_t(env, "size", array1dimstring2array1dimint) => env &
Env.extend_frame_t(env, "size", array2dimstring2array1dimint) => env &
Env.extend_frame_t(env, "size", array3dimstring2array1dimint) => env &
Env.extend_frame_t(env, "size", array4dimstring2array1dimint) => env &
Env.extend_frame_t(env, "size", array5dimstring2array1dimint) => env &
Env.extend_frame_t(env, "size", array6dimstring2array1dimint) => env &
Env.extend_frame_t(env, "size", array7dimstring2array1dimint) => env &
Env.extend_frame_t(env, "size", array8dimstring2array1dimint) => env &
Env.extend_frame_t(env, "size", array9dimstring2array1dimint) => env &

Env.extend_frame_t(env, "size", array1dimbool2array1dimint) => env &
Env.extend_frame_t(env, "size", array2dimbool2array1dimint) => env &
Env.extend_frame_t(env, "size", array3dimbool2array1dimint) => env &
Env.extend_frame_t(env, "size", array4dimbool2array1dimint) => env &
Env.extend_frame_t(env, "size", array5dimbool2array1dimint) => env &
Env.extend_frame_t(env, "size", array6dimbool2array1dimint) => env &
Env.extend_frame_t(env, "size", array7dimbool2array1dimint) => env &
Env.extend_frame_t(env, "size", array8dimbool2array1dimint) => env &
Env.extend_frame_t(env, "size", array9dimbool2array1dimint) => env &


Env.extend_frame_t(env, "scalar", array1dimint2int) => env &
Env.extend_frame_t(env, "scalar", array2dimint2int) => env &
Env.extend_frame_t(env, "scalar", array3dimint2int) => env &
Env.extend_frame_t(env, "scalar", array4dimint2int) => env &
Expand Down

0 comments on commit 6a56529

Please sign in to comment.