Просмотр исходного кода

Add munge to convert cljs to js name

Lucas Stadler лет назад: 9
Родитель
Сommit
942438933e
1 измененных файлов с 52 добавлено и 0 удалено
  1. 52 0
      c/ton/main.c

+ 52 - 0
c/ton/main.c

@ -13,6 +13,8 @@ char console_log_buf[CONSOLE_LOG_BUF_SIZE];
13 13
JSStringRef to_string(JSContextRef ctx, JSValueRef val);
14 14
JSValueRef evaluate_script(JSContextRef ctx, char *script, char *source);
15 15
16
char *munge(char *s);
17
16 18
void bootstrap(JSContextRef ctx, char *deps_file_path, char *goog_base_path);
17 19
18 20
char* get_contents(char *path);
@ -160,6 +162,56 @@ JSValueRef evaluate_script(JSContextRef ctx, char *script, char *source) {
160 162
	return val;
161 163
}
162 164
165
char *munge(char *s) {
166
	int len = strlen(s);
167
	int new_len = 0;
168
	for (int i = 0; i < len; i++) {
169
		switch (s[i]) {
170
		case '!':
171
			new_len += 6; // _BANG_
172
			break;
173
		case '?':
174
			new_len += 7; // _QMARK_
175
			break;
176
		default:
177
			new_len += 1;
178
		}
179
	}
180
181
	char *ms = malloc((new_len+1) * sizeof(char));
182
	int j = 0;
183
	for (int i = 0; i < len; i++) {
184
		switch (s[i]) {
185
		case '-':
186
			ms[j++] = '_';
187
			break;
188
		case '!':
189
			ms[j++] = '_';
190
			ms[j++] = 'B';
191
			ms[j++] = 'A';
192
			ms[j++] = 'N';
193
			ms[j++] = 'G';
194
			ms[j++] = '_';
195
			break;
196
		case '?':
197
			ms[j++] = '_';
198
			ms[j++] = 'Q';
199
			ms[j++] = 'M';
200
			ms[j++] = 'A';
201
			ms[j++] = 'R';
202
			ms[j++] = 'K';
203
			ms[j++] = '_';
204
			break;
205
206
		default:
207
			ms[j++] = s[i];
208
		}
209
	}
210
	ms[new_len] = '\0';
211
212
	return ms;
213
}
214
163 215
void bootstrap(JSContextRef ctx, char *deps_file_path, char *goog_base_path) {
164 216
	char source[] = "<bootstrap>";
165 217