dtr_core 0.5.6 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e53ede493820fa8b4b1ab11144e85fdd24299dd5cbed9d81d28f84598431e3bb
4
- data.tar.gz: 58fb5680bfc4fcda2a064d4328288849e44e352eba01c6dcb4ba219e2af517dc
3
+ metadata.gz: daf7d4ee7b08b952fd8fe687e0dd6edbfa09bd576d35cb1b50d24528a411dc2b
4
+ data.tar.gz: d65462fe604c303f6be6317170582ee0e98bc2ccc459cdde0b2dbd8cf5024e23
5
5
  SHA512:
6
- metadata.gz: 1ed541c5bd2d6cd8ba969867d78fb5b4977eae04b9fb9124ef3178b8255565302626bf88979013a9c84cfa93e98871ee1cdf5bd19cd1e280ca68c0461ace2e86
7
- data.tar.gz: 5456ed8bb4e25b422363a01a55f2c59465e83af83ca384ea5525d218009387402307256d6cfcf00e59ffca9992f29ac8cfdc79df2633fb7486f2cad2e03b11c0
6
+ metadata.gz: 014bd2182a685a04e2acf4349055431102fd48a96f4a0a8928603279af66f4059175d8fe7ed8f9c39d93c8e0388e5e41ca0417ab0539b693e67621f59bab0c78
7
+ data.tar.gz: a650d2cb77f65292991eabe585d771a0a797b26cab9c30f5b46cb34137365499edb02c80235388240d982c9c1825bdd0fa2d78207b67e77aa49c19b0a1d92144
@@ -3,16 +3,18 @@
3
3
  module DTRCore
4
4
  # Common methods used by the DTRCore module.
5
5
  module Common
