rpl.rb/lib/core.rb

71 lines
1.6 KiB
Ruby
Raw Normal View History

2021-12-07 16:09:17 +01:00
# frozen_string_literal: true
require 'bigdecimal/math'
require_relative './core/branch'
require_relative './core/general'
require_relative './core/mode'
require_relative './core/operations'
require_relative './core/program'
require_relative './core/stack'
require_relative './core/store'
require_relative './core/string'
require_relative './core/test'
require_relative './core/time-date'
require_relative './core/trig'
require_relative './core/logs'
2021-12-15 13:33:52 +01:00
require_relative './core/filesystem'
require_relative './core/list'
module Rpl
2021-12-07 15:50:58 +01:00
module Lang
2022-02-08 15:45:36 +01:00
module_function
2022-02-08 15:45:36 +01:00
include BigMath
2022-02-08 15:45:36 +01:00
def precision
@precision or 12
end
2022-02-08 15:45:36 +01:00
def precision=( value )
@precision = value
end
2022-02-08 15:45:36 +01:00
def stack_extract( stack, needs )
raise ArgumentError, 'Not enough elements' if stack.size < needs.size
2022-02-08 15:45:36 +01:00
args = []
needs.each do |need|
elt = stack.pop
2022-02-08 15:45:36 +01:00
raise ArgumentError, "Type Error, needed #{need} got #{elt[:type]}" unless need == :any || need.include?( elt[:type] )
2022-02-08 15:45:36 +01:00
args << elt
2021-12-07 15:50:58 +01:00
end
2022-02-08 15:45:36 +01:00
[stack, args]
end
def infer_resulting_base( numerics )
10 if numerics.length.zero?
2022-02-08 15:45:36 +01:00
numerics.last[:base]
end
2022-02-08 15:45:36 +01:00
def eval( stack, dictionary, rplcode )
preparsed_input = rplcode.gsub( '\n', ' ' ).strip if rplcode.is_a?( String )
parsed_input = Rpl::Lang.parse_input( preparsed_input.to_s )
2021-12-16 15:22:14 +01:00
2022-02-08 15:45:36 +01:00
Rpl::Lang.run_input( parsed_input,
stack, dictionary )
end
2021-12-16 15:22:14 +01:00
2022-02-08 15:45:36 +01:00
### DEBUG ###
def __pp_stack( stack, dictionary )
pp stack
2021-12-16 15:22:14 +01:00
2022-02-08 15:45:36 +01:00
[stack, dictionary]
end
end
end