pearc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,644 @@
1
+ "use strict";
2
+ // Pear Language Code Generator
3
+ // Transforms AST → C source code
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.CodeGenerator = void 0;
6
+ exports.generate = generate;
7
+ // Types that need stdint.h
8
+ const STDINT_TYPES = new Set(['int8_t', 'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t', 'uint64_t']);
9
+ // Types that need stdbool.h
10
+ const STDBOOL_TYPES = new Set(['bool']);
11
+ // Types that need stddef.h (size_t) — often included via stdio/stdlib
12
+ const STDDEF_TYPES = new Set(['size_t']);
13
+ class CodeGenerator {
14
+ constructor() {
15
+ this.output = [];
16
+ this.indent = 0;
17
+ this.needsStdint = false;
18
+ this.needsStdbool = false;
19
+ this.hasStdint = false;
20
+ this.hasStdbool = false;
21
+ }
22
+ generate(program) {
23
+ // First pass: detect required headers
24
+ this.detectRequiredHeaders(program);
25
+ // Generate each top-level node
26
+ for (const node of program.body) {
27
+ this.genNode(node);
28
+ }
29
+ // Prepend missing headers
30
+ const headers = [];
31
+ if (this.needsStdint && !this.hasStdint)
32
+ headers.push('#include <stdint.h>');
33
+ if (this.needsStdbool && !this.hasStdbool)
34
+ headers.push('#include <stdbool.h>');
35
+ const code = this.output.join('');
36
+ if (headers.length > 0) {
37
+ return headers.join('\n') + '\n' + code;
38
+ }
39
+ return code;
40
+ }
41
+ detectRequiredHeaders(node) {
42
+ if (!node || typeof node !== 'object')
43
+ return;
44
+ if ('kind' in node) {
45
+ switch (node.kind) {
46
+ case 'Program':
47
+ node.body.forEach(n => this.detectRequiredHeaders(n));
48
+ break;
49
+ case 'IncludeDirective': {
50
+ const inc = node;
51
+ if (inc.path === '<stdint.h>' || inc.path === '"stdint.h"')
52
+ this.hasStdint = true;
53
+ if (inc.path === '<stdbool.h>' || inc.path === '"stdbool.h"')
54
+ this.hasStdbool = true;
55
+ break;
56
+ }
57
+ case 'VarDecl': {
58
+ const vd = node;
59
+ this.checkTypeForHeaders(vd.type);
60
+ if (vd.init)
61
+ this.detectRequiredHeaders(vd.init);
62
+ break;
63
+ }
64
+ case 'FunctionDecl': {
65
+ const fd = node;
66
+ this.checkTypeForHeaders(fd.returnType);
67
+ fd.params.forEach(p => this.checkTypeForHeaders(p.type));
68
+ if (fd.body)
69
+ this.detectRequiredHeaders(fd.body);
70
+ break;
71
+ }
72
+ case 'StructDecl':
73
+ case 'UnionDecl': {
74
+ const sd = node;
75
+ sd.fields.forEach(f => this.checkTypeForHeaders(f.type));
76
+ break;
77
+ }
78
+ case 'BlockStmt':
79
+ node.body.forEach(n => this.detectRequiredHeaders(n));
80
+ break;
81
+ case 'IfStmt': {
82
+ const is = node;
83
+ this.detectRequiredHeaders(is.condition);
84
+ this.detectRequiredHeaders(is.consequent);
85
+ if (is.alternate)
86
+ this.detectRequiredHeaders(is.alternate);
87
+ break;
88
+ }
89
+ case 'ReturnStmt':
90
+ if (node.value)
91
+ this.detectRequiredHeaders(node.value);
92
+ break;
93
+ case 'ExprStmt':
94
+ this.detectRequiredHeaders(node.expr);
95
+ break;
96
+ case 'ForStmt': {
97
+ const fs = node;
98
+ if (fs.init)
99
+ this.detectRequiredHeaders(fs.init);
100
+ if (fs.condition)
101
+ this.detectRequiredHeaders(fs.condition);
102
+ if (fs.update)
103
+ this.detectRequiredHeaders(fs.update);
104
+ this.detectRequiredHeaders(fs.body);
105
+ break;
106
+ }
107
+ case 'WhileStmt':
108
+ this.detectRequiredHeaders(node.condition);
109
+ this.detectRequiredHeaders(node.body);
110
+ break;
111
+ default:
112
+ break;
113
+ }
114
+ }
115
+ }
116
+ checkTypeForHeaders(type) {
117
+ if (STDINT_TYPES.has(type.base))
118
+ this.needsStdint = true;
119
+ if (STDBOOL_TYPES.has(type.base))
120
+ this.needsStdbool = true;
121
+ }
122
+ emit(s) {
123
+ this.output.push(s);
124
+ }
125
+ emitIndent() {
126
+ this.emit(' '.repeat(this.indent));
127
+ }
128
+ // Format a type for C output
129
+ // In C: qualifiers + base + pointers
130
+ // For declarations we need: type varname or type *varname
131
+ formatType(type, varName = '', forParam = false) {
132
+ const parts = [];
133
+ if (type.isStatic && !forParam)
134
+ parts.push('static');
135
+ if (type.isExtern && !forParam)
136
+ parts.push('extern');
137
+ if (type.isInline && !forParam)
138
+ parts.push('inline');
139
+ if (type.isConst)
140
+ parts.push('const');
141
+ if (type.isVolatile)
142
+ parts.push('volatile');
143
+ parts.push(type.base);
144
+ let ptr = '*'.repeat(type.pointers);
145
+ if (ptr && type.isConst) {
146
+ // const pointer: type * const varname
147
+ // For simplicity, just put const before type
148
+ }
149
+ let name = varName ? ' ' + ptr + varName : (ptr ? ' ' + ptr : '');
150
+ if (type.arraySize) {
151
+ const sizeStr = this.genExprStr(type.arraySize);
152
+ name = (varName ? ' ' + ptr + varName : '') + '[' + sizeStr + ']';
153
+ }
154
+ else if (ptr && !varName) {
155
+ name = ' ' + ptr;
156
+ }
157
+ return parts.join(' ') + name;
158
+ }
159
+ genNode(node) {
160
+ switch (node.kind) {
161
+ case 'Program':
162
+ node.body.forEach(n => this.genNode(n));
163
+ break;
164
+ case 'IncludeDirective':
165
+ this.emit('#include ' + node.path + '\n');
166
+ break;
167
+ case 'DefineDirective': {
168
+ const def = node;
169
+ if (def.params !== null) {
170
+ this.emit('#define ' + def.name + '(' + def.params.join(',') + ') ' + def.body + '\n');
171
+ }
172
+ else {
173
+ this.emit('#define ' + def.name + (def.body ? ' ' + def.body : '') + '\n');
174
+ }
175
+ break;
176
+ }
177
+ case 'PragmaDirective':
178
+ this.emit('#pragma ' + node.value + '\n');
179
+ break;
180
+ case 'IncludeGuardStart': {
181
+ const ig = node;
182
+ this.emit('#ifndef ' + ig.name + '\n');
183
+ this.emit('#define ' + ig.name + '\n');
184
+ break;
185
+ }
186
+ case 'IncludeGuardEnd':
187
+ this.emit('#endif\n');
188
+ break;
189
+ case 'RawPreprocessor':
190
+ this.emit(node.text + '\n');
191
+ break;
192
+ case 'FunctionDecl':
193
+ this.genFunction(node);
194
+ break;
195
+ case 'StructDecl':
196
+ this.genStruct(node);
197
+ break;
198
+ case 'UnionDecl':
199
+ this.genUnion(node);
200
+ break;
201
+ case 'EnumDecl':
202
+ this.genEnum(node);
203
+ break;
204
+ case 'TypedefDecl':
205
+ this.genTypedef(node);
206
+ break;
207
+ case 'VarDecl':
208
+ this.emitIndent();
209
+ this.genVarDecl(node);
210
+ this.emit(';\n');
211
+ break;
212
+ case 'BlockStmt':
213
+ this.genBlock(node);
214
+ break;
215
+ case 'IfStmt':
216
+ this.genIf(node);
217
+ break;
218
+ case 'ForStmt':
219
+ this.genFor(node);
220
+ break;
221
+ case 'WhileStmt':
222
+ this.emitIndent();
223
+ this.emit('while(');
224
+ this.emit(this.genExprStr(node.condition));
225
+ this.emit(')');
226
+ this.genBodyStmt(node.body);
227
+ break;
228
+ case 'DoWhileStmt':
229
+ this.emitIndent();
230
+ this.emit('do');
231
+ this.genBodyStmt(node.body, true);
232
+ this.emit('while(');
233
+ this.emit(this.genExprStr(node.condition));
234
+ this.emit(');\n');
235
+ break;
236
+ case 'SwitchStmt':
237
+ this.emitIndent();
238
+ this.emit('switch(');
239
+ this.emit(this.genExprStr(node.expr));
240
+ this.emit(')');
241
+ this.genBodyStmt(node.body);
242
+ break;
243
+ case 'CaseStmt': {
244
+ const cs = node;
245
+ this.emitIndent();
246
+ this.emit('case ' + this.genExprStr(cs.value) + ':\n');
247
+ this.indent++;
248
+ cs.body.forEach(s => this.genNode(s));
249
+ this.indent--;
250
+ break;
251
+ }
252
+ case 'DefaultStmt': {
253
+ const ds = node;
254
+ this.emitIndent();
255
+ this.emit('default:\n');
256
+ this.indent++;
257
+ ds.body.forEach(s => this.genNode(s));
258
+ this.indent--;
259
+ break;
260
+ }
261
+ case 'ReturnStmt': {
262
+ const rs = node;
263
+ this.emitIndent();
264
+ if (rs.value) {
265
+ this.emit('return ' + this.genExprStr(rs.value) + ';\n');
266
+ }
267
+ else {
268
+ this.emit('return;\n');
269
+ }
270
+ break;
271
+ }
272
+ case 'BreakStmt':
273
+ this.emitIndent();
274
+ this.emit('break;\n');
275
+ break;
276
+ case 'ContinueStmt':
277
+ this.emitIndent();
278
+ this.emit('continue;\n');
279
+ break;
280
+ case 'GotoStmt':
281
+ this.emitIndent();
282
+ this.emit('goto ' + node.label + ';\n');
283
+ break;
284
+ case 'LabelStmt': {
285
+ const ls = node;
286
+ this.emit(ls.label + ':\n');
287
+ this.genNode(ls.body);
288
+ break;
289
+ }
290
+ case 'ExprStmt':
291
+ this.emitIndent();
292
+ this.emit(this.genExprStr(node.expr) + ';\n');
293
+ break;
294
+ default:
295
+ // Expression node used as statement
296
+ if ('kind' in node) {
297
+ const n = node;
298
+ this.emitIndent();
299
+ this.emit(this.genExprStr(n) + ';\n');
300
+ }
301
+ break;
302
+ }
303
+ }
304
+ genBodyStmt(body, forDoWhile = false) {
305
+ if (body.kind === 'BlockStmt') {
306
+ if (forDoWhile) {
307
+ this.emit('{\n');
308
+ this.indent++;
309
+ body.body.forEach(s => this.genNode(s));
310
+ this.indent--;
311
+ this.emitIndent();
312
+ this.emit('}');
313
+ }
314
+ else {
315
+ this.emit('{\n');
316
+ this.indent++;
317
+ body.body.forEach(s => this.genNode(s));
318
+ this.indent--;
319
+ this.emitIndent();
320
+ this.emit('}\n');
321
+ }
322
+ }
323
+ else {
324
+ if (forDoWhile) {
325
+ this.emit('\n');
326
+ this.indent++;
327
+ this.genNode(body);
328
+ this.indent--;
329
+ this.emitIndent();
330
+ }
331
+ else {
332
+ this.emit('\n');
333
+ this.indent++;
334
+ this.genNode(body);
335
+ this.indent--;
336
+ }
337
+ }
338
+ }
339
+ genVarDecl(vd) {
340
+ const qualParts = [];
341
+ vd.qualifiers.forEach(q => {
342
+ if (q === 'sc')
343
+ qualParts.push('static');
344
+ else if (q === 'ex')
345
+ qualParts.push('extern');
346
+ else if (q === 'in')
347
+ qualParts.push('inline');
348
+ else if (q === 'cn')
349
+ qualParts.push('const');
350
+ else if (q === 'vl')
351
+ qualParts.push('volatile');
352
+ else
353
+ qualParts.push(q);
354
+ });
355
+ const typeStr = this.formatType(vd.type, vd.name);
356
+ const prefix = qualParts.length ? qualParts.join(' ') + ' ' : '';
357
+ this.emit(prefix + typeStr);
358
+ if (vd.init) {
359
+ this.emit('=' + this.genExprStr(vd.init));
360
+ }
361
+ }
362
+ genFunction(fd) {
363
+ const qualParts = [];
364
+ if (fd.qualifiers) {
365
+ fd.qualifiers.forEach(q => {
366
+ if (q === 'sc')
367
+ qualParts.push('static');
368
+ else if (q === 'in')
369
+ qualParts.push('inline');
370
+ else
371
+ qualParts.push(q);
372
+ });
373
+ }
374
+ if (fd.returnType.isStatic)
375
+ qualParts.push('static');
376
+ if (fd.returnType.isInline)
377
+ qualParts.push('inline');
378
+ if (fd.returnType.isExtern)
379
+ qualParts.push('extern');
380
+ const retTypeStr = this.formatType({ ...fd.returnType, isStatic: false, isInline: false, isExtern: false });
381
+ const prefix = qualParts.length ? qualParts.join(' ') + ' ' : '';
382
+ const params = fd.params.map(p => {
383
+ if (p.isVararg)
384
+ return '...';
385
+ return this.formatType(p.type, p.name, true);
386
+ }).join(',');
387
+ this.emit(prefix + retTypeStr + ' ' + fd.name + '(' + params + ')');
388
+ if (fd.body) {
389
+ this.emit('{\n');
390
+ this.indent++;
391
+ fd.body.body.forEach(s => this.genNode(s));
392
+ this.indent--;
393
+ this.emit('}\n');
394
+ }
395
+ else {
396
+ this.emit(';\n');
397
+ }
398
+ }
399
+ genStruct(sd) {
400
+ const name = sd.name ?? '';
401
+ if (sd.isTypedef) {
402
+ this.emit('typedef struct ' + name + '{\n');
403
+ }
404
+ else {
405
+ this.emit('struct ' + name + '{\n');
406
+ }
407
+ this.indent++;
408
+ sd.fields.forEach(f => {
409
+ this.emitIndent();
410
+ this.emit(this.formatType(f.type, f.name));
411
+ if (f.bitfield)
412
+ this.emit(':' + this.genExprStr(f.bitfield));
413
+ this.emit(';\n');
414
+ });
415
+ this.indent--;
416
+ if (sd.isTypedef && sd.typedefName) {
417
+ this.emit('} ' + sd.typedefName + ';\n');
418
+ }
419
+ else {
420
+ this.emit('};\n');
421
+ }
422
+ }
423
+ genUnion(ud) {
424
+ const name = ud.name ?? '';
425
+ if (ud.isTypedef) {
426
+ this.emit('typedef union ' + name + '{\n');
427
+ }
428
+ else {
429
+ this.emit('union ' + name + '{\n');
430
+ }
431
+ this.indent++;
432
+ ud.fields.forEach(f => {
433
+ this.emitIndent();
434
+ this.emit(this.formatType(f.type, f.name));
435
+ this.emit(';\n');
436
+ });
437
+ this.indent--;
438
+ if (ud.isTypedef && ud.typedefName) {
439
+ this.emit('} ' + ud.typedefName + ';\n');
440
+ }
441
+ else {
442
+ this.emit('};\n');
443
+ }
444
+ }
445
+ genEnum(ed) {
446
+ const name = ed.name ?? '';
447
+ if (ed.isTypedef) {
448
+ this.emit('typedef enum ' + name + '{\n');
449
+ }
450
+ else {
451
+ this.emit('enum ' + name + '{\n');
452
+ }
453
+ this.indent++;
454
+ ed.members.forEach((m, i) => {
455
+ this.emitIndent();
456
+ this.emit(m.name);
457
+ if (m.value)
458
+ this.emit('=' + this.genExprStr(m.value));
459
+ if (i < ed.members.length - 1)
460
+ this.emit(',');
461
+ this.emit('\n');
462
+ });
463
+ this.indent--;
464
+ if (ed.isTypedef && ed.typedefName) {
465
+ this.emit('} ' + ed.typedefName + ';\n');
466
+ }
467
+ else {
468
+ this.emit('};\n');
469
+ }
470
+ }
471
+ genTypedef(td) {
472
+ const inner = td.inner;
473
+ if (inner.kind === 'VarDecl') {
474
+ const vd = inner;
475
+ this.emit('typedef ' + this.formatType(vd.type) + ' ' + td.alias + ';\n');
476
+ }
477
+ else {
478
+ this.genNode(inner);
479
+ }
480
+ }
481
+ genBlock(block) {
482
+ this.emit('{\n');
483
+ this.indent++;
484
+ block.body.forEach(s => this.genNode(s));
485
+ this.indent--;
486
+ this.emitIndent();
487
+ this.emit('}\n');
488
+ }
489
+ genIf(is) {
490
+ this.emitIndent();
491
+ this.emit('if(' + this.genExprStr(is.condition) + ')');
492
+ if (is.consequent.kind === 'BlockStmt') {
493
+ this.emit('{\n');
494
+ this.indent++;
495
+ is.consequent.body.forEach(s => this.genNode(s));
496
+ this.indent--;
497
+ this.emitIndent();
498
+ this.emit('}');
499
+ }
500
+ else {
501
+ this.emit('\n');
502
+ this.indent++;
503
+ this.genNode(is.consequent);
504
+ this.indent--;
505
+ this.emitIndent();
506
+ }
507
+ if (is.alternate) {
508
+ if (is.alternate.kind === 'IfStmt') {
509
+ this.emit('else ');
510
+ this.indent = this.indent; // no change
511
+ // inline the else-if without indent prefix
512
+ const savedOutput = this.output;
513
+ this.output = [];
514
+ this.genIf(is.alternate);
515
+ const elseIfStr = this.output.join('').trimStart();
516
+ this.output = savedOutput;
517
+ this.emit(elseIfStr);
518
+ return;
519
+ }
520
+ else if (is.alternate.kind === 'BlockStmt') {
521
+ this.emit('else{\n');
522
+ this.indent++;
523
+ is.alternate.body.forEach(s => this.genNode(s));
524
+ this.indent--;
525
+ this.emitIndent();
526
+ this.emit('}\n');
527
+ }
528
+ else {
529
+ this.emit('else\n');
530
+ this.indent++;
531
+ this.genNode(is.alternate);
532
+ this.indent--;
533
+ }
534
+ }
535
+ else {
536
+ this.emit('\n');
537
+ }
538
+ }
539
+ genFor(fs) {
540
+ this.emitIndent();
541
+ this.emit('for(');
542
+ if (fs.init) {
543
+ if (fs.init.kind === 'VarDecl') {
544
+ const vd = fs.init;
545
+ this.emit(this.formatType(vd.type, vd.name));
546
+ if (vd.init)
547
+ this.emit('=' + this.genExprStr(vd.init));
548
+ }
549
+ else if (fs.init.kind === 'ExprStmt') {
550
+ this.emit(this.genExprStr(fs.init.expr));
551
+ }
552
+ }
553
+ this.emit(';');
554
+ if (fs.condition)
555
+ this.emit(this.genExprStr(fs.condition));
556
+ this.emit(';');
557
+ if (fs.update)
558
+ this.emit(this.genExprStr(fs.update));
559
+ this.emit(')');
560
+ if (fs.body.kind === 'BlockStmt') {
561
+ this.emit('{\n');
562
+ this.indent++;
563
+ fs.body.body.forEach(s => this.genNode(s));
564
+ this.indent--;
565
+ this.emitIndent();
566
+ this.emit('}\n');
567
+ }
568
+ else {
569
+ this.emit('\n');
570
+ this.indent++;
571
+ this.genNode(fs.body);
572
+ this.indent--;
573
+ }
574
+ }
575
+ // Generate expression as a string (no side effects on output buffer)
576
+ genExprStr(expr) {
577
+ switch (expr.kind) {
578
+ case 'NumberLiteral': return expr.value;
579
+ case 'StringLiteral': return expr.value;
580
+ case 'CharLiteral': return expr.value;
581
+ case 'BoolLiteral': return expr.value ? 'true' : 'false';
582
+ case 'NullLiteral': return 'NULL';
583
+ case 'Identifier': return expr.name;
584
+ case 'BinaryExpr': {
585
+ const be = expr;
586
+ return this.genExprStr(be.left) + be.op + this.genExprStr(be.right);
587
+ }
588
+ case 'UnaryExpr': {
589
+ const ue = expr;
590
+ if (ue.prefix)
591
+ return ue.op + this.genExprStr(ue.operand);
592
+ return this.genExprStr(ue.operand) + ue.op;
593
+ }
594
+ case 'PostfixExpr': {
595
+ const pe = expr;
596
+ return this.genExprStr(pe.operand) + pe.op;
597
+ }
598
+ case 'AssignExpr': {
599
+ const ae = expr;
600
+ return this.genExprStr(ae.left) + ae.op + this.genExprStr(ae.right);
601
+ }
602
+ case 'TernaryExpr': {
603
+ const te = expr;
604
+ return this.genExprStr(te.condition) + '?' + this.genExprStr(te.consequent) + ':' + this.genExprStr(te.alternate);
605
+ }
606
+ case 'CallExpr': {
607
+ const ce = expr;
608
+ const args = ce.args.map(a => this.genExprStr(a)).join(',');
609
+ return this.genExprStr(ce.callee) + '(' + args + ')';
610
+ }
611
+ case 'IndexExpr': {
612
+ const ie = expr;
613
+ return this.genExprStr(ie.object) + '[' + this.genExprStr(ie.index) + ']';
614
+ }
615
+ case 'MemberExpr': {
616
+ const me = expr;
617
+ return this.genExprStr(me.object) + (me.arrow ? '->' : '.') + me.member;
618
+ }
619
+ case 'CastExpr': {
620
+ const ce = expr;
621
+ return '(' + this.formatType(ce.targetType) + ')' + this.genExprStr(ce.expr);
622
+ }
623
+ case 'SizeofExpr': {
624
+ const se = expr;
625
+ if (se.isType) {
626
+ return 'sizeof(' + this.formatType(se.operand) + ')';
627
+ }
628
+ return 'sizeof(' + this.genExprStr(se.operand) + ')';
629
+ }
630
+ case 'InitListExpr': {
631
+ const il = expr;
632
+ return '{' + il.elements.map(e => this.genExprStr(e)).join(',') + '}';
633
+ }
634
+ default:
635
+ return '/* unknown expr */';
636
+ }
637
+ }
638
+ }
639
+ exports.CodeGenerator = CodeGenerator;
640
+ function generate(program) {
641
+ const gen = new CodeGenerator();
642
+ return gen.generate(program);
643
+ }
644
+ //# sourceMappingURL=codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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"}