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,294 @@
1
+ "use strict";
2
+ // Pear Language Decompiler
3
+ // Best-effort C → Pear minification
4
+ // Transforms C source into minified Pear code
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Decompiler = void 0;
7
+ exports.decompile = decompile;
8
+ // Type mapping: C → Pear
9
+ const C_TO_PEAR_TYPES = [
10
+ [/\bint8_t\b/g, 'i8'],
11
+ [/\bint16_t\b/g, 'i16'],
12
+ [/\bint32_t\b/g, 'i32'],
13
+ [/\bint64_t\b/g, 'i64'],
14
+ [/\buint8_t\b/g, 'u8'],
15
+ [/\buint16_t\b/g, 'u16'],
16
+ [/\buint32_t\b/g, 'u32'],
17
+ [/\buint64_t\b/g, 'u64'],
18
+ [/\bfloat\b/g, 'f32'],
19
+ [/\bdouble\b/g, 'f64'],
20
+ [/\bvoid\b/g, 'v'],
21
+ [/\bchar\b/g, 'c'],
22
+ [/\bbool\b/g, 'b'],
23
+ [/\bsize_t\b/g, 'sz'],
24
+ // unsigned int variations
25
+ [/\bunsigned long long\b/g, 'u64'],
26
+ [/\blong long\b/g, 'i64'],
27
+ [/\bunsigned long\b/g, 'u32'],
28
+ [/\bunsigned int\b/g, 'u32'],
29
+ [/\bunsigned\b/g, 'u32'],
30
+ [/\blong\b/g, 'i64'],
31
+ [/\bint\b/g, 'i32'],
32
+ [/\bshort\b/g, 'i16'],
33
+ ];
34
+ // Keyword mapping: C → Pear
35
+ const C_TO_PEAR_KEYWORDS = [
36
+ [/\breturn\b/g, 'rt'],
37
+ [/\bstruct\b/g, 'st'],
38
+ [/\bunion\b/g, 'un'],
39
+ [/\benum\b/g, 'en'],
40
+ [/\btypedef\b/g, 'tp'],
41
+ [/\bstatic\b/g, 'sc'],
42
+ [/\bextern\b/g, 'ex'],
43
+ [/\binline\b/g, 'in'],
44
+ [/\bvolatile\b/g, 'vl'],
45
+ [/\bconst\b/g, 'cn'],
46
+ [/\bif\b/g, 'if'],
47
+ // else if must come before else
48
+ [/\belse\s+if\b/g, 'ei'],
49
+ [/\belse\b/g, 'el'],
50
+ [/\bfor\b/g, 'lp'],
51
+ [/\bwhile\b/g, 'wh'],
52
+ [/\bdo\b/g, 'dw'],
53
+ [/\bswitch\b/g, 'sw'],
54
+ [/\bcase\b/g, 'cs'],
55
+ [/\bdefault\b/g, 'dv'],
56
+ [/\bbreak\b/g, 'bk'],
57
+ [/\bcontinue\b/g, 'ct'],
58
+ [/\bgoto\b/g, 'gt'],
59
+ [/\bsizeof\b/g, 'so'],
60
+ ];
61
+ // Preprocessor mapping
62
+ const C_TO_PEAR_PREPROCESSOR = [
63
+ [/^#include\s*<(.+?)>/gm, 'im<$1>'],
64
+ [/^#include\s*"(.+?)"/gm, 'im"$1"'],
65
+ [/^#define\s+/gm, 'df '],
66
+ [/^#pragma\s+/gm, 'pr '],
67
+ [/^#ifndef\s+(\w+)\s*\n#define\s+\1/gm, 'nd $1'],
68
+ [/^#endif/gm, 'dn'],
69
+ ];
70
+ const DEFAULT_OPTIONS = {
71
+ minifyWhitespace: true,
72
+ convertTypes: true,
73
+ convertKeywords: true,
74
+ convertPreprocessor: true,
75
+ convertDeclarations: true,
76
+ };
77
+ class Decompiler {
78
+ constructor(options = {}) {
79
+ this.options = { ...DEFAULT_OPTIONS, ...options };
80
+ }
81
+ decompile(cSource) {
82
+ let code = cSource;
83
+ // Step 1: Convert preprocessor directives
84
+ if (this.options.convertPreprocessor) {
85
+ code = this.convertPreprocessor(code);
86
+ }
87
+ // Step 2: Convert type names
88
+ if (this.options.convertTypes) {
89
+ code = this.convertTypes(code);
90
+ }
91
+ // Step 3: Convert keywords
92
+ if (this.options.convertKeywords) {
93
+ code = this.convertKeywords(code);
94
+ }
95
+ // Step 4: Convert declarations (type name → name:type)
96
+ if (this.options.convertDeclarations) {
97
+ code = this.convertDeclarations(code);
98
+ }
99
+ // Step 5: Convert function declarations
100
+ code = this.convertFunctions(code);
101
+ // Step 6: Minify whitespace
102
+ if (this.options.minifyWhitespace) {
103
+ code = this.minifyWhitespace(code);
104
+ }
105
+ return code.trim();
106
+ }
107
+ convertPreprocessor(code) {
108
+ // Handle include guards first (combined #ifndef/#define pattern)
109
+ code = code.replace(/^#ifndef\s+(\w+)\s*\n#define\s+\1\s*\n/gm, 'nd $1\n');
110
+ // Convert preprocessor directives
111
+ code = code.replace(/^#include\s*<([^>]+)>/gm, 'im<$1>');
112
+ code = code.replace(/^#include\s*"([^"]+)"/gm, 'im"$1"');
113
+ code = code.replace(/^#define\s+/gm, 'df ');
114
+ code = code.replace(/^#pragma\s+/gm, 'pr ');
115
+ code = code.replace(/^#endif\b.*/gm, 'dn');
116
+ // #ifdef, #if, #else keep their # prefix (already short)
117
+ return code;
118
+ }
119
+ convertTypes(code) {
120
+ // We need to be careful not to replace inside strings or comments
121
+ // For best-effort, we'll do simple regex replacement but protect strings
122
+ const protected_ = this.protectStringsAndComments(code);
123
+ let result = protected_.code;
124
+ for (const [pattern, replacement] of C_TO_PEAR_TYPES) {
125
+ result = result.replace(pattern, replacement);
126
+ }
127
+ return this.restoreStringsAndComments(result, protected_.replacements);
128
+ }
129
+ convertKeywords(code) {
130
+ const protected_ = this.protectStringsAndComments(code);
131
+ let result = protected_.code;
132
+ for (const [pattern, replacement] of C_TO_PEAR_KEYWORDS) {
133
+ result = result.replace(pattern, replacement);
134
+ }
135
+ return this.restoreStringsAndComments(result, protected_.replacements);
136
+ }
137
+ // Convert C-style declarations "type name" to Pear style "name:type"
138
+ // This is the most complex transformation and is best-effort
139
+ convertDeclarations(code) {
140
+ const lines = code.split('\n');
141
+ const result = [];
142
+ for (const line of lines) {
143
+ result.push(this.convertDeclLine(line));
144
+ }
145
+ return result.join('\n');
146
+ }
147
+ convertDeclLine(line) {
148
+ const trimmed = line.trimStart();
149
+ // Skip preprocessor lines, comments, empty lines, labels
150
+ if (trimmed.startsWith('im') || trimmed.startsWith('df') ||
151
+ trimmed.startsWith('#') || trimmed.startsWith('//') ||
152
+ trimmed.startsWith('/*') || trimmed.startsWith('*') ||
153
+ trimmed === '') {
154
+ return line;
155
+ }
156
+ // Skip already-converted or non-decl lines
157
+ if (trimmed.startsWith('st ') || trimmed.startsWith('un ') ||
158
+ trimmed.startsWith('en ') || trimmed.startsWith('tp ') ||
159
+ trimmed.startsWith('fn ')) {
160
+ return line;
161
+ }
162
+ // Pear type names for matching
163
+ const pearTypes = 'i8|i16|i32|i64|u8|u16|u32|u64|f32|f64|v|c|b|sz';
164
+ // Match: [qualifiers] type [*] name [= init] ;
165
+ // e.g. "i32 x = 5;" → "x:i32=5;"
166
+ // e.g. "i32 *ptr;" → "ptr:*i32;"
167
+ // e.g. "cn i32 len = 10;" → "len:cn i32=10;"
168
+ const declMatch = trimmed.match(new RegExp(`^((?:(?:cn|sc|vl|in|ex)\\s+)*)` + // optional qualifiers
169
+ `(${pearTypes})` + // base type
170
+ `((?:\\s*\\*+)?)` + // optional pointer stars
171
+ `\\s+(\\w+)` + // variable name
172
+ `((?:\\[\\d*\\])?)` + // optional array subscript
173
+ `\\s*((?:=\\s*[^;]+)?)` + // optional initializer
174
+ `\\s*;(.*)$` // semicolon + remainder
175
+ ));
176
+ if (declMatch) {
177
+ const [, quals, baseType, stars, name, arr, init, rest] = declMatch;
178
+ const ptrStr = (stars.trim() || '') + (arr || '');
179
+ const typeStr = (quals.trim() ? quals.trim() + ' ' : '') + ptrStr + baseType;
180
+ const initStr = init.trim() ? init.trim() : '';
181
+ return `${name}:${typeStr}${initStr};${rest}`;
182
+ }
183
+ return line;
184
+ }
185
+ // Convert C function signatures to Pear fn syntax
186
+ convertFunctions(code) {
187
+ // Match C function definitions:
188
+ // returntype [qualifiers] funcname(params) { or ;
189
+ // This regex handles common cases
190
+ const funcRegex = /^((?:sc\s+|in\s+|ex\s+|cn\s+|vl\s+)*)(\w+(?:\s*\*+)?)\s+(\w+)\s*\(([^)]*)\)\s*(?=\{|;)/gm;
191
+ return code.replace(funcRegex, (match, quals, retType, name, params) => {
192
+ // Don't convert if name looks like a declaration (not a function)
193
+ // Skip things like: struct name { ... }
194
+ if (name === 'st' || name === 'un' || name === 'en' || name === 'tp')
195
+ return match;
196
+ if (retType === 'st' || retType === 'un' || retType === 'en')
197
+ return match;
198
+ // Convert parameters
199
+ const convertedParams = this.convertParams(params);
200
+ const qualStr = quals.trim() ? quals.trim() + ' ' : '';
201
+ // Build Pear function signature
202
+ const retStr = retType.trim() === 'v' ? '' : '->' + retType.trim();
203
+ return qualStr + 'fn ' + name + '(' + convertedParams + ')' + retStr;
204
+ });
205
+ }
206
+ convertParams(params) {
207
+ if (!params.trim())
208
+ return '';
209
+ if (params.trim() === 'v')
210
+ return '';
211
+ return params.split(',').map(p => {
212
+ p = p.trim();
213
+ if (!p || p === '...')
214
+ return p;
215
+ // Match "type *name" or "type name" or "type *name[]"
216
+ const match = p.match(/^((?:cn\s+|vl\s+)*)(\w+(?:\s*\*+)?)\s+(\*+)?(\w+)(\[\])?$/);
217
+ if (!match)
218
+ return p;
219
+ const [, quals, type, extraPtr, name, arr] = match;
220
+ const ptrStr = (extraPtr || '') + (arr ? '*' : '');
221
+ const fullType = quals.trim() + (quals.trim() ? ' ' : '') + type.trim() + ptrStr;
222
+ return name + ':' + fullType;
223
+ }).join(',');
224
+ }
225
+ minifyWhitespace(code) {
226
+ const lines = code.split('\n');
227
+ const result = [];
228
+ for (let line of lines) {
229
+ // Remove trailing whitespace
230
+ line = line.trimEnd();
231
+ // Skip empty lines (keep one)
232
+ if (line === '') {
233
+ if (result.length > 0 && result[result.length - 1] !== '') {
234
+ // Don't add extra blank lines
235
+ }
236
+ continue;
237
+ }
238
+ // Remove leading indentation for minification
239
+ // But keep preprocessor lines at column 0
240
+ if (!line.trimStart().startsWith('#') &&
241
+ !line.trimStart().startsWith('im') &&
242
+ !line.trimStart().startsWith('df')) {
243
+ // Reduce indentation
244
+ line = line.trimStart();
245
+ }
246
+ result.push(line);
247
+ }
248
+ // Join - semicolons separate statements already
249
+ // Try to join short lines together for density
250
+ return result.join('\n');
251
+ }
252
+ // Protect string literals and comments from transformation
253
+ protectStringsAndComments(code) {
254
+ const replacements = new Map();
255
+ let counter = 0;
256
+ // Protect block comments
257
+ code = code.replace(/\/\*[\s\S]*?\*\//g, (match) => {
258
+ const key = `\x00COMMENT${counter++}\x00`;
259
+ replacements.set(key, match);
260
+ return key;
261
+ });
262
+ // Protect line comments
263
+ code = code.replace(/\/\/[^\n]*/g, (match) => {
264
+ const key = `\x00LINECOMMENT${counter++}\x00`;
265
+ replacements.set(key, match);
266
+ return key;
267
+ });
268
+ // Protect string literals
269
+ code = code.replace(/"(?:[^"\\]|\\.)*"/g, (match) => {
270
+ const key = `\x00STRING${counter++}\x00`;
271
+ replacements.set(key, match);
272
+ return key;
273
+ });
274
+ // Protect char literals
275
+ code = code.replace(/'(?:[^'\\]|\\.)*'/g, (match) => {
276
+ const key = `\x00CHAR${counter++}\x00`;
277
+ replacements.set(key, match);
278
+ return key;
279
+ });
280
+ return { code, replacements };
281
+ }
282
+ restoreStringsAndComments(code, replacements) {
283
+ for (const [key, value] of replacements) {
284
+ code = code.split(key).join(value);
285
+ }
286
+ return code;
287
+ }
288
+ }
289
+ exports.Decompiler = Decompiler;
290
+ function decompile(cSource) {
291
+ const decompiler = new Decompiler();
292
+ return decompiler.decompile(cSource);
293
+ }
294
+ //# sourceMappingURL=decompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompiler.js","sourceRoot":"","sources":["../src/decompiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ export declare class Interpreter {
2
+ private globalScope;
3
+ private heap;
4
+ private functions;
5
+ private structs;
6
+ private enums;
7
+ private defines;
8
+ private typedefs;
9
+ private stdoutBuf;
10
+ private stderrBuf;
11
+ private captureOutput;
12
+ private stdinData;
13
+ private stdinPos;
14
+ constructor(options?: {
15
+ stdin?: string;
16
+ captureOutput?: boolean;
17
+ });
18
+ private writeStdout;
19
+ private writeStderr;
20
+ private setupBuiltins;
21
+ run(pearSource: string, argv?: string[]): {
22
+ exitCode: number;
23
+ stdout: string;
24
+ stderr: string;
25
+ };
26
+ private loadProgram;
27
+ private loadTopLevel;
28
+ private execNode;
29
+ private execBlock;
30
+ private execBlockInScope;
31
+ private execVarDecl;
32
+ private coerceInitForType;
33
+ private lookupStruct;
34
+ private defaultValue;
35
+ private execIf;
36
+ private execFor;
37
+ private execWhile;
38
+ private execDoWhile;
39
+ private execSwitch;
40
+ private evalExpr;
41
+ private evalNumber;
42
+ private evalString;
43
+ private unescapeString;
44
+ private evalChar;
45
+ private evalIdentifier;
46
+ private evalBinary;
47
+ private evalUnary;
48
+ private evalPostfix;
49
+ private deref;
50
+ private addressOf;
51
+ private addrToVar;
52
+ private varToAddr;
53
+ private scopeIdCounter;
54
+ private scopeIds;
55
+ private getScopeId;
56
+ private allocScalarCell;
57
+ private assignTo;
58
+ private writeToPtr;
59
+ private setArrayElement;
60
+ private evalAssign;
61
+ private evalCall;
62
+ private callFunction;
63
+ private currentVarargs;
64
+ private callBuiltin;
65
+ private evalIndex;
66
+ private evalMember;
67
+ private evalCast;
68
+ private evalSizeof;
69
+ private evalInitList;
70
+ }
71
+ export declare function interpret(pearSource: string, argv?: string[]): number;
72
+ //# sourceMappingURL=interpreter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"AAuYA,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,OAAO,CAA6C;IAC5D,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAK;gBAET,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO;IAQrE,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,aAAa;IAmBrB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAgClG,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,YAAY;IA0EpB,OAAO,CAAC,QAAQ;IA6ChB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,WAAW;IAuCnB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,UAAU;IAiDlB,OAAO,CAAC,QAAQ;IA8BhB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,UAAU;IAmFlB,OAAO,CAAC,SAAS;IAgDjB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,KAAK;IA0Bb,OAAO,CAAC,SAAS;IA4CjB,OAAO,CAAC,SAAS,CAAqD;IAEtE,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAgC;IAEhD,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,QAAQ;IAmEhB,OAAO,CAAC,UAAU;IAmClB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,QAAQ;IA2BhB,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,cAAc,CAAe;IAIrC,OAAO,CAAC,WAAW;IAkXnB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,UAAU;IAoClB,OAAO,CAAC,QAAQ;IA6BhB,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,YAAY;CAUrB;AAcD,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAIrE"}