llpkgc__internal.c 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file LICENSE.rst or https://cmake.org/licensing for details. */
  3. /* This code was generated by llpkgc, do not edit it by hand
  4. See: https://gitlab.kitware.com/utils/llpkgc */
  5. #include <stdlib.h>
  6. #include <stdint.h>
  7. #include <string.h>
  8. #ifdef __SSE4_2__
  9. #ifdef _MSC_VER
  10. #include <nmmintrin.h>
  11. #else /* !_MSC_VER */
  12. #include <x86intrin.h>
  13. #endif /* _MSC_VER */
  14. #endif /* __SSE4_2__ */
  15. #ifdef _MSC_VER
  16. #define ALIGN(n) _declspec(align(n))
  17. #else /* !_MSC_VER */
  18. #define ALIGN(n) __attribute__((aligned(n)))
  19. #endif /* _MSC_VER */
  20. #include "llpkgc__internal.h"
  21. typedef int (*llpkgc__internal__span_cb)(
  22. llpkgc__internal_t*, const char*, const char*);
  23. enum llparse_state_e {
  24. s_error,
  25. s_n_llpkgc__internal__n_comment,
  26. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete,
  27. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_1,
  28. s_n_llpkgc__internal__n_literal_skip_dollar,
  29. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_2,
  30. s_n_llpkgc__internal__n_maybe_CR,
  31. s_n_llpkgc__internal__n_skip_escaped_LF,
  32. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_3,
  33. s_n_llpkgc__internal__n_maybe_LF,
  34. s_n_llpkgc__internal__n_skip_escaped_CR,
  35. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_4,
  36. s_n_llpkgc__internal__n_literal_skip_hash,
  37. s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_1,
  38. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_5,
  39. s_n_llpkgc__internal__n_maybe_escaped,
  40. s_n_llpkgc__internal__n_literal,
  41. s_n_llpkgc__internal__n_variable_skip_dollar,
  42. s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span,
  43. s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_2,
  44. s_n_llpkgc__internal__n_variable_close,
  45. s_n_llpkgc__internal__n_variable_skip_curly,
  46. s_n_llpkgc__internal__n_invoke_llpkgc__valvar_complete,
  47. s_n_llpkgc__internal__n_variable,
  48. s_n_llpkgc__internal__n_span_start_llpkgc__valvar_span,
  49. s_n_llpkgc__internal__n_maybe_variable,
  50. s_n_llpkgc__internal__n_expect_value,
  51. s_n_llpkgc__internal__n_expect_sep,
  52. s_n_llpkgc__internal__n_key,
  53. s_n_llpkgc__internal__n_span_start_llpkgc__key_span,
  54. s_n_llpkgc__internal__n_line_start,
  55. };
  56. typedef enum llparse_state_e llparse_state_t;
  57. int llpkgc__key_span(
  58. llpkgc__internal_t* s, const unsigned char* p,
  59. const unsigned char* endp);
  60. int llpkgc__vallit_span(
  61. llpkgc__internal_t* s, const unsigned char* p,
  62. const unsigned char* endp);
  63. int llpkgc__valvar_span(
  64. llpkgc__internal_t* s, const unsigned char* p,
  65. const unsigned char* endp);
  66. int llpkgc__line_begin(
  67. llpkgc__internal_t* s, const unsigned char* p,
  68. const unsigned char* endp);
  69. int llpkgc__keyword_complete(
  70. llpkgc__internal_t* s, const unsigned char* p,
  71. const unsigned char* endp);
  72. int llpkgc__value_complete(
  73. llpkgc__internal_t* s, const unsigned char* p,
  74. const unsigned char* endp);
  75. int llpkgc__vallit_complete(
  76. llpkgc__internal_t* s, const unsigned char* p,
  77. const unsigned char* endp);
  78. int llpkgc__internal__c_update_escaped_(
  79. llpkgc__internal_t* state,
  80. const unsigned char* p,
  81. const unsigned char* endp) {
  82. state->escaped_ = 1;
  83. return 0;
  84. }
  85. int llpkgc__valvar_complete(
  86. llpkgc__internal_t* s, const unsigned char* p,
  87. const unsigned char* endp);
  88. int llpkgc__variable_complete(
  89. llpkgc__internal_t* s, const unsigned char* p,
  90. const unsigned char* endp);
  91. int llpkgc__internal_init(llpkgc__internal_t* state) {
  92. memset(state, 0, sizeof(*state));
  93. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_line_start;
  94. return 0;
  95. }
  96. static llparse_state_t llpkgc__internal__run(
  97. llpkgc__internal_t* state,
  98. const unsigned char* p,
  99. const unsigned char* endp) {
  100. int match;
  101. switch ((llparse_state_t) (intptr_t) state->_current) {
  102. case s_n_llpkgc__internal__n_comment:
  103. s_n_llpkgc__internal__n_comment: {
  104. if (p == endp) {
  105. return s_n_llpkgc__internal__n_comment;
  106. }
  107. switch (*p) {
  108. case 10: {
  109. p++;
  110. goto s_n_llpkgc__internal__n_line_start;
  111. }
  112. case 13: {
  113. p++;
  114. goto s_n_llpkgc__internal__n_line_start;
  115. }
  116. default: {
  117. p++;
  118. goto s_n_llpkgc__internal__n_comment;
  119. }
  120. }
  121. /* UNREACHABLE */;
  122. abort();
  123. }
  124. case s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete:
  125. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete: {
  126. switch (llpkgc__vallit_complete(state, p, endp)) {
  127. case 0:
  128. goto s_n_llpkgc__internal__n_invoke_llpkgc__value_complete_1;
  129. default:
  130. goto s_n_llpkgc__internal__n_error_3;
  131. }
  132. /* UNREACHABLE */;
  133. abort();
  134. }
  135. case s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_1:
  136. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_1: {
  137. switch (llpkgc__vallit_complete(state, p, endp)) {
  138. case 0:
  139. goto s_n_llpkgc__internal__n_invoke_llpkgc__value_complete_2;
  140. default:
  141. goto s_n_llpkgc__internal__n_error_5;
  142. }
  143. /* UNREACHABLE */;
  144. abort();
  145. }
  146. case s_n_llpkgc__internal__n_literal_skip_dollar:
  147. s_n_llpkgc__internal__n_literal_skip_dollar: {
  148. if (p == endp) {
  149. return s_n_llpkgc__internal__n_literal_skip_dollar;
  150. }
  151. p++;
  152. goto s_n_llpkgc__internal__n_maybe_variable;
  153. /* UNREACHABLE */;
  154. abort();
  155. }
  156. case s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_2:
  157. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_2: {
  158. switch (llpkgc__vallit_complete(state, p, endp)) {
  159. case 0:
  160. goto s_n_llpkgc__internal__n_literal_skip_dollar;
  161. default:
  162. goto s_n_llpkgc__internal__n_error_7;
  163. }
  164. /* UNREACHABLE */;
  165. abort();
  166. }
  167. case s_n_llpkgc__internal__n_maybe_CR:
  168. s_n_llpkgc__internal__n_maybe_CR: {
  169. if (p == endp) {
  170. return s_n_llpkgc__internal__n_maybe_CR;
  171. }
  172. switch (*p) {
  173. case 13: {
  174. p++;
  175. goto s_n_llpkgc__internal__n_expect_value;
  176. }
  177. default: {
  178. goto s_n_llpkgc__internal__n_expect_value;
  179. }
  180. }
  181. /* UNREACHABLE */;
  182. abort();
  183. }
  184. case s_n_llpkgc__internal__n_skip_escaped_LF:
  185. s_n_llpkgc__internal__n_skip_escaped_LF: {
  186. if (p == endp) {
  187. return s_n_llpkgc__internal__n_skip_escaped_LF;
  188. }
  189. p++;
  190. goto s_n_llpkgc__internal__n_maybe_CR;
  191. /* UNREACHABLE */;
  192. abort();
  193. }
  194. case s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_3:
  195. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_3: {
  196. switch (llpkgc__vallit_complete(state, p, endp)) {
  197. case 0:
  198. goto s_n_llpkgc__internal__n_skip_escaped_LF;
  199. default:
  200. goto s_n_llpkgc__internal__n_error_8;
  201. }
  202. /* UNREACHABLE */;
  203. abort();
  204. }
  205. case s_n_llpkgc__internal__n_maybe_LF:
  206. s_n_llpkgc__internal__n_maybe_LF: {
  207. if (p == endp) {
  208. return s_n_llpkgc__internal__n_maybe_LF;
  209. }
  210. switch (*p) {
  211. case 10: {
  212. p++;
  213. goto s_n_llpkgc__internal__n_expect_value;
  214. }
  215. default: {
  216. goto s_n_llpkgc__internal__n_expect_value;
  217. }
  218. }
  219. /* UNREACHABLE */;
  220. abort();
  221. }
  222. case s_n_llpkgc__internal__n_skip_escaped_CR:
  223. s_n_llpkgc__internal__n_skip_escaped_CR: {
  224. if (p == endp) {
  225. return s_n_llpkgc__internal__n_skip_escaped_CR;
  226. }
  227. p++;
  228. goto s_n_llpkgc__internal__n_maybe_LF;
  229. /* UNREACHABLE */;
  230. abort();
  231. }
  232. case s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_4:
  233. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_4: {
  234. switch (llpkgc__vallit_complete(state, p, endp)) {
  235. case 0:
  236. goto s_n_llpkgc__internal__n_skip_escaped_CR;
  237. default:
  238. goto s_n_llpkgc__internal__n_error_9;
  239. }
  240. /* UNREACHABLE */;
  241. abort();
  242. }
  243. case s_n_llpkgc__internal__n_literal_skip_hash:
  244. s_n_llpkgc__internal__n_literal_skip_hash: {
  245. if (p == endp) {
  246. return s_n_llpkgc__internal__n_literal_skip_hash;
  247. }
  248. p++;
  249. goto s_n_llpkgc__internal__n_literal;
  250. /* UNREACHABLE */;
  251. abort();
  252. }
  253. case s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_1:
  254. s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_1: {
  255. if (p == endp) {
  256. return s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_1;
  257. }
  258. state->_span_pos0 = (void*) p;
  259. state->_span_cb0 = llpkgc__vallit_span;
  260. goto s_n_llpkgc__internal__n_literal_skip_hash;
  261. /* UNREACHABLE */;
  262. abort();
  263. }
  264. case s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_5:
  265. s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_5: {
  266. switch (llpkgc__vallit_complete(state, p, endp)) {
  267. case 0:
  268. goto s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_1;
  269. default:
  270. goto s_n_llpkgc__internal__n_error_10;
  271. }
  272. /* UNREACHABLE */;
  273. abort();
  274. }
  275. case s_n_llpkgc__internal__n_maybe_escaped:
  276. s_n_llpkgc__internal__n_maybe_escaped: {
  277. if (p == endp) {
  278. return s_n_llpkgc__internal__n_maybe_escaped;
  279. }
  280. switch (*p) {
  281. case 10: {
  282. goto s_n_llpkgc__internal__n_invoke_update_escaped_;
  283. }
  284. case 13: {
  285. goto s_n_llpkgc__internal__n_invoke_update_escaped__1;
  286. }
  287. case '#': {
  288. goto s_n_llpkgc__internal__n_invoke_update_escaped__2;
  289. }
  290. default: {
  291. goto s_n_llpkgc__internal__n_literal;
  292. }
  293. }
  294. /* UNREACHABLE */;
  295. abort();
  296. }
  297. case s_n_llpkgc__internal__n_literal:
  298. s_n_llpkgc__internal__n_literal: {
  299. if (p == endp) {
  300. return s_n_llpkgc__internal__n_literal;
  301. }
  302. switch (*p) {
  303. case 10: {
  304. goto s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span;
  305. }
  306. case 13: {
  307. goto s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span;
  308. }
  309. case '#': {
  310. goto s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_1;
  311. }
  312. case '$': {
  313. goto s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_2;
  314. }
  315. case 92: {
  316. p++;
  317. goto s_n_llpkgc__internal__n_maybe_escaped;
  318. }
  319. default: {
  320. p++;
  321. goto s_n_llpkgc__internal__n_literal;
  322. }
  323. }
  324. /* UNREACHABLE */;
  325. abort();
  326. }
  327. case s_n_llpkgc__internal__n_variable_skip_dollar:
  328. s_n_llpkgc__internal__n_variable_skip_dollar: {
  329. if (p == endp) {
  330. return s_n_llpkgc__internal__n_variable_skip_dollar;
  331. }
  332. p++;
  333. goto s_n_llpkgc__internal__n_literal;
  334. /* UNREACHABLE */;
  335. abort();
  336. }
  337. case s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span:
  338. s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span: {
  339. if (p == endp) {
  340. return s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span;
  341. }
  342. state->_span_pos0 = (void*) p;
  343. state->_span_cb0 = llpkgc__vallit_span;
  344. goto s_n_llpkgc__internal__n_variable_skip_dollar;
  345. /* UNREACHABLE */;
  346. abort();
  347. }
  348. case s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_2:
  349. s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_2: {
  350. if (p == endp) {
  351. return s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_2;
  352. }
  353. state->_span_pos0 = (void*) p;
  354. state->_span_cb0 = llpkgc__vallit_span;
  355. goto s_n_llpkgc__internal__n_literal;
  356. /* UNREACHABLE */;
  357. abort();
  358. }
  359. case s_n_llpkgc__internal__n_variable_close:
  360. s_n_llpkgc__internal__n_variable_close: {
  361. if (p == endp) {
  362. return s_n_llpkgc__internal__n_variable_close;
  363. }
  364. switch (*p) {
  365. case 10: {
  366. goto s_n_llpkgc__internal__n_invoke_llpkgc__value_complete;
  367. }
  368. case 13: {
  369. goto s_n_llpkgc__internal__n_invoke_llpkgc__value_complete;
  370. }
  371. case '#': {
  372. goto s_n_llpkgc__internal__n_invoke_llpkgc__value_complete;
  373. }
  374. case '$': {
  375. p++;
  376. goto s_n_llpkgc__internal__n_maybe_variable;
  377. }
  378. default: {
  379. goto s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_2;
  380. }
  381. }
  382. /* UNREACHABLE */;
  383. abort();
  384. }
  385. case s_n_llpkgc__internal__n_variable_skip_curly:
  386. s_n_llpkgc__internal__n_variable_skip_curly: {
  387. if (p == endp) {
  388. return s_n_llpkgc__internal__n_variable_skip_curly;
  389. }
  390. p++;
  391. goto s_n_llpkgc__internal__n_variable_close;
  392. /* UNREACHABLE */;
  393. abort();
  394. }
  395. case s_n_llpkgc__internal__n_invoke_llpkgc__valvar_complete:
  396. s_n_llpkgc__internal__n_invoke_llpkgc__valvar_complete: {
  397. switch (llpkgc__valvar_complete(state, p, endp)) {
  398. case 0:
  399. goto s_n_llpkgc__internal__n_variable_skip_curly;
  400. default:
  401. goto s_n_llpkgc__internal__n_error_11;
  402. }
  403. /* UNREACHABLE */;
  404. abort();
  405. }
  406. case s_n_llpkgc__internal__n_variable:
  407. s_n_llpkgc__internal__n_variable: {
  408. static uint8_t lookup_table[] = {
  409. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  410. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  411. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
  412. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
  413. 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  414. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
  415. 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  416. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 0, 0,
  417. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  418. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  419. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  420. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  421. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  422. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  423. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  424. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  425. };
  426. if (p == endp) {
  427. return s_n_llpkgc__internal__n_variable;
  428. }
  429. switch (lookup_table[(uint8_t) *p]) {
  430. case 1: {
  431. p++;
  432. goto s_n_llpkgc__internal__n_variable;
  433. }
  434. case 2: {
  435. goto s_n_llpkgc__internal__n_span_end_llpkgc__valvar_span;
  436. }
  437. default: {
  438. goto s_n_llpkgc__internal__n_error_12;
  439. }
  440. }
  441. /* UNREACHABLE */;
  442. abort();
  443. }
  444. case s_n_llpkgc__internal__n_span_start_llpkgc__valvar_span:
  445. s_n_llpkgc__internal__n_span_start_llpkgc__valvar_span: {
  446. if (p == endp) {
  447. return s_n_llpkgc__internal__n_span_start_llpkgc__valvar_span;
  448. }
  449. state->_span_pos0 = (void*) p;
  450. state->_span_cb0 = llpkgc__valvar_span;
  451. goto s_n_llpkgc__internal__n_variable;
  452. /* UNREACHABLE */;
  453. abort();
  454. }
  455. case s_n_llpkgc__internal__n_maybe_variable:
  456. s_n_llpkgc__internal__n_maybe_variable: {
  457. if (p == endp) {
  458. return s_n_llpkgc__internal__n_maybe_variable;
  459. }
  460. switch (*p) {
  461. case '$': {
  462. goto s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span;
  463. }
  464. case '{': {
  465. p++;
  466. goto s_n_llpkgc__internal__n_span_start_llpkgc__valvar_span;
  467. }
  468. default: {
  469. goto s_n_llpkgc__internal__n_error_13;
  470. }
  471. }
  472. /* UNREACHABLE */;
  473. abort();
  474. }
  475. case s_n_llpkgc__internal__n_expect_value:
  476. s_n_llpkgc__internal__n_expect_value: {
  477. if (p == endp) {
  478. return s_n_llpkgc__internal__n_expect_value;
  479. }
  480. switch (*p) {
  481. case 9: {
  482. p++;
  483. goto s_n_llpkgc__internal__n_expect_value;
  484. }
  485. case 10: {
  486. goto s_n_llpkgc__internal__n_invoke_llpkgc__value_complete;
  487. }
  488. case 13: {
  489. goto s_n_llpkgc__internal__n_invoke_llpkgc__value_complete;
  490. }
  491. case ' ': {
  492. p++;
  493. goto s_n_llpkgc__internal__n_expect_value;
  494. }
  495. case '#': {
  496. goto s_n_llpkgc__internal__n_invoke_llpkgc__value_complete;
  497. }
  498. case '$': {
  499. p++;
  500. goto s_n_llpkgc__internal__n_maybe_variable;
  501. }
  502. default: {
  503. goto s_n_llpkgc__internal__n_span_start_llpkgc__vallit_span_2;
  504. }
  505. }
  506. /* UNREACHABLE */;
  507. abort();
  508. }
  509. case s_n_llpkgc__internal__n_expect_sep:
  510. s_n_llpkgc__internal__n_expect_sep: {
  511. if (p == endp) {
  512. return s_n_llpkgc__internal__n_expect_sep;
  513. }
  514. switch (*p) {
  515. case 9: {
  516. p++;
  517. goto s_n_llpkgc__internal__n_expect_sep;
  518. }
  519. case ' ': {
  520. p++;
  521. goto s_n_llpkgc__internal__n_expect_sep;
  522. }
  523. case ':': {
  524. p++;
  525. goto s_n_llpkgc__internal__n_invoke_llpkgc__keyword_complete;
  526. }
  527. case '=': {
  528. p++;
  529. goto s_n_llpkgc__internal__n_invoke_llpkgc__variable_complete;
  530. }
  531. default: {
  532. goto s_n_llpkgc__internal__n_error_15;
  533. }
  534. }
  535. /* UNREACHABLE */;
  536. abort();
  537. }
  538. case s_n_llpkgc__internal__n_key:
  539. s_n_llpkgc__internal__n_key: {
  540. static uint8_t lookup_table[] = {
  541. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
  542. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  543. 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
  544. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 1, 0, 0,
  545. 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  546. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2,
  547. 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  548. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0,
  549. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  550. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  551. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  552. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  553. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  554. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  555. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  556. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  557. };
  558. if (p == endp) {
  559. return s_n_llpkgc__internal__n_key;
  560. }
  561. switch (lookup_table[(uint8_t) *p]) {
  562. case 1: {
  563. goto s_n_llpkgc__internal__n_span_end_llpkgc__key_span;
  564. }
  565. case 2: {
  566. p++;
  567. goto s_n_llpkgc__internal__n_key;
  568. }
  569. default: {
  570. goto s_n_llpkgc__internal__n_error_16;
  571. }
  572. }
  573. /* UNREACHABLE */;
  574. abort();
  575. }
  576. case s_n_llpkgc__internal__n_span_start_llpkgc__key_span:
  577. s_n_llpkgc__internal__n_span_start_llpkgc__key_span: {
  578. if (p == endp) {
  579. return s_n_llpkgc__internal__n_span_start_llpkgc__key_span;
  580. }
  581. state->_span_pos0 = (void*) p;
  582. state->_span_cb0 = llpkgc__key_span;
  583. goto s_n_llpkgc__internal__n_key;
  584. /* UNREACHABLE */;
  585. abort();
  586. }
  587. case s_n_llpkgc__internal__n_line_start:
  588. s_n_llpkgc__internal__n_line_start: {
  589. static uint8_t lookup_table[] = {
  590. 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
  591. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  592. 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
  593. 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0,
  594. 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  595. 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 3,
  596. 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  597. 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0,
  598. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  599. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  600. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  601. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  602. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  603. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  604. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  605. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  606. };
  607. if (p == endp) {
  608. return s_n_llpkgc__internal__n_line_start;
  609. }
  610. switch (lookup_table[(uint8_t) *p]) {
  611. case 1: {
  612. p++;
  613. goto s_n_llpkgc__internal__n_line_start;
  614. }
  615. case 2: {
  616. p++;
  617. goto s_n_llpkgc__internal__n_comment;
  618. }
  619. case 3: {
  620. goto s_n_llpkgc__internal__n_invoke_llpkgc__line_begin;
  621. }
  622. default: {
  623. goto s_n_llpkgc__internal__n_error_17;
  624. }
  625. }
  626. /* UNREACHABLE */;
  627. abort();
  628. }
  629. default:
  630. /* UNREACHABLE */
  631. abort();
  632. }
  633. s_n_llpkgc__internal__n_error_2: {
  634. state->error = 0xb;
  635. state->reason = "Value complete error";
  636. state->error_pos = (const char*) p;
  637. state->_current = (void*) (intptr_t) s_error;
  638. return s_error;
  639. /* UNREACHABLE */;
  640. abort();
  641. }
  642. s_n_llpkgc__internal__n_invoke_llpkgc__value_complete: {
  643. switch (llpkgc__value_complete(state, p, endp)) {
  644. case 0:
  645. goto s_n_llpkgc__internal__n_line_start;
  646. default:
  647. goto s_n_llpkgc__internal__n_error_2;
  648. }
  649. /* UNREACHABLE */;
  650. abort();
  651. }
  652. s_n_llpkgc__internal__n_error_4: {
  653. state->error = 0xb;
  654. state->reason = "Value complete error";
  655. state->error_pos = (const char*) p;
  656. state->_current = (void*) (intptr_t) s_error;
  657. return s_error;
  658. /* UNREACHABLE */;
  659. abort();
  660. }
  661. s_n_llpkgc__internal__n_invoke_llpkgc__value_complete_1: {
  662. switch (llpkgc__value_complete(state, p, endp)) {
  663. case 0:
  664. goto s_n_llpkgc__internal__n_line_start;
  665. default:
  666. goto s_n_llpkgc__internal__n_error_4;
  667. }
  668. /* UNREACHABLE */;
  669. abort();
  670. }
  671. s_n_llpkgc__internal__n_error_3: {
  672. state->error = 0xa;
  673. state->reason = "Literal complete error";
  674. state->error_pos = (const char*) p;
  675. state->_current = (void*) (intptr_t) s_error;
  676. return s_error;
  677. /* UNREACHABLE */;
  678. abort();
  679. }
  680. s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span: {
  681. const unsigned char* start;
  682. int err;
  683. start = state->_span_pos0;
  684. state->_span_pos0 = NULL;
  685. err = llpkgc__vallit_span(state, start, p);
  686. if (err != 0) {
  687. state->error = err;
  688. state->error_pos = (const char*) p;
  689. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete;
  690. return s_error;
  691. }
  692. goto s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete;
  693. /* UNREACHABLE */;
  694. abort();
  695. }
  696. s_n_llpkgc__internal__n_error_6: {
  697. state->error = 0xb;
  698. state->reason = "Value complete error";
  699. state->error_pos = (const char*) p;
  700. state->_current = (void*) (intptr_t) s_error;
  701. return s_error;
  702. /* UNREACHABLE */;
  703. abort();
  704. }
  705. s_n_llpkgc__internal__n_invoke_llpkgc__value_complete_2: {
  706. switch (llpkgc__value_complete(state, p, endp)) {
  707. case 0:
  708. goto s_n_llpkgc__internal__n_comment;
  709. default:
  710. goto s_n_llpkgc__internal__n_error_6;
  711. }
  712. /* UNREACHABLE */;
  713. abort();
  714. }
  715. s_n_llpkgc__internal__n_error_5: {
  716. state->error = 0xa;
  717. state->reason = "Literal complete error";
  718. state->error_pos = (const char*) p;
  719. state->_current = (void*) (intptr_t) s_error;
  720. return s_error;
  721. /* UNREACHABLE */;
  722. abort();
  723. }
  724. s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_1: {
  725. const unsigned char* start;
  726. int err;
  727. start = state->_span_pos0;
  728. state->_span_pos0 = NULL;
  729. err = llpkgc__vallit_span(state, start, p);
  730. if (err != 0) {
  731. state->error = err;
  732. state->error_pos = (const char*) p;
  733. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_1;
  734. return s_error;
  735. }
  736. goto s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_1;
  737. /* UNREACHABLE */;
  738. abort();
  739. }
  740. s_n_llpkgc__internal__n_error_7: {
  741. state->error = 0xa;
  742. state->reason = "Literal complete error";
  743. state->error_pos = (const char*) p;
  744. state->_current = (void*) (intptr_t) s_error;
  745. return s_error;
  746. /* UNREACHABLE */;
  747. abort();
  748. }
  749. s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_2: {
  750. const unsigned char* start;
  751. int err;
  752. start = state->_span_pos0;
  753. state->_span_pos0 = NULL;
  754. err = llpkgc__vallit_span(state, start, p);
  755. if (err != 0) {
  756. state->error = err;
  757. state->error_pos = (const char*) p;
  758. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_2;
  759. return s_error;
  760. }
  761. goto s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_2;
  762. /* UNREACHABLE */;
  763. abort();
  764. }
  765. s_n_llpkgc__internal__n_error_8: {
  766. state->error = 0xa;
  767. state->reason = "Literal complete error";
  768. state->error_pos = (const char*) p;
  769. state->_current = (void*) (intptr_t) s_error;
  770. return s_error;
  771. /* UNREACHABLE */;
  772. abort();
  773. }
  774. s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_3: {
  775. const unsigned char* start;
  776. int err;
  777. start = state->_span_pos0;
  778. state->_span_pos0 = NULL;
  779. err = llpkgc__vallit_span(state, start, p);
  780. if (err != 0) {
  781. state->error = err;
  782. state->error_pos = (const char*) p;
  783. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_3;
  784. return s_error;
  785. }
  786. goto s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_3;
  787. /* UNREACHABLE */;
  788. abort();
  789. }
  790. s_n_llpkgc__internal__n_invoke_update_escaped_: {
  791. switch (llpkgc__internal__c_update_escaped_(state, p, endp)) {
  792. default:
  793. goto s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_3;
  794. }
  795. /* UNREACHABLE */;
  796. abort();
  797. }
  798. s_n_llpkgc__internal__n_error_9: {
  799. state->error = 0xa;
  800. state->reason = "Literal complete error";
  801. state->error_pos = (const char*) p;
  802. state->_current = (void*) (intptr_t) s_error;
  803. return s_error;
  804. /* UNREACHABLE */;
  805. abort();
  806. }
  807. s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_4: {
  808. const unsigned char* start;
  809. int err;
  810. start = state->_span_pos0;
  811. state->_span_pos0 = NULL;
  812. err = llpkgc__vallit_span(state, start, p);
  813. if (err != 0) {
  814. state->error = err;
  815. state->error_pos = (const char*) p;
  816. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_4;
  817. return s_error;
  818. }
  819. goto s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_4;
  820. /* UNREACHABLE */;
  821. abort();
  822. }
  823. s_n_llpkgc__internal__n_invoke_update_escaped__1: {
  824. switch (llpkgc__internal__c_update_escaped_(state, p, endp)) {
  825. default:
  826. goto s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_4;
  827. }
  828. /* UNREACHABLE */;
  829. abort();
  830. }
  831. s_n_llpkgc__internal__n_error_10: {
  832. state->error = 0xa;
  833. state->reason = "Literal complete error";
  834. state->error_pos = (const char*) p;
  835. state->_current = (void*) (intptr_t) s_error;
  836. return s_error;
  837. /* UNREACHABLE */;
  838. abort();
  839. }
  840. s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_5: {
  841. const unsigned char* start;
  842. int err;
  843. start = state->_span_pos0;
  844. state->_span_pos0 = NULL;
  845. err = llpkgc__vallit_span(state, start, p);
  846. if (err != 0) {
  847. state->error = err;
  848. state->error_pos = (const char*) p;
  849. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_5;
  850. return s_error;
  851. }
  852. goto s_n_llpkgc__internal__n_invoke_llpkgc__vallit_complete_5;
  853. /* UNREACHABLE */;
  854. abort();
  855. }
  856. s_n_llpkgc__internal__n_invoke_update_escaped__2: {
  857. switch (llpkgc__internal__c_update_escaped_(state, p, endp)) {
  858. default:
  859. goto s_n_llpkgc__internal__n_span_end_llpkgc__vallit_span_5;
  860. }
  861. /* UNREACHABLE */;
  862. abort();
  863. }
  864. s_n_llpkgc__internal__n_error_11: {
  865. state->error = 0xc;
  866. state->reason = "Variable complete error";
  867. state->error_pos = (const char*) p;
  868. state->_current = (void*) (intptr_t) s_error;
  869. return s_error;
  870. /* UNREACHABLE */;
  871. abort();
  872. }
  873. s_n_llpkgc__internal__n_span_end_llpkgc__valvar_span: {
  874. const unsigned char* start;
  875. int err;
  876. start = state->_span_pos0;
  877. state->_span_pos0 = NULL;
  878. err = llpkgc__valvar_span(state, start, p);
  879. if (err != 0) {
  880. state->error = err;
  881. state->error_pos = (const char*) p;
  882. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_invoke_llpkgc__valvar_complete;
  883. return s_error;
  884. }
  885. goto s_n_llpkgc__internal__n_invoke_llpkgc__valvar_complete;
  886. /* UNREACHABLE */;
  887. abort();
  888. }
  889. s_n_llpkgc__internal__n_error_12: {
  890. state->error = 0xd;
  891. state->reason = "Invalid variable character";
  892. state->error_pos = (const char*) p;
  893. state->_current = (void*) (intptr_t) s_error;
  894. return s_error;
  895. /* UNREACHABLE */;
  896. abort();
  897. }
  898. s_n_llpkgc__internal__n_error_13: {
  899. state->error = 0x9;
  900. state->reason = "Unexpected `$`";
  901. state->error_pos = (const char*) p;
  902. state->_current = (void*) (intptr_t) s_error;
  903. return s_error;
  904. /* UNREACHABLE */;
  905. abort();
  906. }
  907. s_n_llpkgc__internal__n_error_1: {
  908. state->error = 0x5;
  909. state->reason = "Keyword complete error";
  910. state->error_pos = (const char*) p;
  911. state->_current = (void*) (intptr_t) s_error;
  912. return s_error;
  913. /* UNREACHABLE */;
  914. abort();
  915. }
  916. s_n_llpkgc__internal__n_invoke_llpkgc__keyword_complete: {
  917. switch (llpkgc__keyword_complete(state, p, endp)) {
  918. case 0:
  919. goto s_n_llpkgc__internal__n_expect_value;
  920. default:
  921. goto s_n_llpkgc__internal__n_error_1;
  922. }
  923. /* UNREACHABLE */;
  924. abort();
  925. }
  926. s_n_llpkgc__internal__n_error_14: {
  927. state->error = 0x6;
  928. state->reason = "Variable complete error";
  929. state->error_pos = (const char*) p;
  930. state->_current = (void*) (intptr_t) s_error;
  931. return s_error;
  932. /* UNREACHABLE */;
  933. abort();
  934. }
  935. s_n_llpkgc__internal__n_invoke_llpkgc__variable_complete: {
  936. switch (llpkgc__variable_complete(state, p, endp)) {
  937. case 0:
  938. goto s_n_llpkgc__internal__n_expect_value;
  939. default:
  940. goto s_n_llpkgc__internal__n_error_14;
  941. }
  942. /* UNREACHABLE */;
  943. abort();
  944. }
  945. s_n_llpkgc__internal__n_error_15: {
  946. state->error = 0x7;
  947. state->reason = "Expected seperator";
  948. state->error_pos = (const char*) p;
  949. state->_current = (void*) (intptr_t) s_error;
  950. return s_error;
  951. /* UNREACHABLE */;
  952. abort();
  953. }
  954. s_n_llpkgc__internal__n_span_end_llpkgc__key_span: {
  955. const unsigned char* start;
  956. int err;
  957. start = state->_span_pos0;
  958. state->_span_pos0 = NULL;
  959. err = llpkgc__key_span(state, start, p);
  960. if (err != 0) {
  961. state->error = err;
  962. state->error_pos = (const char*) p;
  963. state->_current = (void*) (intptr_t) s_n_llpkgc__internal__n_expect_sep;
  964. return s_error;
  965. }
  966. goto s_n_llpkgc__internal__n_expect_sep;
  967. /* UNREACHABLE */;
  968. abort();
  969. }
  970. s_n_llpkgc__internal__n_error_16: {
  971. state->error = 0x4;
  972. state->reason = "Invalid key character";
  973. state->error_pos = (const char*) p;
  974. state->_current = (void*) (intptr_t) s_error;
  975. return s_error;
  976. /* UNREACHABLE */;
  977. abort();
  978. }
  979. s_n_llpkgc__internal__n_error: {
  980. state->error = 0x63;
  981. state->reason = "Line start error";
  982. state->error_pos = (const char*) p;
  983. state->_current = (void*) (intptr_t) s_error;
  984. return s_error;
  985. /* UNREACHABLE */;
  986. abort();
  987. }
  988. s_n_llpkgc__internal__n_invoke_llpkgc__line_begin: {
  989. switch (llpkgc__line_begin(state, p, endp)) {
  990. case 0:
  991. goto s_n_llpkgc__internal__n_span_start_llpkgc__key_span;
  992. default:
  993. goto s_n_llpkgc__internal__n_error;
  994. }
  995. /* UNREACHABLE */;
  996. abort();
  997. }
  998. s_n_llpkgc__internal__n_error_17: {
  999. state->error = 0x2;
  1000. state->reason = "Expected key";
  1001. state->error_pos = (const char*) p;
  1002. state->_current = (void*) (intptr_t) s_error;
  1003. return s_error;
  1004. /* UNREACHABLE */;
  1005. abort();
  1006. }
  1007. }
  1008. int llpkgc__internal_execute(llpkgc__internal_t* state, const char* p, const char* endp) {
  1009. llparse_state_t next;
  1010. /* check lingering errors */
  1011. if (state->error != 0) {
  1012. return state->error;
  1013. }
  1014. /* restart spans */
  1015. if (state->_span_pos0 != NULL) {
  1016. state->_span_pos0 = (void*) p;
  1017. }
  1018. next = llpkgc__internal__run(state, (const unsigned char*) p, (const unsigned char*) endp);
  1019. if (next == s_error) {
  1020. return state->error;
  1021. }
  1022. state->_current = (void*) (intptr_t) next;
  1023. /* execute spans */
  1024. if (state->_span_pos0 != NULL) {
  1025. int error;
  1026. error = ((llpkgc__internal__span_cb) state->_span_cb0)(state, state->_span_pos0, (const char*) endp);
  1027. if (error != 0) {
  1028. state->error = error;
  1029. state->error_pos = endp;
  1030. return error;
  1031. }
  1032. }
  1033. return 0;
  1034. }