1#ifndef SOURCEMETA_BLAZE_EVALUATOR_TEMPLATE_H
2#define SOURCEMETA_BLAZE_EVALUATOR_TEMPLATE_H
4#ifndef SOURCEMETA_BLAZE_EVALUATOR_EXPORT
5#include <sourcemeta/blaze/evaluator_export.h>
8#include <sourcemeta/blaze/evaluator_value.h>
10#include <sourcemeta/core/jsonpointer.h>
17namespace sourcemeta::blaze {
22enum class InstructionIndex : std::uint8_t {
25 AssertionDefinesStrict,
27 AssertionDefinesAllStrict,
28 AssertionDefinesExactly,
29 AssertionDefinesExactlyStrict,
30 AssertionDefinesExactlyStrictHash3,
31 AssertionPropertyDependencies,
35 AssertionTypeStrictAny,
36 AssertionNotTypeStrictAny,
37 AssertionTypeStringBounded,
38 AssertionTypeStringUpper,
39 AssertionTypeArrayBounded,
40 AssertionTypeArrayUpper,
41 AssertionTypeObjectBounded,
42 AssertionTypeObjectUpper,
44 AssertionStringSizeLess,
45 AssertionStringSizeGreater,
46 AssertionArraySizeLess,
47 AssertionArraySizeGreater,
48 AssertionObjectSizeLess,
49 AssertionObjectSizeGreater,
52 AssertionEqualsAnyStringHash,
53 AssertionGreaterEqual,
59 AssertionTypeIntegerBounded,
60 AssertionTypeIntegerBoundedStrict,
61 AssertionTypeIntegerLowerBound,
62 AssertionTypeIntegerLowerBoundStrict,
63 AssertionNumberIntegerBounded,
66 AssertionPropertyType,
67 AssertionPropertyTypeEvaluate,
68 AssertionPropertyTypeStrict,
69 AssertionPropertyTypeStrictEvaluate,
70 AssertionPropertyTypeStrictAny,
71 AssertionPropertyTypeStrictAnyEvaluate,
72 AssertionPropertyEqual,
74 AssertionArrayPrefixEvaluate,
75 AssertionObjectPropertiesSimple,
77 AnnotationEmitWrapped,
79 AnnotationBasenameToParent,
89 LogicalWhenArraySizeGreater,
90 LoopPropertiesUnevaluated,
91 LoopPropertiesUnevaluatedExcept,
93 LoopPropertiesMatchClosed,
95 LoopPropertiesEvaluate,
97 LoopPropertiesRegexClosed,
98 LoopPropertiesStartsWith,
101 LoopPropertiesTypeEvaluate,
102 LoopPropertiesExactlyTypeStrict,
103 LoopPropertiesExactlyTypeStrictHash,
104 LoopPropertiesTypeStrict,
105 LoopPropertiesTypeStrictEvaluate,
106 LoopPropertiesTypeStrictAny,
107 LoopPropertiesTypeStrictAnyEvaluate,
111 LoopItemsUnevaluated,
114 LoopItemsTypeStrictAny,
115 LoopItemsPropertiesExactlyTypeStrictHash,
116 LoopItemsPropertiesExactlyTypeStrictHash3,
117 LoopItemsIntegerBounded,
118 LoopItemsIntegerBoundedSized,
119 LoopItemsArrayBoundedTypeStrictAny,
122 ControlGroupWhenDefines,
123 ControlGroupWhenDefinesDirect,
124 ControlGroupWhenType,
126 ControlDynamicAnchorJump,
132constexpr std::string_view INSTRUCTION_NAMES[] = {
135 "AssertionDefinesStrict",
136 "AssertionDefinesAll",
137 "AssertionDefinesAllStrict",
138 "AssertionDefinesExactly",
139 "AssertionDefinesExactlyStrict",
140 "AssertionDefinesExactlyStrictHash3",
141 "AssertionPropertyDependencies",
144 "AssertionTypeStrict",
145 "AssertionTypeStrictAny",
146 "AssertionNotTypeStrictAny",
147 "AssertionTypeStringBounded",
148 "AssertionTypeStringUpper",
149 "AssertionTypeArrayBounded",
150 "AssertionTypeArrayUpper",
151 "AssertionTypeObjectBounded",
152 "AssertionTypeObjectUpper",
154 "AssertionStringSizeLess",
155 "AssertionStringSizeGreater",
156 "AssertionArraySizeLess",
157 "AssertionArraySizeGreater",
158 "AssertionObjectSizeLess",
159 "AssertionObjectSizeGreater",
161 "AssertionEqualsAny",
162 "AssertionEqualsAnyStringHash",
163 "AssertionGreaterEqual",
164 "AssertionLessEqual",
168 "AssertionDivisible",
169 "AssertionTypeIntegerBounded",
170 "AssertionTypeIntegerBoundedStrict",
171 "AssertionTypeIntegerLowerBound",
172 "AssertionTypeIntegerLowerBoundStrict",
173 "AssertionNumberIntegerBounded",
174 "AssertionNumberType",
175 "AssertionStringType",
176 "AssertionPropertyType",
177 "AssertionPropertyTypeEvaluate",
178 "AssertionPropertyTypeStrict",
179 "AssertionPropertyTypeStrictEvaluate",
180 "AssertionPropertyTypeStrictAny",
181 "AssertionPropertyTypeStrictAnyEvaluate",
182 "AssertionPropertyEqual",
183 "AssertionArrayPrefix",
184 "AssertionArrayPrefixEvaluate",
185 "AssertionObjectPropertiesSimple",
187 "AnnotationEmitWrapped",
188 "AnnotationToParent",
189 "AnnotationBasenameToParent",
192 "LogicalNotEvaluate",
198 "LogicalWhenDefines",
199 "LogicalWhenArraySizeGreater",
200 "LoopPropertiesUnevaluated",
201 "LoopPropertiesUnevaluatedExcept",
202 "LoopPropertiesMatch",
203 "LoopPropertiesMatchClosed",
205 "LoopPropertiesEvaluate",
206 "LoopPropertiesRegex",
207 "LoopPropertiesRegexClosed",
208 "LoopPropertiesStartsWith",
209 "LoopPropertiesExcept",
210 "LoopPropertiesType",
211 "LoopPropertiesTypeEvaluate",
212 "LoopPropertiesExactlyTypeStrict",
213 "LoopPropertiesExactlyTypeStrictHash",
214 "LoopPropertiesTypeStrict",
215 "LoopPropertiesTypeStrictEvaluate",
216 "LoopPropertiesTypeStrictAny",
217 "LoopPropertiesTypeStrictAnyEvaluate",
221 "LoopItemsUnevaluated",
223 "LoopItemsTypeStrict",
224 "LoopItemsTypeStrictAny",
225 "LoopItemsPropertiesExactlyTypeStrictHash",
226 "LoopItemsPropertiesExactlyTypeStrictHash3",
227 "LoopItemsIntegerBounded",
228 "LoopItemsIntegerBoundedSized",
229 "LoopItemsArrayBoundedTypeStrictAny",
232 "ControlGroupWhenDefines",
233 "ControlGroupWhenDefinesDirect",
234 "ControlGroupWhenType",
236 "ControlDynamicAnchorJump",
244 case InstructionIndex::AnnotationBasenameToParent:
246 case InstructionIndex::AnnotationToParent:
248 case InstructionIndex::AnnotationEmit:
250 case InstructionIndex::AnnotationEmitWrapped:
262 case InstructionIndex::AnnotationBasenameToParent:
263 case InstructionIndex::AnnotationEmitWrapped:
287 sourcemeta::core::Pointer relative_schema_location;
288 std::string keyword_location;
289 std::size_t schema_resource;
290 std::size_t vocabulary;
304 InstructionIndex type;
305 sourcemeta::core::Pointer relative_instance_location;
308 std::size_t extra_index;
320 const sourcemeta::core::WeakPointer &evaluate_path,
321 const sourcemeta::core::WeakPointer &instance_location,
322 const sourcemeta::core::JSON &instance,
323 const sourcemeta::core::JSON &annotation) -> std::string;
std::size_t message_detail
Definition evaluator_instruction.h:297
std::size_t message
Definition evaluator_instruction.h:293
auto is_wrapped_annotation(const InstructionIndex type) noexcept -> bool
Definition evaluator_instruction.h:259
auto is_annotation(const InstructionIndex type) noexcept -> bool
Definition evaluator_instruction.h:241
auto describe(const Template &schema_template, const bool valid, const Instruction &step, const sourcemeta::core::WeakPointer &evaluate_path, const sourcemeta::core::WeakPointer &instance_location, const sourcemeta::core::JSON &instance, const sourcemeta::core::JSON &annotation) -> std::string
std::vector< Instruction > Instructions
Definition evaluator_instruction.h:282