rpl.rb/lib/rpl/words/store.rb

110 lines
4.1 KiB
Ruby
Raw Normal View History

2021-12-07 16:51:33 +01:00
# frozen_string_literal: true
module RplLang
module Words
module Store
2022-02-26 18:53:39 +01:00
include Types
def populate_dictionary
super
@dictionary.add_word( ['▶', 'sto'],
'Store',
'( content name -- ) store to variable',
proc do
2022-02-26 18:53:39 +01:00
args = stack_extract( [[RplName], :any] )
2022-02-26 18:53:39 +01:00
@dictionary.add_var( args[0].value,
args[1] )
end )
@dictionary.add_word( ['rcl'],
'Store',
'( name -- … ) push content of variable name onto stack',
proc do
2022-02-26 18:53:39 +01:00
args = stack_extract( [[RplName]] )
2022-02-26 18:53:39 +01:00
content = @dictionary.lookup( args[0].value )
@stack << content unless content.nil?
end )
@dictionary.add_word( ['purge'],
'Store',
'( name -- ) delete variable',
proc do
2022-02-26 18:53:39 +01:00
args = stack_extract( [[RplName]] )
2022-02-26 18:53:39 +01:00
@dictionary.remove_var( args[0].value )
end )
@dictionary.add_word( ['vars'],
'Store',
'( -- […] ) list variables',
proc do
2022-02-26 18:53:39 +01:00
@stack << RplList.new( (@dictionary.vars.keys + @dictionary.local_vars_layers.reduce([]) { |memo, layer| memo + layer.keys }).map { |name| RplName.new( name ) } )
end )
@dictionary.add_word( ['clusr'],
'Store',
'( -- ) delete all variables',
proc do
@dictionary.remove_all_vars
end )
@dictionary.add_word( ['sto+'],
'Store',
'( a n -- ) add content to variable\'s value',
2022-02-26 18:53:39 +01:00
RplProgram.new( '« dup type "Name" ==
2022-01-20 11:56:38 +01:00
« swap »
ift
2022-02-26 18:53:39 +01:00
over rcl + swap sto »' ) )
@dictionary.add_word( ['sto-'],
'Store',
'( a n -- ) subtract content to variable\'s value',
2022-02-26 18:53:39 +01:00
RplProgram.new( '« dup type "Name" ==
2022-01-20 11:56:38 +01:00
« swap »
ift
2022-02-26 18:53:39 +01:00
over rcl swap - swap sto »' ) )
@dictionary.add_word( ['sto×', 'sto*'],
'Store',
'( a n -- ) multiply content of variable\'s value',
2022-02-26 18:53:39 +01:00
RplProgram.new( '« dup type "Name" ==
2022-01-20 11:56:38 +01:00
« swap »
ift
2022-02-26 18:53:39 +01:00
over rcl * swap sto »' ) )
@dictionary.add_word( ['sto÷', 'sto/'],
'Store',
'( a n -- ) divide content of variable\'s value',
2022-02-26 18:53:39 +01:00
RplProgram.new( '« dup type "Name" ==
2022-01-20 11:56:38 +01:00
« swap »
ift
2022-02-26 18:53:39 +01:00
over rcl swap / swap sto »' ) )
@dictionary.add_word( ['sneg'],
'Store',
'( a n -- ) negate content of variable\'s value',
2022-02-26 18:53:39 +01:00
RplProgram.new( '« dup rcl chs swap sto »' ) )
@dictionary.add_word( ['sinv'],
'Store',
'( a n -- ) invert content of variable\'s value',
2022-02-26 18:53:39 +01:00
RplProgram.new( '« dup rcl inv swap sto »' ) )
@dictionary.add_word( ['↴', 'lsto'],
'Program',
'( content name -- ) store to local variable',
proc do
2022-02-26 18:53:39 +01:00
args = stack_extract( [[RplName], :any] )
2022-02-26 18:53:39 +01:00
@dictionary.add_local_var( args[0].value,
args[1] )
end )
end
2021-12-07 16:51:33 +01:00
end
end
end