schemurai 3.0.0 → 3.0.2

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -4
  3. data/ext/schemurai_native/Cargo.lock +55 -1
  4. data/ext/schemurai_native/Cargo.toml +4 -1
  5. data/ext/schemurai_native/extconf.rb +1 -1
  6. data/ext/schemurai_native/glue.c +1679 -62
  7. data/ext/schemurai_native/protocol.def +45 -0
  8. data/ext/schemurai_native/src/budget.rs +49 -0
  9. data/ext/schemurai_native/src/container.rs +460 -0
  10. data/ext/schemurai_native/src/content.rs +74 -27
  11. data/ext/schemurai_native/src/diagnostics/array.rs +392 -0
  12. data/ext/schemurai_native/src/diagnostics/object.rs +218 -0
  13. data/ext/schemurai_native/src/diagnostics.rs +1087 -307
  14. data/ext/schemurai_native/src/enumeration.rs +6 -1
  15. data/ext/schemurai_native/src/evaluation.rs +49 -20
  16. data/ext/schemurai_native/src/format.rs +126 -14
  17. data/ext/schemurai_native/src/graph.rs +37 -0
  18. data/ext/schemurai_native/src/instance_graph.rs +90 -0
  19. data/ext/schemurai_native/src/integer_scan.rs +132 -0
  20. data/ext/schemurai_native/src/lib.rs +917 -238
  21. data/ext/schemurai_native/src/memo.rs +11 -38
  22. data/ext/schemurai_native/src/number/arbitrary.rs +154 -0
  23. data/ext/schemurai_native/src/number.rs +250 -59
  24. data/ext/schemurai_native/src/pattern.rs +147 -109
  25. data/ext/schemurai_native/src/pointer.rs +97 -0
  26. data/ext/schemurai_native/src/runtime/properties.rs +162 -0
  27. data/ext/schemurai_native/src/runtime/reports.rs +266 -0
  28. data/ext/schemurai_native/src/runtime/scopes.rs +430 -0
  29. data/ext/schemurai_native/src/runtime.rs +1020 -0
  30. data/ext/schemurai_native/src/scope.rs +60 -16
  31. data/ext/schemurai_native/src/string.rs +68 -0
  32. data/ext/schemurai_native/src/tracking.rs +244 -174
  33. data/lib/schemurai/container_checks/array_diagnostics.rb +119 -0
  34. data/lib/schemurai/container_checks/object_diagnostics.rb +152 -0
  35. data/lib/schemurai/container_checks.rb +534 -0
  36. data/lib/schemurai/decimal.rb +11 -0
  37. data/lib/schemurai/dialect.rb +0 -12
  38. data/lib/schemurai/ecma_regexp.rb +46 -0
  39. data/lib/schemurai/evaluation_pool.rb +66 -0
  40. data/lib/schemurai/evaluator.rb +9 -48
  41. data/lib/schemurai/json_pointer.rb +11 -0
  42. data/lib/schemurai/native/diagnostics.rb +4 -3
  43. data/lib/schemurai/native/evaluator.rb +38 -10
  44. data/lib/schemurai/native/null_numeric.rb +23 -0
  45. data/lib/schemurai/number_checks.rb +128 -0
  46. data/lib/schemurai/string_checks.rb +166 -0
  47. data/lib/schemurai/type_checks.rb +59 -0
  48. data/lib/schemurai/value_equality.rb +72 -0
  49. data/lib/schemurai/version.rb +1 -1
  50. data/lib/schemurai/vm/compiler.rb +18 -26
  51. data/lib/schemurai/vm/evaluator.rb +87 -545
  52. data/lib/schemurai/vm/limited_evaluator.rb +7 -22
  53. metadata +25 -2
@@ -1,5 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "../decimal"
4
+ require_relative "../number_checks"
5
+ require_relative "../type_checks"
6
+
3
7
  module Schemurai
4
8
  module VM
5
9
  NumberRules = Data.define(
@@ -11,21 +15,21 @@ module Schemurai
11
15
  :multiple_of
12
16
  )
13
17
 
14
- MAXIMUM = 1 << 0
15
- MINIMUM = 1 << 1
16
- EXCLUSIVE_MAXIMUM = 1 << 2
17
- EXCLUSIVE_MINIMUM = 1 << 3
18
- MULTIPLE_OF = 1 << 4
18
+ MAXIMUM = Internal::NumberChecks::MAXIMUM
19
+ MINIMUM = Internal::NumberChecks::MINIMUM
20
+ EXCLUSIVE_MAXIMUM = Internal::NumberChecks::EXCLUSIVE_MAXIMUM
21
+ EXCLUSIVE_MINIMUM = Internal::NumberChecks::EXCLUSIVE_MINIMUM
22
+ MULTIPLE_OF = Internal::NumberChecks::MULTIPLE_OF
19
23
 
20
24
  TypeRules = Data.define(:mask, :names)
21
25
 
22
- TYPE_NULL = 1 << 0
23
- TYPE_BOOLEAN = 1 << 1
24
- TYPE_OBJECT = 1 << 2
25
- TYPE_ARRAY = 1 << 3
26
- TYPE_NUMBER = 1 << 4
27
- TYPE_INTEGER = 1 << 5
28
- TYPE_STRING = 1 << 6
26
+ TYPE_NULL = Internal::TypeChecks::NULL
27
+ TYPE_BOOLEAN = Internal::TypeChecks::BOOLEAN
28
+ TYPE_OBJECT = Internal::TypeChecks::OBJECT
29
+ TYPE_ARRAY = Internal::TypeChecks::ARRAY
30
+ TYPE_NUMBER = Internal::TypeChecks::NUMBER
31
+ TYPE_INTEGER = Internal::TypeChecks::INTEGER
32
+ TYPE_STRING = Internal::TypeChecks::STRING
29
33
 
30
34
  TRACKS_EVALUATION = 1 << 0
31
35
  TRACKS_DYNAMIC_SCOPE = 1 << 1
@@ -40,15 +44,7 @@ module Schemurai
40
44
  KEYWORD_OBJECT = DIALECT::OBJECT
41
45
  private_constant :DIALECT
42
46
 
43
- TYPE_BITS = {
44
- "null" => TYPE_NULL,
45
- "boolean" => TYPE_BOOLEAN,
46
- "object" => TYPE_OBJECT,
47
- "array" => TYPE_ARRAY,
48
- "number" => TYPE_NUMBER,
49
- "integer" => TYPE_INTEGER,
50
- "string" => TYPE_STRING
51
- }.freeze
47
+ TYPE_BITS = Internal::TypeChecks::BITS
52
48
 
53
49
  TYPE_OPCODES = {
54
50
  "null" => :type_null,
@@ -145,10 +141,6 @@ module Schemurai
145
141
  freeze
146
142
  end
147
143
 
148
- def tracks_evaluation?
149
- @tracks_evaluation
150
- end
151
-
152
144
  def recursive_anchor?
153
145
  @recursive_anchor
154
146
  end
@@ -411,7 +403,7 @@ module Schemurai
411
403
  private def compile_decimal(value)
412
404
  return value if value.nil? || value.is_a?(Integer) || value.is_a?(Rational)
413
405
 
414
- Rational(value.to_s)
406
+ Internal::Decimal.parse(value)
415
407
  end
416
408
  end
417
409
  end