From 061dd644cbd2fdddbb2e52dbe63683fa7a04b769 Mon Sep 17 00:00:00 2001 From: Drahflow Date: Wed, 31 May 2017 16:49:56 +0200 Subject: Implemented |= --- TODO | 1 - compiler/standardClient.ey | 8 ++++++++ doc/global.md | 11 +++++++++++ examples/working-compiler/apply.test | 18 ++++++++++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 examples/working-compiler/apply.test diff --git a/TODO b/TODO index 9ab2778..90915c3 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,3 @@ -* implement |= as in { 1 add } |=i * better sys .file * don't make newly opened files executable by default * make :executable, :nonexecutable, :writable, :readable, etc. diff --git a/compiler/standardClient.ey b/compiler/standardClient.ey index d807d7c..b865856 100644 --- a/compiler/standardClient.ey +++ b/compiler/standardClient.ey @@ -4,6 +4,14 @@ { keys dump "undefined member in .|: " dump dump "" die } "#.|" defmd { keys dump "undefined member in =: " dump dump "" die } "#.=" defmd +{ + quoted { ==name =*f + name "|" sys .executeIdentifier + f + name "=" sys .executeIdentifier + } { ==name =*f name | f name = } ? * +} "|=" defq + ## regex support # ideas taken from http://swtch.com/~rsc/regexp/regexp3.html < diff --git a/doc/global.md b/doc/global.md index b20b3bc..e207973 100644 --- a/doc/global.md +++ b/doc/global.md @@ -58,6 +58,17 @@ Executes the top stack element. See [execution.md](execution.md) for the full st { "Hello World!" dump } * "Hello World!" +`|=` +---- + +Takes a name and a function from the stack. Resolves the name without +execution (like `|`) runs the function and then assigns the topmost +stack element back to name (like `=`). + + 0 ==long_variable_name + { 1 add } |=long_variable_name + long_variable_name dump # now 1 + `[` --- diff --git a/examples/working-compiler/apply.test b/examples/working-compiler/apply.test new file mode 100644 index 0000000..4dd3979 --- /dev/null +++ b/examples/working-compiler/apply.test @@ -0,0 +1,18 @@ +{ + quoted { ==name =*f + name "|" sys .executeIdentifier + f + name "=" sys .executeIdentifier + } { ==name =*f name | f name = } ? * +} "|=" defq + +0 ==i +i dump +{ 1 add } |=i +i dump + +{ + 0 ==j + { 1 add } |=j + j dump +} * -- cgit v1.2.3