|
16 | 16 |
|
17 | 17 | package org.jacodb.ets.dsl |
18 | 18 |
|
| 19 | +import org.jacodb.ets.model.EtsAssignStmt |
| 20 | +import org.jacodb.ets.model.EtsClassSignature |
| 21 | +import org.jacodb.ets.model.EtsFieldSignature |
| 22 | +import org.jacodb.ets.model.EtsInstanceFieldRef |
| 23 | +import org.jacodb.ets.model.EtsLocal |
| 24 | +import org.jacodb.ets.model.EtsNumberConstant |
| 25 | +import org.jacodb.ets.model.EtsUnknownType |
19 | 26 | import org.jacodb.ets.utils.view |
20 | 27 |
|
21 | 28 | private fun main() { |
22 | 29 | val prog = program { |
| 30 | + // i := arg(0) |
23 | 31 | assign(local("i"), param(0)) |
24 | 32 |
|
| 33 | + // if (i > 10) |
25 | 34 | ifStmt(gt(local("i"), const(10))) { |
26 | 35 | ifStmt(eq(local("i"), const(42))) { |
| 36 | + // if (i == 42) { |
| 37 | + // return i |
27 | 38 | ret(local("i")) |
28 | 39 | }.elseIf(eq(local("i"), const(20))) { |
| 40 | + // } else if (i == 20) { |
| 41 | + // return i |
29 | 42 | ret(local("i")) |
30 | 43 | }.`else` { |
| 44 | + // } else { |
| 45 | + // i := 10 |
31 | 46 | assign(local("i"), const(10)) |
32 | 47 | } |
33 | 48 | nop() |
34 | 49 | } |
35 | 50 |
|
36 | 51 | label("loop") |
37 | 52 | ifStmt(gt(local("i"), const(0))) { |
| 53 | + // if (i > 0) { |
| 54 | + // i := i - 1 |
| 55 | + // goto @loop |
38 | 56 | assign(local("i"), sub(local("i"), const(1))) |
39 | 57 | goto("loop") |
40 | 58 | }.`else` { |
| 59 | + // } else { |
| 60 | + // return i |
41 | 61 | ret(local("i")) |
42 | 62 | } |
43 | 63 |
|
| 64 | + // x.foo := 35 |
| 65 | + customStmt { loc -> |
| 66 | + EtsAssignStmt( |
| 67 | + location = loc, |
| 68 | + lhv = EtsInstanceFieldRef( |
| 69 | + instance = EtsLocal("x", EtsUnknownType), |
| 70 | + field = EtsFieldSignature( |
| 71 | + enclosingClass = EtsClassSignature.UNKNOWN, |
| 72 | + name = "foo", |
| 73 | + type = EtsUnknownType, |
| 74 | + ), |
| 75 | + type = EtsUnknownType |
| 76 | + ), |
| 77 | + rhv = EtsNumberConstant(35.0) |
| 78 | + ) |
| 79 | + } |
| 80 | + |
44 | 81 | ret(const(100)) // unreachable |
45 | 82 | } |
46 | 83 |
|
|
0 commit comments