6
- def strip_and_remove_quotes(str)
7
- str.strip.gsub(/['"]/, '')
8
- end
9
-
10
6
  def split_strip_select(some_list)
11
7
  some_list&.split("\n")&.map(&:strip)&.select { |x| x.length.positive? }
12
8
  end
13
9
 
14
- def first_match_for_content(pattern)
15
- content.match(pattern)&.captures&.first
10
+ def capture_section(pattern)
11
+ captures = content.match(pattern)&.captures
12
+
13
+ if content.scan(pattern).length > 1
14
+ raise 'Multiple captures found for a section.'
15
+ elsif captures
16
+ captures&.first
17
+ end
16
18
  end
17
19
 
18
20
  def clean_name(definition)
@@ -3,31 +3,34 @@
3
3
  module DTRCore
4
4
  # Represents a contract in a DTR file.
5
5
  class Contract
6
- attr_reader :functions, :name, :state, :user_defined_types
6
+ attr_reader :helpers, :interface, :name, :state, :user_defined_types
7
7
 
8
- def initialize(name, state, functions, user_defined_types)
8
+ def initialize(name, state, interface, user_defined_types, helpers)
9
9
  @name = name
10
10
  @state = state
11
- @functions = functions
11
+ @interface = interface
12
12
  @user_defined_types = user_defined_types
13
+ @helpers = helpers
13
14
  end
14
15
 
15
16
  def self.from_dtr(filepath)
16
17
  parser = DTRCore::Parser.new(filepath)
17
18
 
18
- new(parser.name_section, parser.state_section, parser.function_section, parser.user_defined_types_section)
19
+ new(parser.name_section, parser.state_section, parser.interface_section, parser.user_defined_types_section,
20
+ parser.helpers_section)
19
21
  end
20
22
 
21
23
  def self.from_dtr_raw(content)
22
24
  parser = DTRCore::Parser.new('', content:)
23
25
 
24
- new(parser.name_section, parser.state_section, parser.function_section, parser.user_defined_types_section)
26
+ new(parser.name_section, parser.state_section, parser.interface_section, parser.user_defined_types_section,
27
+ parser.helpers_section)
25
28
  end
26
29
 
27
30
  def ==(other)
28
31
  name == other.name &&
29
32
  state == other.state &&
30
- functions == other.functions &&
33
+ interface == other.interface &&
31
34
  user_defined_types == other.user_defined_types
32
35
  end
33
36
 
@@ -36,8 +39,9 @@ module DTRCore
36
39
 
37
40
  return_string += name_to_s
38
41
  return_string += "#{state_to_s}\n"
39
- return_string += functions_to_s
42
+ return_string += interface_to_s
40
43
  return_string += user_defined_types_to_s
44
+ return_string += helpers_to_s
41
45
 
42
46
  return_string
43
47
  end
@@ -51,19 +55,25 @@ module DTRCore
51
55
  def state_to_s
52
56
  return '' if @state.nil?
53
57
 
54
- "[State]:\n#{@state&.map(&:to_s)&.join("\n")}\n"
58
+ "[State]:\n#{@state&.map(&:to_s)&.join("\n")}\n:[State]\n"
55
59
  end
56
60
 
57
- def functions_to_s
61
+ def interface_to_s
58
62
  return '' if @state.nil?
59
63
 
60
- "[InternalFunctions]:\n#{@functions&.map(&:to_s)&.join("\n")}\n:[InternalFunctions]\n"
64
+ "[Interface]:\n#{@interface&.map(&:to_s)&.join("\n")}\n:[Interface]\n"
61
65
  end
62
66
 
63
67
  def user_defined_types_to_s
64
68
  return '' if @user_defined_types.nil?
65
69
 
66
- "[UserDefinedTypes]:\n#{@user_defined_types&.map(&:to_s)&.join("\n")}\n:[UserDefinedTypes]\n"
70
+ "[User Defined Types]:\n#{@user_defined_types&.map(&:to_s)&.join("\n")}\n:[User Defined Types]\n"
71
+ end
72
+
73
+ def helpers_to_s
74
+ return '' if @helpers.nil?
75
+
76
+ "[Helpers]:\n#{@helpers&.map(&:to_s)&.join("\n")}\n:[Helpers]\n"
67
77
  end
68
78
  end
69
79
  end
@@ -65,7 +65,8 @@ module DTRCore
65
65
  end
66
66
 
67
67
  def output_to_s
68
- return "" if output.nil?
68
+ return '' if output.nil?
69
+
69
70
  " * Output: #{output}\n"
70
71
  end
71
72
 
@@ -75,19 +76,13 @@ module DTRCore
75
76
  return_string += " * Instructions:\n"
76
77
  return_string += " $\n"
77
78
  @instructions.each do |x|
78
- return_string += " #{single_instruction_to_s(x)}\n"
79
+ return_string += " #{x}\n"
79
80
  end
80
81
  return_string += " $\n"
81
82
 
82
83
  return_string
83
84
  end
84
85
 
85
- def single_instruction_to_s(ins)
86
- "{ instruction: #{ins[:instruction]}," \
87
- "input: (#{ins[:inputs]&.join(', ')}), " \
88
- "assign: #{ins[:assign]}, scope: #{ins[:scope]} }\n"
89
- end
90
-
91
86
  def format_function_inputs(inputs)
92
87
  return [] if inputs.nil?
93
88
 
@@ -99,12 +94,16 @@ module DTRCore
99
94
  end
100
95
 
101
96
  def parse_function_instruction(instruction)
102
- {
103
- instruction: instruction[/instruction:\s*(?<all>[^\s,]+)/, 1],
104
- inputs: parse_function_instruction_input(instruction),
105
- assign: instruction[/\s*assign:\s*(?<all>[^\s\,]+)/, 1],
106
- scope: instruction[/\s*scope:\s*(?<all>[^\s\,]+)/, 1].to_i || 0
107
- }
97
+ instruction = DTRCore::Instruction.new(
98
+ instruction[/instruction:\s*(?<all>[^\s,]+)/, 1],
99
+ parse_function_instruction_input(instruction),
100
+ instruction[/\s*assign:\s*(?<all>[^\s\,]+)/, 1],
101
+ instruction[/\s*scope:\s*(?<all>[^\s\,]+)/, 1].to_i || 0
102
+ )
103
+
104
+ raise "Invalid instruction: #{instruction}" unless instruction.valid?
105
+
106
+ instruction
108
107
  end
109
108
 
110
109
  def parse_function_instruction_input(definition)
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DTRCore
4
+ # Instruction class
5
+ class Instruction
6
+ attr_reader :instruction, :inputs, :assign, :scope
7
+
8
+ def initialize(instruction, inputs, assign, scope)
9
+ @instruction = instruction
10
+ @inputs = inputs
11
+ @assign = assign
12
+ @scope = scope
13
+ end
14
+
15
+ def ==(other)
16
+ instruction == other.instruction &&
17
+ inputs == other.inputs &&
18
+ assign == other.assign &&
19
+ scope == other.scope
20
+ end
21
+
22
+ def to_s
23
+ "{ instruction: #{instruction}," \
24
+ "input: (#{inputs&.join(', ')}), " \
25
+ "assign: #{assign}, scope: #{scope} }"
26
+ end
27
+
28
+ def valid?
29
+ DTRCore::InstructionValidator.new(self).valid?
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dtr_core/common'
4
+
5
+ module DTRCore
6
+ # Instruction validator for DTR types.
7
+ class InstructionValidator
8
+ include ::DTRCore::Common
9
+
10
+ def initialize(instruction)
11
+ @instruction = instruction
12
+
13
+ validate_input!
14
+ end
15
+
16
+ # rubocop:disable Metrics/CyclomaticComplexity
17
+ # rubocop:disable Metrics/MethodLength
18
+ def valid?
19
+ return false unless scope_valid?
20
+
21
+ case @instruction.instruction
22
+ when 'assign', 'evaluate', 'log_string'
23
+ validate_basic_operation!
24
+ when 'exit_with_message', 'return'
25
+ validate_terminating_operation!
26
+ when 'and', 'or'
27
+ validate_logical_operation!
28
+ when 'conditional_goto', 'conditional_jump', 'end_of_iteration_check', 'label', 'unconditional_goto', 'unconditional_jump'
29
+ validate_unconditional_jump_operation!
30
+ when 'contract_address'
31
+ validate_smart_contract_specific_operation!
32
+ when 'create_dictionary', 'create_list', 'create_range', 'create_tuple',
33
+ 'field', 'initialize_udt'
34
+ validate_object_operation!
35
+ when 'add', 'subtract', 'multiply', 'divide',
36
+ 'add_and_assign', 'subtract_and_assign', 'multiply_and_assign', 'divide_and_assign'
37
+ validate_binary_operation!
38
+ else
39
+ false
40
+ end
41
+ end
42
+ # rubocop:enable Metrics/MethodLength
43
+ # rubocop:enable Metrics/CyclomaticComplexity
44
+
45
+ private
46
+
47
+ def validate_input!
48
+ raise 'Missing Instruction.' if @instruction.nil?
49
+ raise 'Instruction name missing.' if @instruction.instruction.nil?
50
+ raise 'Instruction missing scope.' if @instruction.scope.nil?
51
+ end
52
+
53
+ def scope_valid?
54
+ @instruction.scope >= 0
55
+ end
56
+
57
+ def validate_basic_operation!
58
+ true
59
+ end
60
+
61
+ def validate_terminating_operation!
62
+ true
63
+ end
64
+
65
+ def validate_logical_operation!
66
+ @instruction.inputs&.length == 2
67
+ end
68
+
69
+ def validate_unconditional_jump_operation!
70
+ true
71
+ end
72
+
73
+ def validate_smart_contract_specific_operation!
74
+ true
75
+ end
76
+
77
+ def validate_object_operation!
78
+ true
79
+ end
80
+
81
+ def validate_binary_operation!
82
+ @instruction.inputs&.length == 2
83
+ end
84
+ end
85
+ end
@@ -2,22 +2,13 @@
2
2
 
3
3
  module DTRCore
4
4
  module Number
5
- MIN_U32 = 0
6
- MAX_U32 = (2**32) - 1
5
+ MIN_Integer = -2**31
6
+ MAX_Integer = (2**31) - 1
7
7
 
8
- MIN_U64 = 0
9
- MAX_U64 = (2**64) - 1
8
+ MIN_BigInteger = -2**255
9
+ MAX_BigInteger = (2**255) - 1
10
10
 
11
- MIN_U256 = 0
12
- MAX_U256 = (2**256) - 1
13
-
14
- MIN_I32 = -2**31
15
- MAX_I32 = (2**31) - 1
16
-
17
- MIN_I64 = -2**63
18
- MAX_I64 = (2**63) - 1
19
-
20
- MIN_I256 = -2**255
21
- MAX_I256 = (2**255) - 1
11
+ MIN_Float = -2**31
12
+ MAX_Float = (2**31) - 1
22
13
  end
23
14
  end
@@ -23,7 +23,7 @@ module DTRCore
23
23
  def name_section
24
24
  return @name_section if @name_section
25
25
 
26
- name_section = first_match_for_content(/\[Contract\]:\s*(.+)/)
26
+ name_section = capture_section(/\[Contract\]:\s*(.+)/)
27
27
 
28
28
  raise 'Missing contract name.' if name_section.nil?
29
29
 
@@ -33,7 +33,7 @@ module DTRCore
33
33
  def state_section
34
34
  return @state_definitions if @state_definitions
35
35
 
36
- state_section = first_match_for_content(/\[State\]:\s*((?:\s*\*\s*\[.+?\]\n(?:\s*\*.+\n?)*)*)/)
36
+ state_section = capture_section(/\[State\]:\s*((?:\s*\*\s*\[.+?\]\n(?:\s*\*.+\n?)*)*)\s*:\[State\]/)
37
37
 
38
38
  return nil if state_section.nil?
39
39
 
@@ -46,29 +46,29 @@ module DTRCore
46
46
  @state_section ||= state_definitions
47
47
  end
48
48
 
49
- def function_section
49
+ def interface_section
50
50
  return @function_definitions if @function_definitions
51
51
 
52
- function_section = first_match_for_content(/\[InternalFunctions\]:(?<all>.*):\[InternalFunctions\]/m)
52
+ interface_section = capture_section(/\[Interface\]:(?<all>.*):\[Interface\]/m)
53
53
 
54
- return nil if function_section.nil?
54
+ return nil if interface_section.nil?
55
55
 
56
- function_definitions = function_section.split('-()').map do |x|
56
+ function_definitions = interface_section.split('-()').map do |x|
57
57
  DTRCore::Function.from_definition(x.strip.to_s)
58
58
  end
59
59
 
60
60
  function_definitions.reject! { |x| x.name.nil? }
61
61
 
62
- raise 'Empty function section.' if function_definitions.empty?
62
+ raise 'Empty interface section.' if function_definitions.empty?
63
63
 
64
- @function_section ||= function_definitions
64
+ @interface_section ||= function_definitions
65
65
  end
66
66
 
67
67
  def user_defined_types_section
68
68
  return @user_defined_types if @user_defined_types
69
69
 
70
70
  user_defined_types_regex = /\[User Defined Types\]:([\s\S]*?)\s*:\[User Defined Types\]/
71
- user_defined_types_section_parsed_out = first_match_for_content(user_defined_types_regex)
71
+ user_defined_types_section_parsed_out = capture_section(user_defined_types_regex)
72
72
 
73
73
  return nil if user_defined_types_section_parsed_out.nil?
74
74
 
@@ -79,5 +79,23 @@ module DTRCore
79
79
 
80
80
  @user_defined_types_section ||= user_defined_types
81
81
  end
82
+
83
+ def helpers_section
84
+ return @function_definitions if @function_definitions
85
+
86
+ helpers_section = capture_section(/\[Helpers\]:(?<all>.*)\s*:\[Helpers\]/m)
87
+
88
+ return nil if helpers_section.nil?
89
+
90
+ function_definitions = helpers_section.split('-()').map do |x|
91
+ DTRCore::Function.from_definition(x.strip.to_s)
92
+ end
93
+
94
+ function_definitions.reject! { |x| x.name.nil? }
95
+
96
+ raise 'Empty helpers section.' if function_definitions.empty?
97
+
98
+ @helpers_section ||= function_definitions
99
+ end
82
100
  end
83
101
  end
@@ -29,30 +29,18 @@ module DTRCore
29
29
  ## Instructions ##
30
30
  INSTRUCTIONS = [
31
31
  # basic operations
32
- { name: 'return', description: 'Return a value from a function.', category: INSTRUCTION_CATEGORY_BASIC },
32
+ { name: 'return', description: 'return a value from a function.', category: INSTRUCTION_CATEGORY_BASIC },
33
33
  { name: 'assign', description: 'Assign a value to a variable.', category: INSTRUCTION_CATEGORY_BASIC },
34
34
  { name: 'panic', description: 'Exit, quickly, and loudly.', category: INSTRUCTION_CATEGORY_BASIC },
35
- # state operations
36
- { name: 'fetch_state', description: 'Fetch a value from the state.', category: INSTRUCTION_CATEGORY_STATE },
37
35
  { name: 'save_state', description: 'Save a value to the state.', category: INSTRUCTION_CATEGORY_STATE },
38
36
  # untyped operations
39
37
  { name: 'add', description: 'Add two things of unknown types together.', category: INSTRUCTION_CATEGORY_UNTYPED },
40
- { name: 'add_and_assign',
41
- description: 'Add two things of unknown types together and then assign to the first one.',
42
- category: INSTRUCTION_CATEGORY_UNTYPED },
43
38
  { name: 'subtract', description: 'Subtract two things of unknown types together.',
44
39
  category: INSTRUCTION_CATEGORY_UNTYPED },
45
40
  { name: 'divide', description: 'Divide two things of unknown types together.',
46
41
  category: INSTRUCTION_CATEGORY_UNTYPED },
47
42
  { name: 'multiply', description: 'Multiply two things of unknown types together.',
48
43
  category: INSTRUCTION_CATEGORY_UNTYPED },
49
- # numeric operations
50
- { name: 'add_numbers', description: 'Add two numbers.', category: INSTRUCTION_CATEGORY_NUMERIC },
51
- { name: 'subtract_numbers', description: 'Subtract two numbers.', category: INSTRUCTION_CATEGORY_NUMERIC },
52
- { name: 'multiply_numbers', description: 'Multiply two numbers.', category: INSTRUCTION_CATEGORY_NUMERIC },
53
- { name: 'divide_numbers', description: 'Divide two numbers.', category: INSTRUCTION_CATEGORY_NUMERIC },
54
- # string operations
55
- { name: 'add_strings', description: 'Concatenate two strings.', category: INSTRUCTION_CATEGORY_STRING },
56
44
  # environment operations
57
45
  { name: 'contract_address', description: 'Get the contract address.',
58
46
  category: INSTRUCTION_CATEGORY_ENVIRONMENT },
@@ -63,9 +51,9 @@ module DTRCore
63
51
  { name: 'field', description: 'Reference an object field.', category: INSTRUCTION_CATEGORY_OBJECTS },
64
52
  { name: 'initialize_udt', description: 'Instantiate UDT object.', category: INSTRUCTION_CATEGORY_OBJECTS },
65
53
  # conditional operations
66
- { name: 'conditional_jump', description: 'Jump to a label if first input is true.',
54
+ { name: 'conditional_unconditional_jump', description: 'unconditional_jump to a label if first input is true.',
67
55
  category: INSTRUCTION_CATEGORY_CONDITIONAL },
68
- { name: 'unconditional_jump', description: 'Jump to a no matter what.',
56
+ { name: 'unconditional_unconditional_jump', description: 'unconditional_jump to a no matter what.',
69
57
  category: INSTRUCTION_CATEGORY_CONDITIONAL },
70
58
  # logical operations
71
59
  { name: 'and', description: 'Logical AND.', category: INSTRUCTION_CATEGORY_LOGICAL },
@@ -78,21 +66,21 @@ module DTRCore
78
66
  'address',
79
67
  'boolean',
80
68
  # string types
81
- 'symbol',
69
+ 'String',
82
70
  # collection types
83
71
  'array',
84
72
  'map',
85
73
  # numeric types
86
74
  ## signed
87
- 'i32',
75
+ 'Integer',
88
76
  'i64',
89
- 'i128',
90
- 'i256',
77
+ 'BigInteger',
78
+ 'BigInteger',
91
79
  ## unsigned
92
- 'u32',
93
- 'u64',
80
+ 'Integer',
81
+ 'Integer',
94
82
  'u128',
95
- 'u256'
83
+ 'BigInteger'
96
84
  ].freeze
97
85
  end
98
86
  end
@@ -13,31 +13,69 @@ module DTRCore
13
13
  end
14
14
 
15
15
  def validate_then_coerce_initial_value!
16
+ validate_input!
17
+
18
+ return validate_integer! if %w[Integer BigInteger Float].include?(@type_name)
19
+ return validate_string! if ['String'].include?(@type_name)
20
+ return validate_address! if ['Address'].include?(@type_name)
21
+
22
+ raise 'Missing Invalid Type Name.'
23
+ end
24
+
25
+ private
26
+
27
+ def validate_input!
16
28
  raise 'Missing Type Name.' if @type_name.nil?
17
29
  raise 'Missing Initial Value.' if @initial_value.nil?
30
+ end
18
31
 
19
- case @type_name
20
- when 'I32', 'I64', 'I256', 'U32', 'U64', 'U256'
21
- validate_numeric!
22
-
23
- # TODO: check type
24
- when 'Symbol', 'String'
25
- strip_and_remove_quotes(@initial_value)
26
- else
27
- raise 'Missing Invalid Type Name.'
28
- end
32
+ # TODO: implement deeper validation for Address type
33
+ # TODO: confirm this works for non-Stellar addresses
34
+ def validate_address!
35
+ raise "Invalid initial value for Address: #{@initial_value}. Wrong type." unless @initial_value.length == 56
36
+
37
+ @initial_value
29
38
  end
30
39
 
31
- private
40
+ def validate_string!
41
+ unless @initial_value.is_a?(String) && @initial_value.match(/".*"/)
42
+ raise "Invalid initial value for String: #{@initial_value}. Wrong type."
43
+ end
32
44
 
33
- def validate_numeric!
34
- raise 'Invalid initial value for type. Wrong type.' unless @initial_value =~ (/^[\-\.\d]\d*(\.?\d*)*/)
45
+ @initial_value.strip
46
+ end
47
+
48
+ def validate_integer!
49
+ unless @initial_value =~ (/^[\-\.\d]\d*(\.?\d*)*/)
50
+ raise "Invalid initial value for #{@type_name}: #{@initial_value}. Wrong type."
51
+ end
35
52
 
36
53
  raise "Invalid initial value for type #{@type_name}. Out of range." unless @initial_value.to_i.between?(
37
54
  DTRCore::Number.const_get(:"MIN_#{@type_name}"), DTRCore::Number.const_get(:"MAX_#{@type_name}")
38
55
  )
39
56
 
40
- @initial_value.to_i
57
+ handle_each_numeric_type!
58
+ end
59
+
60
+ def handle_each_numeric_type!
61
+ case @type_name
62
+ when 'Integer', 'BigInteger'
63
+ raise "Invalid initial value for #{@type_name}: #{@initial_value}. Wrong type." unless non_float_integer?
64
+
65
+ @initial_value.to_i
66
+ when 'Float'
67
+ raise "Invalid initial value for #{@type_name}: #{@initial_value}. Wrong type." unless floaty_float?
68
+
69
+ @initial_value.to_f
70
+ end
71
+ end
72
+
73
+ def non_float_integer?
74
+ @initial_value =~ (/^[\-\.\d]\d*(\.?\d*)*/) && !@initial_value.include?('.')
75
+ end
76
+
77
+ def floaty_float?
78
+ @initial_value =~ (/^[\-\.\d]\d*(\.?\d*)*/) && @initial_value.include?('.')
41
79
  end
42
80
  end
43
81
  end
@@ -38,7 +38,7 @@ module DTRCore
38
38
  end
39
39
 
40
40
  def to_s
41
- "#{name} { #{attributes.map { |x| "#{x[:name]}: #{x[:type]}" }.join("\n")} }"
41
+ "\t* (#{name})\n\t{\n#{@attributes.map { |x| "\t\t#{x[:name]}: #{x[:type]}" }.join("\n")}\n\t}"
42
42
  end
43
43
 
44
44
  def ==(other)
data/lib/dtr_core.rb CHANGED
@@ -9,5 +9,7 @@ module DTRCore
9
9
  autoload :State, 'dtr_core/state'
10
10
  autoload :SupportedAttributes, 'dtr_core/supported_attributes'
11
11
  autoload :TypeValidator, 'dtr_core/type_validator'
12
+ autoload :InstructionValidator, 'dtr_core/instruction_validator'
13
+ autoload :Instruction, 'dtr_core/instruction'
12
14
  autoload :UserDefinedType, 'dtr_core/user_defined_type'
13
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dtr_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.6
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Durst
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-07 00:00:00.000000000 Z
11
+ date: 2024-06-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Core smart contract intermediate language (Digicus Textual Representation)
14
14
  parser.
@@ -22,6 +22,8 @@ files:
22
22
  - lib/dtr_core/common.rb
23
23
  - lib/dtr_core/contract.rb
24
24
  - lib/dtr_core/function.rb
25
+ - lib/dtr_core/instruction.rb
26
+ - lib/dtr_core/instruction_validator.rb
25
27
  - lib/dtr_core/number.rb
26
28
  - lib/dtr_core/parser.rb
27
29
  - lib/dtr_core/state.rb