| /* Distributed under the OSI-approved BSD 3-Clause License. | |
| See accompanying file LICENSE.rst for details. */ | |
| /* This code was generated by llpkgc, do not edit it by hand | |
| See: https://gitlab.kitware.com/utils/llpkgc */ | |
| #include <stdlib.h> | |
| #include <stdint.h> | |
| #include <string.h> | |
| #ifdef __SSE4_2__ | |
| #ifdef _MSC_VER | |
| #include <nmmintrin.h> | |
| #else /* !_MSC_VER */ | |
| #include <x86intrin.h> | |
| #endif /* _MSC_VER */ | |
| #endif /* __SSE4_2__ */ | |
| #if defined(__ARM_NEON__) || defined(__ARM_NEON) | |
| #include <arm_neon.h> | |
| #endif /* __ARM_NEON__ */ | |
| #ifdef __wasm__ | |
| #include <wasm_simd128.h> | |
| #endif /* __wasm__ */ | |
| #ifdef _MSC_VER | |
| #define ALIGN(n) _declspec(align(n)) | |
| #define UNREACHABLE __assume(0) | |
| #else /* !_MSC_VER */ | |
| #define ALIGN(n) __attribute__((aligned(n))) | |
| #define UNREACHABLE __builtin_unreachable() | |
| #endif /* _MSC_VER */ | |
| #include "llpkgc_dep__internal.h" | |
| typedef int (*llpkgc_dep__internal__span_cb)( | |
| llpkgc_dep__internal_t*, const char*, const char*); | |
| enum llparse_state_e { | |
| s_error, | |
| s_n_llpkgc_dep__internal__n_invoke_llpkgc_dep__on_dep_complete, | |
| s_n_llpkgc_dep__internal__n_version, | |
| s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_version, | |
| s_n_llpkgc_dep__internal__n_before_version, | |
| s_n_llpkgc_dep__internal__n_unknown_operator, | |
| s_n_llpkgc_dep__internal__n_operator_end, | |
| s_n_llpkgc_dep__internal__n_not, | |
| s_n_llpkgc_dep__internal__n_less_than, | |
| s_n_llpkgc_dep__internal__n_greater_than, | |
| s_n_llpkgc_dep__internal__n_operator, | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_2, | |
| s_n_llpkgc_dep__internal__n_after_name, | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_1, | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_21, | |
| s_n_llpkgc_dep__internal__n_name, | |
| s_n_llpkgc_dep__internal__n_first_name_character, | |
| s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_name, | |
| s_n_llpkgc_dep__internal__n_start, | |
| }; | |
| typedef enum llparse_state_e llparse_state_t; | |
| int llpkgc_dep__on_dep_name( | |
| llpkgc_dep__internal_t* s, const unsigned char* p, | |
| const unsigned char* endp); | |
| int llpkgc_dep__on_dep_version( | |
| llpkgc_dep__internal_t* s, const unsigned char* p, | |
| const unsigned char* endp); | |
| int llpkgc_dep__internal__c_update_comparator( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->comparator = 0; | |
| return 0; | |
| } | |
| int llpkgc_dep__internal__c_update_finish( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->finish = 1; | |
| return 0; | |
| } | |
| int llpkgc_dep__on_dep_complete( | |
| llpkgc_dep__internal_t* s, const unsigned char* p, | |
| const unsigned char* endp); | |
| int llpkgc_dep__internal__c_update_finish_6( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->finish = 0; | |
| return 0; | |
| } | |
| int llpkgc_dep__internal__c_update_comparator_3( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->comparator = 4; | |
| return 0; | |
| } | |
| int llpkgc_dep__internal__c_update_comparator_5( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->comparator = 1; | |
| return 0; | |
| } | |
| int llpkgc_dep__internal__c_update_comparator_7( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->comparator = 2; | |
| return 0; | |
| } | |
| int llpkgc_dep__internal__c_update_comparator_8( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->comparator = 3; | |
| return 0; | |
| } | |
| int llpkgc_dep__internal__c_update_comparator_9( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->comparator = 5; | |
| return 0; | |
| } | |
| int llpkgc_dep__internal__c_update_comparator_11( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| state->comparator = 6; | |
| return 0; | |
| } | |
| int llpkgc_dep__internal_init(llpkgc_dep__internal_t* state) { | |
| memset(state, 0, sizeof(*state)); | |
| state->_current = (void*) (intptr_t) s_n_llpkgc_dep__internal__n_start; | |
| return 0; | |
| } | |
| static llparse_state_t llpkgc_dep__internal__run( | |
| llpkgc_dep__internal_t* state, | |
| const unsigned char* p, | |
| const unsigned char* endp) { | |
| int match; | |
| switch ((llparse_state_t) (intptr_t) state->_current) { | |
| case s_n_llpkgc_dep__internal__n_invoke_llpkgc_dep__on_dep_complete: | |
| s_n_llpkgc_dep__internal__n_invoke_llpkgc_dep__on_dep_complete: { | |
| switch (llpkgc_dep__on_dep_complete(state, p, endp)) { | |
| case 0: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_6; | |
| case 5: | |
| goto s_n_llpkgc_dep__internal__n_error_1; | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_error; | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_version: | |
| s_n_llpkgc_dep__internal__n_version: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_version; | |
| } | |
| switch (*p) { | |
| case 9: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_version; | |
| } | |
| case 10: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_version; | |
| } | |
| case 11: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_version; | |
| } | |
| case 12: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_version; | |
| } | |
| case 13: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_version; | |
| } | |
| case ' ': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_version; | |
| } | |
| case ',': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_version; | |
| } | |
| default: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_version; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_version: | |
| s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_version: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_version; | |
| } | |
| state->_span_pos0 = (void*) p; | |
| state->_span_cb0 = llpkgc_dep__on_dep_version; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_7; | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_before_version: | |
| s_n_llpkgc_dep__internal__n_before_version: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| switch (*p) { | |
| case 9: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| case 10: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| case 11: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| case 12: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| case 13: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| case ' ': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| case ',': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_llpkgc_dep__on_dep_complete; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_version; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_unknown_operator: | |
| s_n_llpkgc_dep__internal__n_unknown_operator: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| switch (*p) { | |
| case '!': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| case '<': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| case '=': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| case '>': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_5; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_operator_end: | |
| s_n_llpkgc_dep__internal__n_operator_end: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_operator_end; | |
| } | |
| switch (*p) { | |
| case '!': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_4; | |
| } | |
| case '<': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_4; | |
| } | |
| case '=': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_4; | |
| } | |
| case '>': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_4; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_10; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_not: | |
| s_n_llpkgc_dep__internal__n_not: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_not; | |
| } | |
| switch (*p) { | |
| case '!': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_2; | |
| } | |
| case '<': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_2; | |
| } | |
| case '=': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_3; | |
| } | |
| case '>': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_2; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_11; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_less_than: | |
| s_n_llpkgc_dep__internal__n_less_than: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_less_than; | |
| } | |
| switch (*p) { | |
| case '!': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_6; | |
| } | |
| case '<': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_6; | |
| } | |
| case '=': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_7; | |
| } | |
| case '>': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_6; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_15; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_greater_than: | |
| s_n_llpkgc_dep__internal__n_greater_than: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_greater_than; | |
| } | |
| switch (*p) { | |
| case '!': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_10; | |
| } | |
| case '<': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_10; | |
| } | |
| case '=': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_11; | |
| } | |
| case '>': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_10; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_20; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_operator: | |
| s_n_llpkgc_dep__internal__n_operator: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_operator; | |
| } | |
| switch (*p) { | |
| case '!': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_1; | |
| } | |
| case '<': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_5; | |
| } | |
| case '=': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_8; | |
| } | |
| case '>': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator_9; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_error_2; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_invoke_update_finish_2: | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_2: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_operator; | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_after_name: | |
| s_n_llpkgc_dep__internal__n_after_name: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| switch (*p) { | |
| case 9: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| case 10: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| case 11: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| case 12: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| case 13: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| case ' ': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| case '!': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_2; | |
| } | |
| case '<': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_2; | |
| } | |
| case '=': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_2; | |
| } | |
| case '>': { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_2; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_invoke_llpkgc_dep__on_dep_complete; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_invoke_update_finish_1: | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_1: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_invoke_update_finish_21: | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_21: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_after_name; | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_name: | |
| s_n_llpkgc_dep__internal__n_name: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_name; | |
| } | |
| switch (*p) { | |
| case 9: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_1; | |
| } | |
| case 10: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_1; | |
| } | |
| case 11: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_1; | |
| } | |
| case 12: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_1; | |
| } | |
| case 13: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_1; | |
| } | |
| case ' ': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_1; | |
| } | |
| case '!': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_2; | |
| } | |
| case ',': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_1; | |
| } | |
| case '<': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_2; | |
| } | |
| case '=': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_2; | |
| } | |
| case '>': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_2; | |
| } | |
| default: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_name; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_first_name_character: | |
| s_n_llpkgc_dep__internal__n_first_name_character: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_first_name_character; | |
| } | |
| switch (*p) { | |
| case 9: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name; | |
| } | |
| case 10: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name; | |
| } | |
| case 11: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name; | |
| } | |
| case 12: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name; | |
| } | |
| case 13: { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name; | |
| } | |
| case ' ': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name; | |
| } | |
| case '!': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_first_name_character; | |
| } | |
| case ',': { | |
| goto s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name; | |
| } | |
| case '<': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_first_name_character; | |
| } | |
| case '=': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_first_name_character; | |
| } | |
| case '>': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_first_name_character; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_name; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_name: | |
| s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_name: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_name; | |
| } | |
| state->_span_pos0 = (void*) p; | |
| state->_span_cb0 = llpkgc_dep__on_dep_name; | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish; | |
| UNREACHABLE; | |
| } | |
| case s_n_llpkgc_dep__internal__n_start: | |
| s_n_llpkgc_dep__internal__n_start: { | |
| if (p == endp) { | |
| return s_n_llpkgc_dep__internal__n_start; | |
| } | |
| switch (*p) { | |
| case 9: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_start; | |
| } | |
| case 10: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_start; | |
| } | |
| case 11: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_start; | |
| } | |
| case 12: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_start; | |
| } | |
| case 13: { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_start; | |
| } | |
| case ' ': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_start; | |
| } | |
| case ',': { | |
| p++; | |
| goto s_n_llpkgc_dep__internal__n_start; | |
| } | |
| default: { | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_comparator; | |
| } | |
| } | |
| UNREACHABLE; | |
| } | |
| default: | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_6: { | |
| switch (llpkgc_dep__internal__c_update_finish_6(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_start; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_error_1: { | |
| state->error = 0x5; | |
| state->reason = "Internal parser error"; | |
| state->error_pos = (const char*) p; | |
| state->_current = (void*) (intptr_t) s_error; | |
| return s_error; | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_error: { | |
| state->error = 0x2; | |
| state->reason = "Callback error"; | |
| state->error_pos = (const char*) p; | |
| state->_current = (void*) (intptr_t) s_error; | |
| return s_error; | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_version: { | |
| const unsigned char* start; | |
| int err; | |
| start = state->_span_pos0; | |
| state->_span_pos0 = NULL; | |
| err = llpkgc_dep__on_dep_version(state, start, p); | |
| if (err != 0) { | |
| state->error = err; | |
| state->error_pos = (const char*) p; | |
| state->_current = (void*) (intptr_t) s_n_llpkgc_dep__internal__n_invoke_llpkgc_dep__on_dep_complete; | |
| return s_error; | |
| } | |
| goto s_n_llpkgc_dep__internal__n_invoke_llpkgc_dep__on_dep_complete; | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_7: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_version; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_5: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_4: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_2: { | |
| switch (llpkgc_dep__internal__c_update_comparator(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_4; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_9: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_4: { | |
| switch (llpkgc_dep__internal__c_update_comparator(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_9; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_10: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_8: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_operator_end; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_3: { | |
| switch (llpkgc_dep__internal__c_update_comparator_3(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_8; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_11: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_3: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_not; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_1: { | |
| switch (llpkgc_dep__internal__c_update_comparator(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_3; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_13: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_6: { | |
| switch (llpkgc_dep__internal__c_update_comparator(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_13; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_14: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_operator_end; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_7: { | |
| switch (llpkgc_dep__internal__c_update_comparator_7(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_14; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_15: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_12: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_less_than; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_5: { | |
| switch (llpkgc_dep__internal__c_update_comparator_5(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_12; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_16: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_operator_end; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_8: { | |
| switch (llpkgc_dep__internal__c_update_comparator_8(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_16; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_18: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_unknown_operator; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_10: { | |
| switch (llpkgc_dep__internal__c_update_comparator(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_18; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_19: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_operator_end; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_11: { | |
| switch (llpkgc_dep__internal__c_update_comparator_11(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_19; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_20: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_before_version; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish_17: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_greater_than; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator_9: { | |
| switch (llpkgc_dep__internal__c_update_comparator_9(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_17; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_error_2: { | |
| state->error = 0x4; | |
| state->reason = "Invalid dependency operator"; | |
| state->error_pos = (const char*) p; | |
| state->_current = (void*) (intptr_t) s_error; | |
| return s_error; | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name: { | |
| const unsigned char* start; | |
| int err; | |
| start = state->_span_pos0; | |
| state->_span_pos0 = NULL; | |
| err = llpkgc_dep__on_dep_name(state, start, p); | |
| if (err != 0) { | |
| state->error = err; | |
| state->error_pos = (const char*) p; | |
| state->_current = (void*) (intptr_t) s_n_llpkgc_dep__internal__n_invoke_update_finish_1; | |
| return s_error; | |
| } | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_1; | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_1: { | |
| const unsigned char* start; | |
| int err; | |
| start = state->_span_pos0; | |
| state->_span_pos0 = NULL; | |
| err = llpkgc_dep__on_dep_name(state, start, p); | |
| if (err != 0) { | |
| state->error = err; | |
| state->error_pos = (const char*) p; | |
| state->_current = (void*) (intptr_t) s_n_llpkgc_dep__internal__n_invoke_update_finish_21; | |
| return s_error; | |
| } | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_21; | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_span_end_llpkgc_dep__on_dep_name_2: { | |
| const unsigned char* start; | |
| int err; | |
| start = state->_span_pos0; | |
| state->_span_pos0 = NULL; | |
| err = llpkgc_dep__on_dep_name(state, start, p); | |
| if (err != 0) { | |
| state->error = err; | |
| state->error_pos = (const char*) p; | |
| state->_current = (void*) (intptr_t) s_n_llpkgc_dep__internal__n_invoke_update_finish_2; | |
| return s_error; | |
| } | |
| goto s_n_llpkgc_dep__internal__n_invoke_update_finish_2; | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_finish: { | |
| switch (llpkgc_dep__internal__c_update_finish(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_first_name_character; | |
| } | |
| UNREACHABLE; | |
| } | |
| s_n_llpkgc_dep__internal__n_invoke_update_comparator: { | |
| switch (llpkgc_dep__internal__c_update_comparator(state, p, endp)) { | |
| default: | |
| goto s_n_llpkgc_dep__internal__n_span_start_llpkgc_dep__on_dep_name; | |
| } | |
| UNREACHABLE; | |
| } | |
| } | |
| int llpkgc_dep__internal_execute(llpkgc_dep__internal_t* state, const char* p, const char* endp) { | |
| llparse_state_t next; | |
| /* check lingering errors */ | |
| if (state->error != 0) { | |
| return state->error; | |
| } | |
| /* restart spans */ | |
| if (state->_span_pos0 != NULL) { | |
| state->_span_pos0 = (void*) p; | |
| } | |
| next = llpkgc_dep__internal__run(state, (const unsigned char*) p, (const unsigned char*) endp); | |
| if (next == s_error) { | |
| return state->error; | |
| } | |
| state->_current = (void*) (intptr_t) next; | |
| /* execute spans */ | |
| if (state->_span_pos0 != NULL) { | |
| int error; | |
| error = ((llpkgc_dep__internal__span_cb) state->_span_cb0)(state, state->_span_pos0, (const char*) endp); | |
| if (error != 0) { | |
| state->error = error; | |
| state->error_pos = endp; | |
| return error; | |
| } | |
| } | |
| return 0; | |
| } | |
| #include <string.h> | |
| #include "llpkgc_dep.h" | |
| int llpkgc_dep__on_dep_complete(llpkgc_dep_t*, const unsigned char*, const unsigned char*); | |
| int llpkgc_dep__on_dep_list_complete(llpkgc_dep_t* s, const unsigned char* p, const unsigned char* endp) { | |
| const llpkgc_dep_settings_t* settings = s->settings; | |
| int err; | |
| if (settings == NULL || settings->on_dep_list_complete == NULL) return 0; | |
| err = settings->on_dep_list_complete(s); | |
| if (err != 0) { | |
| if (s->reason == NULL) s->reason = "User callback error in on_dep_list_complete"; | |
| s->callback_reason = (void*) s->reason; | |
| return PDEP_USER; | |
| } | |
| return 0; | |
| } | |
| int llpkgc_dep__on_dep_name(llpkgc_dep_t* s, const unsigned char* p, const unsigned char* endp) { | |
| const llpkgc_dep_settings_t* settings = s->settings; | |
| int err; | |
| if (settings == NULL || settings->on_dep_name == NULL) return 0; | |
| err = settings->on_dep_name(s, (const char*) p, (size_t) (endp - p)); | |
| if (err != 0) { | |
| if (s->reason == NULL) s->reason = "User callback error in on_dep_name"; | |
| s->callback_reason = (void*) s->reason; | |
| return PDEP_USER; | |
| } | |
| return 0; | |
| } | |
| int llpkgc_dep__on_dep_version(llpkgc_dep_t* s, const unsigned char* p, const unsigned char* endp) { | |
| const llpkgc_dep_settings_t* settings = s->settings; | |
| int err; | |
| if (settings == NULL || settings->on_dep_version == NULL) return 0; | |
| err = settings->on_dep_version(s, (const char*) p, (size_t) (endp - p)); | |
| if (err != 0) { | |
| if (s->reason == NULL) s->reason = "User callback error in on_dep_version"; | |
| s->callback_reason = (void*) s->reason; | |
| return PDEP_USER; | |
| } | |
| return 0; | |
| } | |
| int llpkgc_dep__on_dep_complete(llpkgc_dep_t* s, const unsigned char* p, const unsigned char* endp) { | |
| const llpkgc_dep_settings_t* settings = s->settings; | |
| int err; | |
| if (settings == NULL || settings->on_dep_complete == NULL) return 0; | |
| err = settings->on_dep_complete(s); | |
| if (err != 0) { | |
| if (s->reason == NULL) s->reason = "User callback error in on_dep_complete"; | |
| s->callback_reason = (void*) s->reason; | |
| return PDEP_USER; | |
| } | |
| return 0; | |
| } | |
| void llpkgc_dep_init(llpkgc_dep_t* s, const llpkgc_dep_settings_t* settings) { | |
| llpkgc_dep__internal_init(s); | |
| s->settings = (void*) settings; | |
| } | |
| void llpkgc_dep_reset(llpkgc_dep_t* s) { | |
| const llpkgc_dep_settings_t* settings = s->settings; | |
| void* data = s->data; | |
| llpkgc_dep_init(s, settings); | |
| s->data = data; | |
| } | |
| void llpkgc_dep_settings_init(llpkgc_dep_settings_t* settings) { | |
| memset(settings, 0, sizeof(*settings)); | |
| } | |
| llpkgc_dep_errno_t llpkgc_dep_execute(llpkgc_dep_t* s, const char* data, size_t len) { | |
| if (s->error != 0) return s->error; | |
| if (s->done) { | |
| s->reason = "Input after finish"; | |
| s->error_pos = data; | |
| return s->error = PDEP_INVALID; | |
| } | |
| if (len == 0) return PDEP_OK; | |
| s->end = (void*) (data + len); | |
| { | |
| int err = llpkgc_dep__internal_execute(s, data, data + len); | |
| if (err == PDEP_USER && s->callback_reason != NULL) | |
| s->reason = s->callback_reason; | |
| return err; | |
| } | |
| } | |
| llpkgc_dep_errno_t llpkgc_dep_finish(llpkgc_dep_t* s) { | |
| int err; | |
| if (s->error != 0) return s->error; | |
| if (s->done) return PDEP_OK; | |
| switch (s->finish) { | |
| case 0: | |
| err = llpkgc_dep__on_dep_list_complete(s, s->end, s->end); | |
| if (err != 0) { | |
| s->error = err; | |
| s->error_pos = s->end; | |
| return s->error; | |
| } | |
| break; | |
| case 1: | |
| err = llpkgc_dep__on_dep_complete(s, s->end, s->end); | |
| if (err != 0) { | |
| s->error = err; | |
| s->error_pos = s->end; | |
| return s->error; | |
| } | |
| err = llpkgc_dep__on_dep_list_complete(s, s->end, s->end); | |
| if (err != 0) { | |
| s->error = err; | |
| s->error_pos = s->end; | |
| return s->error; | |
| } | |
| break; | |
| default: s->reason = "Invalid finish action"; return s->error = PDEP_INTERNAL; | |
| } | |
| s->done = 1; | |
| return PDEP_OK; | |
| } | |
| llpkgc_dep_errno_t llpkgc_dep_get_errno(const llpkgc_dep_t* s) { return s->error; } | |
| const char* llpkgc_dep_get_error_reason(const llpkgc_dep_t* s) { return s->reason; } | |
| void llpkgc_dep_set_error_reason(llpkgc_dep_t* s, const char* reason) { s->reason = reason; } | |
| const char* llpkgc_dep_get_error_pos(const llpkgc_dep_t* s) { return s->error_pos; } | |
| const char* llpkgc_dep_errno_name(llpkgc_dep_errno_t err) { | |
| switch (err) { | |
| case PDEP_OK: return "PDEP_OK"; | |
| case PDEP_USER: return "PDEP_USER"; | |
| case PDEP_UNFINISHED: return "PDEP_UNFINISHED"; | |
| case PDEP_INVALID: return "PDEP_INVALID"; | |
| default: return "PDEP_INTERNAL"; | |
| } | |
| } | |