@@ -47,7 +47,7 @@ class Prettify {
47
47
// TODO remove `:` here!
48
48
case Block(el):
49
49
// TODO depth!
50
- `{\n` + el.map(e => this.stringify(e)).join('\n') + `\n}`
50
+ return `{\n\t ` + el.map(e => this.stringify(e)).join('\n\t ') + `\n}`
51
51
52
52
/// `if condition[0], ...condition[n] { then } [else { otherwise }]`
53
53
case If(condition, then, otherwise, ternary):
@@ -103,19 +103,23 @@ class Prettify {
103
103
/// `(vars) retType => expr`
104
104
// TODO parser `: retType` is really needed at all?
105
105
case Arrow(expr, vars, retType):
106
+ var head = '(' + vars.map(v => this.stringify(v).substr(4)).join(', ') + ')'
107
+
106
108
if let retType = retType {
107
- return '(' + vars.map(v => this .stringify(v)).join(', ') + ') => ' + this.stringify(expr) + ': ' + NodeType.stringify(retType)
109
+ head += NodeType .stringify(retType) + ' => '
108
110
} else {
109
- return '(' + vars.map(v => this.stringify(v)).join(', ') + ') => ' + this.stringify(expr)
111
+ head += ' => '
110
112
}
111
113
114
+ return head + this.stringify(expr)
115
+
112
116
// // var Var[0], ..., Var[n]
113
117
// Vars(vars [Node])
114
118
//
115
119
/// `external class t extends extend implements implement { fields }`
116
120
// TODO IDE: hover over `(className)` in the pattern itself must show its type
117
121
case Class(className, extend, implement, fields, external, kind):
118
- return 'class ' + className + ' ' + (extend ? 'extends ' + extend : '') + ' ' + (implement ? 'implements ' + implement : '') + ' {\n' + fields.map(f => this.stringify(f)).join('\n') + '\n}'
122
+ return 'class ' + NodeType.stringify( className) + ' ' + (extend ? 'extends ' + extend : '') + (implement.length > 0 ? 'implements ' + implement : '') + ' {\n' + fields.map(f => this.stringify(f)).join('\n') + '\n}'
119
123
120
124
/// var name T { get { return x } set (v) {} }
121
125
// TODO .Var, .Function, .Function
@@ -140,7 +144,7 @@ class Prettify {
140
144
/// }
141
145
case Switch(inputs , expressions , guards , patterns ):
142
146
return 'switch ' + [for i in inputs.length this.stringify(inputs[i])].join(', ') + ' {\n' +
143
- [for i in patterns.length 'case ' + this.stringify(patterns [i]) + ': ' + this.stringify(expressions [i])].join('\n') + '\n}'
147
+ [for i in patterns.length 'case ' + this.stringify(expressions [i]) + ': ' + this.stringify(patterns [i])].join('\n') + '\n}'
144
148
145
149
/// module path[0].path[1].r..path[n] { el }
146
150
case Module(path , el ):
@@ -217,7 +221,7 @@ class Prettify {
217
221
case String(s):
218
222
// TODO quote types + mirror special symbols
219
223
let s = JSON.stringify(s)
220
- return "'\(s)'"
224
+ return s
221
225
case Ident(name): return name
222
226
case Bool(b): return b ? "true": "false"
223
227
case Int(s): return s.toString()
@@ -255,15 +259,28 @@ class Prettify {
255
259
}
256
260
return
257
261
(external ? 'declare ': '') +
258
- (const ? 'let ': 'var ') + name + ' ' + NodeType.stringify(t) + body
262
+ (const ? 'let ': 'var ') + name + (t != null? ' ' + NodeType.stringify(t) : '' ) + body
259
263
}
260
264
case Function(name, body, vars, returnType, external, variadic):
261
265
if name == null {
262
266
// TODO `// Anonymous`
263
267
return `fun`
264
268
}
265
269
266
- return 'fun ' + name
270
+ // TODO `new_SPACE_`?
271
+ let prefix = name == 'new'? 'new ': 'fun ' + name
272
+
273
+ var head = prefix + '(' + vars.map(v => this.stringify(v).substr(4)).join(', ') + ')'
274
+
275
+ if let returnType = returnType {
276
+ head += ' ' + NodeType.stringify(returnType)
277
+ }
278
+
279
+ if let body = body {
280
+ return head + ' ' + this.stringify(body)
281
+ }
282
+
283
+ return head
267
284
case _:
268
285
// TODO exhaustive
269
286
// console.error('stringify', node)
0 commit comments