@@ -29,8 +29,8 @@ class PythonCgVariableConstructor(context_: CgContext) : CgVariableConstructor(c
29
29
is PythonBoolModel -> CgLiteral (model.classId, model.value)
30
30
is PythonPrimitiveModel -> CgLiteral (model.classId, model.value)
31
31
is PythonTreeModel -> {
32
- val ( value, children) = pythonBuildObject2(model.tree)
33
- CgPythonTree (model.classId, model.tree, value, children )
32
+ val value = pythonBuildObject2(model.tree)
33
+ CgPythonTree (model.classId, model.tree, value)
34
34
}
35
35
is PythonInitObjectModel -> constructInitObjectModel(model, baseName)
36
36
is PythonDictModel -> CgPythonDict (model.stores.map {
@@ -58,51 +58,45 @@ class PythonCgVariableConstructor(context_: CgContext) : CgVariableConstructor(c
58
58
}
59
59
}
60
60
61
- private fun pythonBuildObject2 (objectNode : PythonTree .PythonTreeNode ): Pair < CgValue , List < CgStatement >> {
61
+ private fun pythonBuildObject2 (objectNode : PythonTree .PythonTreeNode ): CgValue {
62
62
return when (objectNode) {
63
63
is PythonTree .PrimitiveNode -> {
64
- Pair ( CgLiteral (objectNode.type, objectNode.repr), emptyList() )
64
+ CgLiteral (objectNode.type, objectNode.repr)
65
65
}
66
66
67
67
is PythonTree .ListNode -> {
68
68
val items = objectNode.items.values.map { pythonBuildObject2(it) }
69
- Pair ( CgPythonList (items.map { it.first }), items.flatMap { it.second } )
69
+ CgPythonList (items)
70
70
}
71
71
72
72
is PythonTree .TupleNode -> {
73
73
val items = objectNode.items.values.map { pythonBuildObject2(it) }
74
- Pair ( CgPythonTuple (items.map { it.first }), items.flatMap { it.second } )
74
+ CgPythonTuple (items)
75
75
}
76
76
77
77
is PythonTree .SetNode -> {
78
78
val items = objectNode.items.map { pythonBuildObject2(it) }
79
- Pair ( CgPythonSet (items.map { it.first }. toSet()), items.flatMap { it.second } )
79
+ CgPythonSet (items.toSet())
80
80
}
81
81
82
82
is PythonTree .DictNode -> {
83
83
val keys = objectNode.items.keys.map { pythonBuildObject2(it) }
84
84
val values = objectNode.items.values.map { pythonBuildObject2(it) }
85
- Pair ( CgPythonDict (
86
- keys.zip(values).map { (key, value) ->
87
- key.first to value.first
88
- }.toMap()
89
- ), keys.flatMap { it.second } + values.flatMap { it.second })
85
+ CgPythonDict (
86
+ keys.zip(values).associate { (key, value) ->
87
+ key to value
88
+ }
89
+ )
90
90
}
91
91
92
92
is PythonTree .ReduceNode -> {
93
93
val id = objectNode.id
94
- val children = emptyList<CgStatement >().toMutableList()
95
94
if ((context.cgLanguageAssistant as PythonCgLanguageAssistant ).memoryObjects.containsKey(id)) {
96
- return Pair (
97
- (context.cgLanguageAssistant as PythonCgLanguageAssistant ).memoryObjects[id]!! ,
98
- children
99
- )
95
+ return (context.cgLanguageAssistant as PythonCgLanguageAssistant ).memoryObjects[id]!!
100
96
}
101
97
102
98
val initArgs = objectNode.args.map {
103
- val buildObj = pythonBuildObject2(it)
104
- children + = buildObj.second
105
- buildObj.first
99
+ pythonBuildObject2(it)
106
100
}
107
101
val constructor = ConstructorId (
108
102
objectNode.constructor ,
@@ -112,31 +106,27 @@ class PythonCgVariableConstructor(context_: CgContext) : CgVariableConstructor(c
112
106
val obj = newVar(objectNode.type) {
113
107
constructorCall
114
108
}
115
- children.add( CgAssignment ( obj, constructorCall))
109
+ // obj `=` constructorCall
116
110
117
111
(context.cgLanguageAssistant as PythonCgLanguageAssistant ).memoryObjects[id] = obj
118
112
119
113
val state = objectNode.state.map { (key, value) ->
120
114
val buildObj = pythonBuildObject2(value)
121
- children.addAll(buildObj.second)
122
- key to buildObj.first
115
+ key to buildObj
123
116
}.toMap()
124
117
val listitems = objectNode.listitems.map {
125
118
val buildObj = pythonBuildObject2(it)
126
- children.addAll(buildObj.second)
127
- buildObj.first
119
+ buildObj
128
120
}
129
121
val dictitems = objectNode.dictitems.map { (key, value) ->
130
122
val keyObj = pythonBuildObject2(key)
131
123
val valueObj = pythonBuildObject2(value)
132
- children.addAll(keyObj.second)
133
- children.addAll(valueObj.second)
134
- keyObj.first to valueObj.first
124
+ keyObj to valueObj
135
125
}
136
126
137
127
state.forEach { (key, value) ->
138
- val fieldAccess = CgFieldAccess (obj, FieldId (objectNode.type, key))
139
- children.add( CgAssignment (fieldAccess, value))
128
+ // val fieldAccess = CgFieldAccess(obj, FieldId(objectNode.type, key))
129
+ obj[ FieldId (objectNode.type, key)] ` = ` value
140
130
}
141
131
listitems.forEach {
142
132
val methodCall = CgMethodCall (
@@ -149,18 +139,18 @@ class PythonCgVariableConstructor(context_: CgContext) : CgVariableConstructor(c
149
139
),
150
140
listOf (it)
151
141
)
152
- children.add( methodCall)
142
+ + methodCall
153
143
}
154
144
dictitems.forEach { (key, value) ->
155
145
val index = CgPythonIndex (
156
146
value.type as PythonClassId ,
157
147
obj,
158
148
key
159
149
)
160
- children.add( CgAssignment ( index, value))
150
+ index ` = ` value
161
151
}
162
152
163
- return Pair ( obj, children)
153
+ return obj
164
154
}
165
155
166
156
else -> {
0 commit comments