From 5153f19b858ce2549f7a268131281488016e181f Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Mon, 22 Jan 2018 15:27:08 +0800 Subject: [PATCH 01/10] add test support for Lexer --- .gitignore | 1 + .idea/misc.xml | 2 +- resources/META-INF/plugin.xml | 20 +- rholang-idea.iml | 11 + test/coop/rchain/RholangTestUtil.java | 9 + .../rchain/lang/lexer/RholangLexTest.java | 26 + testData/lexer/token.rho | 148 ++ testData/lexer/token.txt | 1204 +++++++++++++++++ 8 files changed, 1410 insertions(+), 11 deletions(-) create mode 100644 test/coop/rchain/RholangTestUtil.java create mode 100644 test/coop/rchain/lang/lexer/RholangLexTest.java create mode 100644 testData/lexer/token.rho create mode 100644 testData/lexer/token.txt diff --git a/.gitignore b/.gitignore index ea92bc8..f15096a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ out/ gen/ *.java~ /*.jar +.idea/ diff --git a/.idea/misc.xml b/.idea/misc.xml index dc9ea54..23b4b08 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index cc52062..418f991 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -1,13 +1,13 @@ - coop.rchain.lang + coop.coop.coop.rchain.lang Rholang 0.0.3 - RChain.coop + RChain.coop Rholang. - Official language for RChain distributed virtual machine.

+ Official language for RChain distributed virtual machine.

]]>
- com.intellij.modules.lang + com.intellij.modules.coop.rchain.lang - - - - - - + + + + + + diff --git a/rholang-idea.iml b/rholang-idea.iml index 5c47027..a7aeeb5 100644 --- a/rholang-idea.iml +++ b/rholang-idea.iml @@ -7,9 +7,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test/coop/rchain/RholangTestUtil.java b/test/coop/rchain/RholangTestUtil.java new file mode 100644 index 0000000..69ae864 --- /dev/null +++ b/test/coop/rchain/RholangTestUtil.java @@ -0,0 +1,9 @@ +package coop.rchain; + +import com.intellij.openapi.application.PathManager; + +public class RholangTestUtil { + public static String getBaseTestDataPath() { + return "testData"; + } +} diff --git a/test/coop/rchain/lang/lexer/RholangLexTest.java b/test/coop/rchain/lang/lexer/RholangLexTest.java new file mode 100644 index 0000000..2d6f903 --- /dev/null +++ b/test/coop/rchain/lang/lexer/RholangLexTest.java @@ -0,0 +1,26 @@ +package coop.rchain.lang.lexer; + +import com.intellij.lexer.Lexer; +import com.intellij.openapi.application.PathManager; +import com.intellij.testFramework.LexerTestCase; +import coop.rchain.RholangTestUtil; +import coop.rchain.lang.RhoLexerAdapter; + +import java.nio.file.Paths; + +public class RholangLexTest extends LexerTestCase { + + @Override + protected Lexer createLexer() { + return new RhoLexerAdapter(); + } + + @Override + protected String getDirPath() { + return Paths.get(RholangTestUtil.getBaseTestDataPath(), "lexer").toString(); + } + + public void testToken() { + doFileTest("rho"); + } +} diff --git a/testData/lexer/token.rho b/testData/lexer/token.rho new file mode 100644 index 0000000..495c01e --- /dev/null +++ b/testData/lexer/token.rho @@ -0,0 +1,148 @@ +// A token contract that implements the ERC20 standard. +// This contract demonstrates the creation of a token, +// the transferring of tokens, the querying of a balance, +// and the printing of the balance query result. + +new token in { + contract token (message_sender, total_supply, return_channel) = { + + new allowed_channel, balances_channel, owner_channel in { + + allowed_channel!(Map()) | + owner_channel!(message_sender) | + balances_channel!(Map()) | + for (balances <- balances_channel) { + balances_channel!( balances.insert(message_sender, total_supply) ) + } | + + new transfer, transfer_from, approve, balance_of, allowance, contract_owner in { + + contract transfer(message_sender, to, amount, rtn) = { + for (balances <- balances_channel) { + new x, y in { + x!(balances.getOrElse(message_sender, 0)) | + y!(balances.getOrElse(to, 0)) | + for (balance_of_sender <- x + ; balance_of_receiver <- y) { + // Preconditions to check before the transfer goes through + match [ + balance_of_sender >= amount, + amount > 0, + balance_of_receiver + amount > balance_of_receiver] with + => { + balances_channel!( + (balances + .insert(message_sender, balance_of_sender - amount)) + .insert(to, balance_of_receiver+amount) + ) | + rtn!(true) + } + _ => { + balances_channel!(balances) | + rtn!(false) + } + } + } + } + } | + + // Same as the transfer contract but allows for the sender to be different from + // the person calling the transfer_from contract + contract transfer_from(message_sender, from, to, amount, rtn) = { + for (balances <- balances_channel + ; allowed <- allowed_channel) { + new x, y, z in { + x!(balances.getOrElse(from, 0)) | + y!(allowed.getOrElse(from, message_sender, 0)) | + z!(balances.getOrElse(to, 0)) | + for ( balance_of_sender <- x + ; sender_allowed <- y + ; balance_of_receiver <- z ) { + match [ + balance_of_sender >= amount, + sender_allowed >= amount, + amount > 0, + balance_of_receiver + amount > balance_of_receiver] with + => { + balances_channel!( + (balances + .insert(from, balance_of_sender - amount)) + .insert(to, balance_of_receiver + amount) + ) | + allowed_channel!( + allowed.insert(from, message_sender, sender_allowed - amount) + ) | + rtn!(true) + } + _ => { + balances_channel!(balances) | + allowed_channel!(allowed) | + rtn!(false) + } + + } + } + } + } | + + // This is the way an address can pre-approve (delegate) the transfer of + // a certain amount of tokens to some other address. This allows for + // that other address, through the use of the transfer_from function, + // to send up to that amount of tokens. + contract approve(message_sender, spender, amount, rtn) = { + for (allowed <- allowed_channel) { + allowed_channel!(allowed.insert(message_sender,spender,amount)) | + rtn!(true) + } + } | + + contract balance_of(owner, rtn) = { + for (balances <- balances_channel) { + rtn!(balances.getOrElse(owner, 0)) | balances_channel!(balances) + } + } | + + contract allowance(owner, spender, rtn) = { + for (allowed <- allowed_channel) { + allowed_channel!(allowed) | + rtn!(allowed.getOrElse(owner,spender,0)) + } + } | + + contract contract_owner(rtn) = { + for (owner <- owner_channel) { + owner_channel!(owner) | + rtn!(owner) + } + } | + + return_channel!( + Map().insertMany("transfer", transfer, "transfer_from", transfer_from, + "approve", approve, "balance_of", balance_of, "allowance", allowance, + "contract_owner", contract_owner)) + // TODO: Eventually just insert with compiler + } + } + } | + new rtn, me, they in { + token!([me, 100, rtn]) | + for (token_contract <- rtn) { + new unused_rtn, balance_of_rtn in { + @token_contract.get("transfer")!([me, they, 50, unused_rtn]) | + @token_contract.get("balance_of")!([they, balance_of_rtn]) | + for (they_balance <- balance_of_rtn) { print(they_balance) } + } + } + } | + new rtn2, me2, they2 in { + token!([me2, 1000, rtn2]) | + for (token_contract2 <- rtn2) { + new unused_rtn2, balance_of_rtn2 in { + @token_contract2.get("transfer")!([me2, they2, 500, unused_rtn2]) | + @token_contract2.get("balance_of")!([they2, balance_of_rtn2]) | + for (they_balance2 <- balance_of_rtn2) { print(they_balance2) } + } + } + } + // Once we have a registry, we can do registry_channel!(token) to save the contract there +} diff --git a/testData/lexer/token.txt b/testData/lexer/token.txt new file mode 100644 index 0000000..8f2fb75 --- /dev/null +++ b/testData/lexer/token.txt @@ -0,0 +1,1204 @@ +LINE_COMMENT ('// A token contract that implements the ERC20 standard.') +WHITE_SPACE ('\n') +LINE_COMMENT ('// This contract demonstrates the creation of a token,') +WHITE_SPACE ('\n') +LINE_COMMENT ('// the transferring of tokens, the querying of a balance,') +WHITE_SPACE ('\n') +LINE_COMMENT ('// and the printing of the balance query result.') +WHITE_SPACE ('\n\n') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('token') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +contract ('contract') +WHITE_SPACE (' ') +ID_NAME ('token') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('total_supply') +, (',') +WHITE_SPACE (' ') +ID_NAME ('return_channel') +) (')') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n\n ') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('allowed_channel') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balances_channel') +, (',') +WHITE_SPACE (' ') +ID_NAME ('owner_channel') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n\n ') +ID_NAME ('allowed_channel') +! ('!') +( ('(') +ID_NAME ('Map') +( ('(') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('owner_channel') +! ('!') +( ('(') +ID_NAME ('message_sender') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('balances_channel') +! ('!') +( ('(') +ID_NAME ('Map') +( ('(') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('balances') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('balances_channel') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('balances_channel') +! ('!') +( ('(') +WHITE_SPACE (' ') +ID_NAME ('balances') +. ('.') +ID_NAME ('insert') +( ('(') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('total_supply') +) (')') +WHITE_SPACE (' ') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n\n ') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('transfer') +, (',') +WHITE_SPACE (' ') +ID_NAME ('transfer_from') +, (',') +WHITE_SPACE (' ') +ID_NAME ('approve') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of') +, (',') +WHITE_SPACE (' ') +ID_NAME ('allowance') +, (',') +WHITE_SPACE (' ') +ID_NAME ('contract_owner') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n\n ') +contract ('contract') +WHITE_SPACE (' ') +ID_NAME ('transfer') +( ('(') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('to') +, (',') +WHITE_SPACE (' ') +ID_NAME ('amount') +, (',') +WHITE_SPACE (' ') +ID_NAME ('rtn') +) (')') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('balances') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('balances_channel') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('x') +, (',') +WHITE_SPACE (' ') +ID_NAME ('y') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('x') +! ('!') +( ('(') +ID_NAME ('balances') +. ('.') +ID_NAME ('getOrElse') +( ('(') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('0') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('y') +! ('!') +( ('(') +ID_NAME ('balances') +. ('.') +ID_NAME ('getOrElse') +( ('(') +ID_NAME ('to') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('0') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('balance_of_sender') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('x') +WHITE_SPACE ('\n ') +; (';') +WHITE_SPACE (' ') +ID_NAME ('balance_of_receiver') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('y') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +LINE_COMMENT ('// Preconditions to check before the transfer goes through') +WHITE_SPACE ('\n ') +match ('match') +WHITE_SPACE (' ') +[ ('[') +WHITE_SPACE ('\n ') +ID_NAME ('balance_of_sender') +WHITE_SPACE (' ') +>= ('>=') +WHITE_SPACE (' ') +ID_NAME ('amount') +, (',') +WHITE_SPACE ('\n ') +ID_NAME ('amount') +WHITE_SPACE (' ') +> ('>') +WHITE_SPACE (' ') +DEC_LIT ('0') +, (',') +WHITE_SPACE ('\n ') +ID_NAME ('balance_of_receiver') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID_NAME ('amount') +WHITE_SPACE (' ') +> ('>') +WHITE_SPACE (' ') +ID_NAME ('balance_of_receiver') +] (']') +WHITE_SPACE (' ') +with ('with') +WHITE_SPACE ('\n ') +< ('<') +true ('true') +, (',') +WHITE_SPACE (' ') +true ('true') +, (',') +WHITE_SPACE (' ') +true ('true') +> ('>') +WHITE_SPACE (' ') +=> ('=>') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('balances_channel') +! ('!') +( ('(') +WHITE_SPACE ('\n ') +( ('(') +ID_NAME ('balances') +WHITE_SPACE ('\n ') +. ('.') +ID_NAME ('insert') +( ('(') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of_sender') +WHITE_SPACE (' ') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('amount') +) (')') +) (')') +WHITE_SPACE ('\n ') +. ('.') +ID_NAME ('insert') +( ('(') +ID_NAME ('to') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of_receiver') ++ ('+') +ID_NAME ('amount') +) (')') +WHITE_SPACE ('\n ') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('rtn') +! ('!') +( ('(') +true ('true') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +ID_NAME ('_') +WHITE_SPACE (' ') +=> ('=>') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('balances_channel') +! ('!') +( ('(') +ID_NAME ('balances') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('rtn') +! ('!') +( ('(') +false ('false') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n\n ') +LINE_COMMENT ('// Same as the transfer contract but allows for the sender to be different from') +WHITE_SPACE ('\n ') +LINE_COMMENT ('// the person calling the transfer_from contract') +WHITE_SPACE ('\n ') +contract ('contract') +WHITE_SPACE (' ') +ID_NAME ('transfer_from') +( ('(') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('from') +, (',') +WHITE_SPACE (' ') +ID_NAME ('to') +, (',') +WHITE_SPACE (' ') +ID_NAME ('amount') +, (',') +WHITE_SPACE (' ') +ID_NAME ('rtn') +) (')') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('balances') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('balances_channel') +WHITE_SPACE ('\n ') +; (';') +WHITE_SPACE (' ') +ID_NAME ('allowed') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('allowed_channel') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('x') +, (',') +WHITE_SPACE (' ') +ID_NAME ('y') +, (',') +WHITE_SPACE (' ') +ID_NAME ('z') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('x') +! ('!') +( ('(') +ID_NAME ('balances') +. ('.') +ID_NAME ('getOrElse') +( ('(') +ID_NAME ('from') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('0') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('y') +! ('!') +( ('(') +ID_NAME ('allowed') +. ('.') +ID_NAME ('getOrElse') +( ('(') +ID_NAME ('from') +, (',') +WHITE_SPACE (' ') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('0') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('z') +! ('!') +( ('(') +ID_NAME ('balances') +. ('.') +ID_NAME ('getOrElse') +( ('(') +ID_NAME ('to') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('0') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +WHITE_SPACE (' ') +ID_NAME ('balance_of_sender') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('x') +WHITE_SPACE ('\n ') +; (';') +WHITE_SPACE (' ') +ID_NAME ('sender_allowed') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('y') +WHITE_SPACE ('\n ') +; (';') +WHITE_SPACE (' ') +ID_NAME ('balance_of_receiver') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('z') +WHITE_SPACE (' ') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +match ('match') +WHITE_SPACE (' ') +[ ('[') +WHITE_SPACE ('\n ') +ID_NAME ('balance_of_sender') +WHITE_SPACE (' ') +>= ('>=') +WHITE_SPACE (' ') +ID_NAME ('amount') +, (',') +WHITE_SPACE ('\n ') +ID_NAME ('sender_allowed') +WHITE_SPACE (' ') +>= ('>=') +WHITE_SPACE (' ') +ID_NAME ('amount') +, (',') +WHITE_SPACE ('\n ') +ID_NAME ('amount') +WHITE_SPACE (' ') +> ('>') +WHITE_SPACE (' ') +DEC_LIT ('0') +, (',') +WHITE_SPACE ('\n ') +ID_NAME ('balance_of_receiver') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID_NAME ('amount') +WHITE_SPACE (' ') +> ('>') +WHITE_SPACE (' ') +ID_NAME ('balance_of_receiver') +] (']') +WHITE_SPACE (' ') +with ('with') +WHITE_SPACE ('\n ') +< ('<') +true ('true') +, (',') +WHITE_SPACE (' ') +true ('true') +, (',') +WHITE_SPACE (' ') +true ('true') +, (',') +WHITE_SPACE (' ') +true ('true') +> ('>') +WHITE_SPACE (' ') +=> ('=>') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('balances_channel') +! ('!') +( ('(') +WHITE_SPACE ('\n ') +( ('(') +ID_NAME ('balances') +WHITE_SPACE ('\n ') +. ('.') +ID_NAME ('insert') +( ('(') +ID_NAME ('from') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of_sender') +WHITE_SPACE (' ') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('amount') +) (')') +) (')') +WHITE_SPACE ('\n ') +. ('.') +ID_NAME ('insert') +( ('(') +ID_NAME ('to') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of_receiver') +WHITE_SPACE (' ') ++ ('+') +WHITE_SPACE (' ') +ID_NAME ('amount') +) (')') +WHITE_SPACE ('\n ') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('allowed_channel') +! ('!') +( ('(') +WHITE_SPACE ('\n ') +ID_NAME ('allowed') +. ('.') +ID_NAME ('insert') +( ('(') +ID_NAME ('from') +, (',') +WHITE_SPACE (' ') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('sender_allowed') +WHITE_SPACE (' ') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('amount') +) (')') +WHITE_SPACE ('\n ') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('rtn') +! ('!') +( ('(') +true ('true') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +ID_NAME ('_') +WHITE_SPACE (' ') +=> ('=>') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('balances_channel') +! ('!') +( ('(') +ID_NAME ('balances') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('allowed_channel') +! ('!') +( ('(') +ID_NAME ('allowed') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('rtn') +! ('!') +( ('(') +false ('false') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n\n ') +LINE_COMMENT ('// This is the way an address can pre-approve (delegate) the transfer of') +WHITE_SPACE ('\n ') +LINE_COMMENT ('// a certain amount of tokens to some other address. This allows for') +WHITE_SPACE ('\n ') +LINE_COMMENT ('// that other address, through the use of the transfer_from function,') +WHITE_SPACE ('\n ') +LINE_COMMENT ('// to send up to that amount of tokens.') +WHITE_SPACE ('\n ') +contract ('contract') +WHITE_SPACE (' ') +ID_NAME ('approve') +( ('(') +ID_NAME ('message_sender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('spender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('amount') +, (',') +WHITE_SPACE (' ') +ID_NAME ('rtn') +) (')') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('allowed') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('allowed_channel') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('allowed_channel') +! ('!') +( ('(') +ID_NAME ('allowed') +. ('.') +ID_NAME ('insert') +( ('(') +ID_NAME ('message_sender') +, (',') +ID_NAME ('spender') +, (',') +ID_NAME ('amount') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('rtn') +! ('!') +( ('(') +true ('true') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n\n ') +contract ('contract') +WHITE_SPACE (' ') +ID_NAME ('balance_of') +( ('(') +ID_NAME ('owner') +, (',') +WHITE_SPACE (' ') +ID_NAME ('rtn') +) (')') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('balances') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('balances_channel') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('rtn') +! ('!') +( ('(') +ID_NAME ('balances') +. ('.') +ID_NAME ('getOrElse') +( ('(') +ID_NAME ('owner') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('0') +) (')') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE (' ') +ID_NAME ('balances_channel') +! ('!') +( ('(') +ID_NAME ('balances') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n\n ') +contract ('contract') +WHITE_SPACE (' ') +ID_NAME ('allowance') +( ('(') +ID_NAME ('owner') +, (',') +WHITE_SPACE (' ') +ID_NAME ('spender') +, (',') +WHITE_SPACE (' ') +ID_NAME ('rtn') +) (')') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('allowed') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('allowed_channel') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('allowed_channel') +! ('!') +( ('(') +ID_NAME ('allowed') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('rtn') +! ('!') +( ('(') +ID_NAME ('allowed') +. ('.') +ID_NAME ('getOrElse') +( ('(') +ID_NAME ('owner') +, (',') +ID_NAME ('spender') +, (',') +DEC_LIT ('0') +) (')') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n\n ') +contract ('contract') +WHITE_SPACE (' ') +ID_NAME ('contract_owner') +( ('(') +ID_NAME ('rtn') +) (')') +WHITE_SPACE (' ') += ('=') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('owner') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('owner_channel') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('owner_channel') +! ('!') +( ('(') +ID_NAME ('owner') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +ID_NAME ('rtn') +! ('!') +( ('(') +ID_NAME ('owner') +) (')') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n\n ') +ID_NAME ('return_channel') +! ('!') +( ('(') +WHITE_SPACE ('\n ') +ID_NAME ('Map') +( ('(') +) (')') +. ('.') +ID_NAME ('insertMany') +( ('(') +STRING_LIT ('"transfer"') +, (',') +WHITE_SPACE (' ') +ID_NAME ('transfer') +, (',') +WHITE_SPACE (' ') +STRING_LIT ('"transfer_from"') +, (',') +WHITE_SPACE (' ') +ID_NAME ('transfer_from') +, (',') +WHITE_SPACE ('\n ') +STRING_LIT ('"approve"') +, (',') +WHITE_SPACE (' ') +ID_NAME ('approve') +, (',') +WHITE_SPACE (' ') +STRING_LIT ('"balance_of"') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of') +, (',') +WHITE_SPACE (' ') +STRING_LIT ('"allowance"') +, (',') +WHITE_SPACE (' ') +ID_NAME ('allowance') +, (',') +WHITE_SPACE ('\n ') +STRING_LIT ('"contract_owner"') +, (',') +WHITE_SPACE (' ') +ID_NAME ('contract_owner') +) (')') +) (')') +WHITE_SPACE ('\n ') +LINE_COMMENT ('// TODO: Eventually just insert with compiler') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('rtn') +, (',') +WHITE_SPACE (' ') +ID_NAME ('me') +, (',') +WHITE_SPACE (' ') +ID_NAME ('they') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('token') +! ('!') +( ('(') +[ ('[') +ID_NAME ('me') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('100') +, (',') +WHITE_SPACE (' ') +ID_NAME ('rtn') +] (']') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('token_contract') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('rtn') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('unused_rtn') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of_rtn') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +@ ('@') +ID_NAME ('token_contract') +. ('.') +ID_NAME ('get') +( ('(') +STRING_LIT ('"transfer"') +) (')') +! ('!') +( ('(') +[ ('[') +ID_NAME ('me') +, (',') +WHITE_SPACE (' ') +ID_NAME ('they') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('50') +, (',') +WHITE_SPACE (' ') +ID_NAME ('unused_rtn') +] (']') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +@ ('@') +ID_NAME ('token_contract') +. ('.') +ID_NAME ('get') +( ('(') +STRING_LIT ('"balance_of"') +) (')') +! ('!') +( ('(') +[ ('[') +ID_NAME ('they') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of_rtn') +] (']') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('they_balance') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('balance_of_rtn') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE (' ') +ID_NAME ('print') +( ('(') +ID_NAME ('they_balance') +) (')') +WHITE_SPACE (' ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('rtn2') +, (',') +WHITE_SPACE (' ') +ID_NAME ('me2') +, (',') +WHITE_SPACE (' ') +ID_NAME ('they2') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +ID_NAME ('token') +! ('!') +( ('(') +[ ('[') +ID_NAME ('me2') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('1000') +, (',') +WHITE_SPACE (' ') +ID_NAME ('rtn2') +] (']') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('token_contract2') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('rtn2') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +new ('new') +WHITE_SPACE (' ') +ID_NAME ('unused_rtn2') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of_rtn2') +WHITE_SPACE (' ') +in ('in') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE ('\n ') +@ ('@') +ID_NAME ('token_contract2') +. ('.') +ID_NAME ('get') +( ('(') +STRING_LIT ('"transfer"') +) (')') +! ('!') +( ('(') +[ ('[') +ID_NAME ('me2') +, (',') +WHITE_SPACE (' ') +ID_NAME ('they2') +, (',') +WHITE_SPACE (' ') +DEC_LIT ('500') +, (',') +WHITE_SPACE (' ') +ID_NAME ('unused_rtn2') +] (']') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +@ ('@') +ID_NAME ('token_contract2') +. ('.') +ID_NAME ('get') +( ('(') +STRING_LIT ('"balance_of"') +) (')') +! ('!') +( ('(') +[ ('[') +ID_NAME ('they2') +, (',') +WHITE_SPACE (' ') +ID_NAME ('balance_of_rtn2') +] (']') +) (')') +WHITE_SPACE (' ') +| ('|') +WHITE_SPACE ('\n ') +for ('for') +WHITE_SPACE (' ') +( ('(') +ID_NAME ('they_balance2') +WHITE_SPACE (' ') +< ('<') +- ('-') +WHITE_SPACE (' ') +ID_NAME ('balance_of_rtn2') +) (')') +WHITE_SPACE (' ') +{ ('{') +WHITE_SPACE (' ') +ID_NAME ('print') +( ('(') +ID_NAME ('they_balance2') +) (')') +WHITE_SPACE (' ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +} ('}') +WHITE_SPACE ('\n ') +LINE_COMMENT ('// Once we have a registry, we can do registry_channel!(token) to save the contract there') +WHITE_SPACE ('\n') +} ('}') From 5b35fe8419c52daa68699347e6e6c367c4becd4c Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Mon, 22 Jan 2018 15:38:33 +0800 Subject: [PATCH 02/10] add test support for Parser --- test/coop/rchain/RholangTestUtil.java | 2 +- .../rchain/lang/parser/RholangParserTest.java | 24 + testData/parser/token.rho | 148 + testData/parser/token.txt | 2507 +++++++++++++++++ 4 files changed, 2680 insertions(+), 1 deletion(-) create mode 100644 test/coop/rchain/lang/parser/RholangParserTest.java create mode 100644 testData/parser/token.rho create mode 100644 testData/parser/token.txt diff --git a/test/coop/rchain/RholangTestUtil.java b/test/coop/rchain/RholangTestUtil.java index 69ae864..6207632 100644 --- a/test/coop/rchain/RholangTestUtil.java +++ b/test/coop/rchain/RholangTestUtil.java @@ -4,6 +4,6 @@ public class RholangTestUtil { public static String getBaseTestDataPath() { - return "testData"; + return PathManager.getHomePath() + "/testData"; } } diff --git a/test/coop/rchain/lang/parser/RholangParserTest.java b/test/coop/rchain/lang/parser/RholangParserTest.java new file mode 100644 index 0000000..1cb6e5f --- /dev/null +++ b/test/coop/rchain/lang/parser/RholangParserTest.java @@ -0,0 +1,24 @@ +package coop.rchain.lang.parser; + +import com.intellij.lang.ParserDefinition; +import com.intellij.testFramework.ParsingTestCase; +import coop.rchain.RholangTestUtil; +import coop.rchain.lang.RhoParserDefinition; +import org.jetbrains.annotations.NotNull; + +import java.nio.file.Paths; + +public class RholangParserTest extends ParsingTestCase { + public RholangParserTest() { + super("", "rho", new RhoParserDefinition()); + } + + @Override + protected String getTestDataPath() { + return Paths.get(RholangTestUtil.getBaseTestDataPath(), "parser").toString(); + } + + public void testtoken(){ + doTest(true); + } +} diff --git a/testData/parser/token.rho b/testData/parser/token.rho new file mode 100644 index 0000000..495c01e --- /dev/null +++ b/testData/parser/token.rho @@ -0,0 +1,148 @@ +// A token contract that implements the ERC20 standard. +// This contract demonstrates the creation of a token, +// the transferring of tokens, the querying of a balance, +// and the printing of the balance query result. + +new token in { + contract token (message_sender, total_supply, return_channel) = { + + new allowed_channel, balances_channel, owner_channel in { + + allowed_channel!(Map()) | + owner_channel!(message_sender) | + balances_channel!(Map()) | + for (balances <- balances_channel) { + balances_channel!( balances.insert(message_sender, total_supply) ) + } | + + new transfer, transfer_from, approve, balance_of, allowance, contract_owner in { + + contract transfer(message_sender, to, amount, rtn) = { + for (balances <- balances_channel) { + new x, y in { + x!(balances.getOrElse(message_sender, 0)) | + y!(balances.getOrElse(to, 0)) | + for (balance_of_sender <- x + ; balance_of_receiver <- y) { + // Preconditions to check before the transfer goes through + match [ + balance_of_sender >= amount, + amount > 0, + balance_of_receiver + amount > balance_of_receiver] with + => { + balances_channel!( + (balances + .insert(message_sender, balance_of_sender - amount)) + .insert(to, balance_of_receiver+amount) + ) | + rtn!(true) + } + _ => { + balances_channel!(balances) | + rtn!(false) + } + } + } + } + } | + + // Same as the transfer contract but allows for the sender to be different from + // the person calling the transfer_from contract + contract transfer_from(message_sender, from, to, amount, rtn) = { + for (balances <- balances_channel + ; allowed <- allowed_channel) { + new x, y, z in { + x!(balances.getOrElse(from, 0)) | + y!(allowed.getOrElse(from, message_sender, 0)) | + z!(balances.getOrElse(to, 0)) | + for ( balance_of_sender <- x + ; sender_allowed <- y + ; balance_of_receiver <- z ) { + match [ + balance_of_sender >= amount, + sender_allowed >= amount, + amount > 0, + balance_of_receiver + amount > balance_of_receiver] with + => { + balances_channel!( + (balances + .insert(from, balance_of_sender - amount)) + .insert(to, balance_of_receiver + amount) + ) | + allowed_channel!( + allowed.insert(from, message_sender, sender_allowed - amount) + ) | + rtn!(true) + } + _ => { + balances_channel!(balances) | + allowed_channel!(allowed) | + rtn!(false) + } + + } + } + } + } | + + // This is the way an address can pre-approve (delegate) the transfer of + // a certain amount of tokens to some other address. This allows for + // that other address, through the use of the transfer_from function, + // to send up to that amount of tokens. + contract approve(message_sender, spender, amount, rtn) = { + for (allowed <- allowed_channel) { + allowed_channel!(allowed.insert(message_sender,spender,amount)) | + rtn!(true) + } + } | + + contract balance_of(owner, rtn) = { + for (balances <- balances_channel) { + rtn!(balances.getOrElse(owner, 0)) | balances_channel!(balances) + } + } | + + contract allowance(owner, spender, rtn) = { + for (allowed <- allowed_channel) { + allowed_channel!(allowed) | + rtn!(allowed.getOrElse(owner,spender,0)) + } + } | + + contract contract_owner(rtn) = { + for (owner <- owner_channel) { + owner_channel!(owner) | + rtn!(owner) + } + } | + + return_channel!( + Map().insertMany("transfer", transfer, "transfer_from", transfer_from, + "approve", approve, "balance_of", balance_of, "allowance", allowance, + "contract_owner", contract_owner)) + // TODO: Eventually just insert with compiler + } + } + } | + new rtn, me, they in { + token!([me, 100, rtn]) | + for (token_contract <- rtn) { + new unused_rtn, balance_of_rtn in { + @token_contract.get("transfer")!([me, they, 50, unused_rtn]) | + @token_contract.get("balance_of")!([they, balance_of_rtn]) | + for (they_balance <- balance_of_rtn) { print(they_balance) } + } + } + } | + new rtn2, me2, they2 in { + token!([me2, 1000, rtn2]) | + for (token_contract2 <- rtn2) { + new unused_rtn2, balance_of_rtn2 in { + @token_contract2.get("transfer")!([me2, they2, 500, unused_rtn2]) | + @token_contract2.get("balance_of")!([they2, balance_of_rtn2]) | + for (they_balance2 <- balance_of_rtn2) { print(they_balance2) } + } + } + } + // Once we have a registry, we can do registry_channel!(token) to save the contract there +} diff --git a/testData/parser/token.txt b/testData/parser/token.txt new file mode 100644 index 0000000..4abcc85 --- /dev/null +++ b/testData/parser/token.txt @@ -0,0 +1,2507 @@ +Rholang File + PsiComment(LINE_COMMENT)('// A token contract that implements the ERC20 standard.') + PsiWhiteSpace('\n') + PsiComment(LINE_COMMENT)('// This contract demonstrates the creation of a token,') + PsiWhiteSpace('\n') + PsiComment(LINE_COMMENT)('// the transferring of tokens, the querying of a balance,') + PsiWhiteSpace('\n') + PsiComment(LINE_COMMENT)('// and the printing of the balance query result.') + PsiWhiteSpace('\n\n') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('token') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('token') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('total_supply') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('return_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances_channel') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('owner_channel') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('Map') + PsiElement(()('(') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('owner_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('Map') + PsiElement(()('(') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace(' ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('total_supply') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('transfer') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('transfer_from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('approve') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowance') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('contract_owner') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('transfer') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('x') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('y') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('x') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('y') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('x') + PsiWhiteSpace('\n ') + PsiElement(;)(';') + PsiWhiteSpace(' ') + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('y') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// Preconditions to check before the transfer goes through') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(match)('match') + PsiWhiteSpace(' ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(>=)('>=') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiWhiteSpace(' ') + PsiElement(>)('>') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(+)('+') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiWhiteSpace(' ') + PsiElement(>)('>') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiElement(])(']') + PsiWhiteSpace(' ') + PsiElement(with)('with') + PsiWhiteSpace('\n ') + RhoPMBranchImpl(PM_BRANCH) + RhoPMBranch_Impl(PM_BRANCH_) + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoValPatternImpl(VAL_PATTERN) + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(<)('<') + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoValPatternImpl(VAL_PATTERN) + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(>)('>') + PsiWhiteSpace(' ') + PsiElement(=>)('=>') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace('\n ') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiElement(+)('+') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(true)('true') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + RhoPMBranch_Impl(PM_BRANCH_) + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('_') + PsiWhiteSpace(' ') + PsiElement(=>)('=>') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(false)('false') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + PsiComment(LINE_COMMENT)('// Same as the transfer contract but allows for the sender to be different from') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// the person calling the transfer_from contract') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('transfer_from') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiWhiteSpace('\n ') + PsiElement(;)(';') + PsiWhiteSpace(' ') + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowed') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('x') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('y') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('z') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('x') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('y') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('z') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + PsiWhiteSpace(' ') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('x') + PsiWhiteSpace('\n ') + PsiElement(;)(';') + PsiWhiteSpace(' ') + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('sender_allowed') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('y') + PsiWhiteSpace('\n ') + PsiElement(;)(';') + PsiWhiteSpace(' ') + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('z') + PsiWhiteSpace(' ') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(match)('match') + PsiWhiteSpace(' ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(>=)('>=') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('sender_allowed') + PsiWhiteSpace(' ') + PsiElement(>=)('>=') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiWhiteSpace(' ') + PsiElement(>)('>') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(+)('+') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiWhiteSpace(' ') + PsiElement(>)('>') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiElement(])(']') + PsiWhiteSpace(' ') + PsiElement(with)('with') + PsiWhiteSpace('\n ') + RhoPMBranchImpl(PM_BRANCH) + RhoPMBranch_Impl(PM_BRANCH_) + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoValPatternImpl(VAL_PATTERN) + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(<)('<') + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoValPatternImpl(VAL_PATTERN) + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(>)('>') + PsiWhiteSpace(' ') + PsiElement(=>)('=>') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace('\n ') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(+)('+') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('sender_allowed') + PsiWhiteSpace(' ') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(true)('true') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + RhoPMBranch_Impl(PM_BRANCH_) + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('_') + PsiWhiteSpace(' ') + PsiElement(=>)('=>') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(false)('false') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + PsiComment(LINE_COMMENT)('// This is the way an address can pre-approve (delegate) the transfer of') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// a certain amount of tokens to some other address. This allows for') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// that other address, through the use of the transfer_from function,') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// to send up to that amount of tokens.') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('approve') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('spender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowed') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('spender') + PsiElement(,)(',') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(true)('true') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('balance_of') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('owner') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('owner') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('allowance') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('owner') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('spender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowed') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('owner') + PsiElement(,)(',') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('spender') + PsiElement(,)(',') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('contract_owner') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('owner') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('owner_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('owner_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('owner') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('owner') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('return_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('Map') + PsiElement(()('(') + PsiElement())(')') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insertMany') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"transfer"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('transfer') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"transfer_from"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('transfer_from') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"approve"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('approve') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"balance_of"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"allowance"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowance') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"contract_owner"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('contract_owner') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// TODO: Eventually just insert with compiler') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('me') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('they') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('token') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('me') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('100') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('rtn') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('token_contract') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('unused_rtn') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_rtn') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(@)('@') + PsiElement(ID_NAME)('token_contract') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('get') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"transfer"') + PsiElement())(')') + PsiElement(!)('!') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('me') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('50') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('unused_rtn') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(@)('@') + PsiElement(ID_NAME)('token_contract') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('get') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"balance_of"') + PsiElement())(')') + PsiElement(!)('!') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_rtn') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('they_balance') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balance_of_rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace(' ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('print') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they_balance') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('me2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('they2') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('token') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('me2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('1000') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('rtn2') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('token_contract2') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn2') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('unused_rtn2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_rtn2') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(@)('@') + PsiElement(ID_NAME)('token_contract2') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('get') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"transfer"') + PsiElement())(')') + PsiElement(!)('!') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('me2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('500') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('unused_rtn2') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(@)('@') + PsiElement(ID_NAME)('token_contract2') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('get') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"balance_of"') + PsiElement())(')') + PsiElement(!)('!') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_rtn2') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('they_balance2') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balance_of_rtn2') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace(' ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('print') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they_balance2') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// Once we have a registry, we can do registry_channel!(token) to save the contract there') + PsiWhiteSpace('\n') + PsiElement(})('}') From fd957e31d60ea2294623902fff3dfa62da7cf130 Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Mon, 22 Jan 2018 15:39:46 +0800 Subject: [PATCH 03/10] fix data path bug --- test/coop/rchain/lang/lexer/RholangLexTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/coop/rchain/lang/lexer/RholangLexTest.java b/test/coop/rchain/lang/lexer/RholangLexTest.java index 2d6f903..7975a2f 100644 --- a/test/coop/rchain/lang/lexer/RholangLexTest.java +++ b/test/coop/rchain/lang/lexer/RholangLexTest.java @@ -17,7 +17,7 @@ protected Lexer createLexer() { @Override protected String getDirPath() { - return Paths.get(RholangTestUtil.getBaseTestDataPath(), "lexer").toString(); + return Paths.get(RholangTestUtil.getBaseTestDataPath(), "lexer").toString().substring(PathManager.getHomePath().length()); } public void testToken() { From 53659b3dca0539dc02935a77595184d6afc55a76 Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Mon, 22 Jan 2018 15:48:14 +0800 Subject: [PATCH 04/10] add test support for folding --- .../lang/folding/RholangFoldingBuilder.java | 34 ++++ .../ide/folding/RholangCodeInsightTest.java | 16 ++ testData/ide/folding/folding.rho | 148 ++++++++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 src/coop/rchain/lang/folding/RholangFoldingBuilder.java create mode 100644 test/coop/rchain/ide/folding/RholangCodeInsightTest.java create mode 100644 testData/ide/folding/folding.rho diff --git a/src/coop/rchain/lang/folding/RholangFoldingBuilder.java b/src/coop/rchain/lang/folding/RholangFoldingBuilder.java new file mode 100644 index 0000000..1b9d896 --- /dev/null +++ b/src/coop/rchain/lang/folding/RholangFoldingBuilder.java @@ -0,0 +1,34 @@ +package coop.rchain.lang.folding; + +import com.intellij.lang.ASTNode; +import com.intellij.lang.folding.CustomFoldingBuilder; +import com.intellij.lang.folding.FoldingDescriptor; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.util.TextRange; +import com.intellij.psi.PsiElement; +import coop.rchain.lang.psi.RhoFile; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class RholangFoldingBuilder extends CustomFoldingBuilder implements DumbAware { + @Override + protected void buildLanguageFoldRegions(@NotNull List descriptors, @NotNull PsiElement root, @NotNull Document document, boolean quick) { + if(!(root instanceof RhoFile)){ + return; + } + + + } + + @Override + protected String getLanguagePlaceholderText(@NotNull ASTNode node, @NotNull TextRange range) { + return null; + } + + @Override + protected boolean isRegionCollapsedByDefault(@NotNull ASTNode node) { + return false; + } +} diff --git a/test/coop/rchain/ide/folding/RholangCodeInsightTest.java b/test/coop/rchain/ide/folding/RholangCodeInsightTest.java new file mode 100644 index 0000000..f35b32e --- /dev/null +++ b/test/coop/rchain/ide/folding/RholangCodeInsightTest.java @@ -0,0 +1,16 @@ +package coop.rchain.ide.folding; + +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; + +import static coop.rchain.RholangTestUtil.getBaseTestDataPath; + +public class RholangCodeInsightTest extends LightCodeInsightFixtureTestCase { + @Override + protected String getTestDataPath() { + return getBaseTestDataPath(); + } + + public void testFolding(){ + myFixture.testFolding(getTestDataPath() + "/ide/folding/folding.rho"); + } +} diff --git a/testData/ide/folding/folding.rho b/testData/ide/folding/folding.rho new file mode 100644 index 0000000..495c01e --- /dev/null +++ b/testData/ide/folding/folding.rho @@ -0,0 +1,148 @@ +// A token contract that implements the ERC20 standard. +// This contract demonstrates the creation of a token, +// the transferring of tokens, the querying of a balance, +// and the printing of the balance query result. + +new token in { + contract token (message_sender, total_supply, return_channel) = { + + new allowed_channel, balances_channel, owner_channel in { + + allowed_channel!(Map()) | + owner_channel!(message_sender) | + balances_channel!(Map()) | + for (balances <- balances_channel) { + balances_channel!( balances.insert(message_sender, total_supply) ) + } | + + new transfer, transfer_from, approve, balance_of, allowance, contract_owner in { + + contract transfer(message_sender, to, amount, rtn) = { + for (balances <- balances_channel) { + new x, y in { + x!(balances.getOrElse(message_sender, 0)) | + y!(balances.getOrElse(to, 0)) | + for (balance_of_sender <- x + ; balance_of_receiver <- y) { + // Preconditions to check before the transfer goes through + match [ + balance_of_sender >= amount, + amount > 0, + balance_of_receiver + amount > balance_of_receiver] with + => { + balances_channel!( + (balances + .insert(message_sender, balance_of_sender - amount)) + .insert(to, balance_of_receiver+amount) + ) | + rtn!(true) + } + _ => { + balances_channel!(balances) | + rtn!(false) + } + } + } + } + } | + + // Same as the transfer contract but allows for the sender to be different from + // the person calling the transfer_from contract + contract transfer_from(message_sender, from, to, amount, rtn) = { + for (balances <- balances_channel + ; allowed <- allowed_channel) { + new x, y, z in { + x!(balances.getOrElse(from, 0)) | + y!(allowed.getOrElse(from, message_sender, 0)) | + z!(balances.getOrElse(to, 0)) | + for ( balance_of_sender <- x + ; sender_allowed <- y + ; balance_of_receiver <- z ) { + match [ + balance_of_sender >= amount, + sender_allowed >= amount, + amount > 0, + balance_of_receiver + amount > balance_of_receiver] with + => { + balances_channel!( + (balances + .insert(from, balance_of_sender - amount)) + .insert(to, balance_of_receiver + amount) + ) | + allowed_channel!( + allowed.insert(from, message_sender, sender_allowed - amount) + ) | + rtn!(true) + } + _ => { + balances_channel!(balances) | + allowed_channel!(allowed) | + rtn!(false) + } + + } + } + } + } | + + // This is the way an address can pre-approve (delegate) the transfer of + // a certain amount of tokens to some other address. This allows for + // that other address, through the use of the transfer_from function, + // to send up to that amount of tokens. + contract approve(message_sender, spender, amount, rtn) = { + for (allowed <- allowed_channel) { + allowed_channel!(allowed.insert(message_sender,spender,amount)) | + rtn!(true) + } + } | + + contract balance_of(owner, rtn) = { + for (balances <- balances_channel) { + rtn!(balances.getOrElse(owner, 0)) | balances_channel!(balances) + } + } | + + contract allowance(owner, spender, rtn) = { + for (allowed <- allowed_channel) { + allowed_channel!(allowed) | + rtn!(allowed.getOrElse(owner,spender,0)) + } + } | + + contract contract_owner(rtn) = { + for (owner <- owner_channel) { + owner_channel!(owner) | + rtn!(owner) + } + } | + + return_channel!( + Map().insertMany("transfer", transfer, "transfer_from", transfer_from, + "approve", approve, "balance_of", balance_of, "allowance", allowance, + "contract_owner", contract_owner)) + // TODO: Eventually just insert with compiler + } + } + } | + new rtn, me, they in { + token!([me, 100, rtn]) | + for (token_contract <- rtn) { + new unused_rtn, balance_of_rtn in { + @token_contract.get("transfer")!([me, they, 50, unused_rtn]) | + @token_contract.get("balance_of")!([they, balance_of_rtn]) | + for (they_balance <- balance_of_rtn) { print(they_balance) } + } + } + } | + new rtn2, me2, they2 in { + token!([me2, 1000, rtn2]) | + for (token_contract2 <- rtn2) { + new unused_rtn2, balance_of_rtn2 in { + @token_contract2.get("transfer")!([me2, they2, 500, unused_rtn2]) | + @token_contract2.get("balance_of")!([they2, balance_of_rtn2]) | + for (they_balance2 <- balance_of_rtn2) { print(they_balance2) } + } + } + } + // Once we have a registry, we can do registry_channel!(token) to save the contract there +} From ddd30f275d68c6986a7cae23c7efe15512eb035f Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Mon, 22 Jan 2018 21:19:05 +0800 Subject: [PATCH 05/10] add folding feature for block doc commenter --- resources/META-INF/plugin.xml | 22 +-- .../lang/folding/RholangFoldingBuilder.java | 44 +++++- .../ide/folding/RholangCodeInsightTest.java | 2 +- testData/ide/folding/blockDocComment.rho | 4 + testData/ide/folding/folding.rho | 148 ------------------ testData/lexer/token.rho | 11 +- testData/parser/token.rho | 10 +- 7 files changed, 68 insertions(+), 173 deletions(-) create mode 100644 testData/ide/folding/blockDocComment.rho delete mode 100644 testData/ide/folding/folding.rho diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index 418f991..fbe16cd 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -1,13 +1,13 @@ - coop.coop.coop.rchain.lang + coop.rchain.lang Rholang 0.0.3 - RChain.coop + RChain.coop Rholang. - Official language for RChain distributed virtual machine.

+ Official language for RChain distributed virtual machine.

]]>
- com.intellij.modules.coop.rchain.lang + com.intellij.modules.lang - - - - - - + + + + + + + + diff --git a/src/coop/rchain/lang/folding/RholangFoldingBuilder.java b/src/coop/rchain/lang/folding/RholangFoldingBuilder.java index 1b9d896..e62d894 100644 --- a/src/coop/rchain/lang/folding/RholangFoldingBuilder.java +++ b/src/coop/rchain/lang/folding/RholangFoldingBuilder.java @@ -2,33 +2,65 @@ import com.intellij.lang.ASTNode; import com.intellij.lang.folding.CustomFoldingBuilder; +import com.intellij.lang.folding.FoldingBuilder; import com.intellij.lang.folding.FoldingDescriptor; import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; +import com.intellij.psi.javadoc.PsiDocComment; import coop.rchain.lang.psi.RhoFile; +import coop.rchain.lang.psi.RhoTypes; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; -public class RholangFoldingBuilder extends CustomFoldingBuilder implements DumbAware { +public class RholangFoldingBuilder implements FoldingBuilder, DumbAware { + + @NotNull @Override - protected void buildLanguageFoldRegions(@NotNull List descriptors, @NotNull PsiElement root, @NotNull Document document, boolean quick) { - if(!(root instanceof RhoFile)){ + public FoldingDescriptor[] buildFoldRegions(@NotNull ASTNode node, @NotNull Document document) { + List descriptors = new ArrayList<>(); + appendDescriptors(node.getPsi(), descriptors, document); + + return descriptors.toArray(FoldingDescriptor.EMPTY); + } + + private void appendDescriptors(PsiElement psi, List descriptors, Document document) { + if(isSingleLine(psi, document)){ // don't fold when text is single line return; } + if(psi.getNode().getElementType() == RhoTypes.BLOCK_DOC_COMMENT){ + final ASTNode blockDocComment = psi.getNode(); + final String commentText = blockDocComment.getText(); + TextRange range = new TextRange(blockDocComment.getTextRange().getStartOffset() + 3, blockDocComment.getTextRange().getEndOffset() - 2); + descriptors.add(new FoldingDescriptor(blockDocComment, range)); + } + + PsiElement child = psi.getFirstChild(); + while (child != null){ + appendDescriptors(child, descriptors, document); + child = child.getNextSibling(); + } + } + + private static boolean isSingleLine(PsiElement element, Document document){ + final TextRange textRange = element.getTextRange(); + return document.getLineNumber(textRange.getStartOffset()) == document.getLineNumber(textRange.getEndOffset()); } + @Nullable @Override - protected String getLanguagePlaceholderText(@NotNull ASTNode node, @NotNull TextRange range) { - return null; + public String getPlaceholderText(@NotNull ASTNode node) { + return "..."; } @Override - protected boolean isRegionCollapsedByDefault(@NotNull ASTNode node) { + public boolean isCollapsedByDefault(@NotNull ASTNode node) { return false; } } diff --git a/test/coop/rchain/ide/folding/RholangCodeInsightTest.java b/test/coop/rchain/ide/folding/RholangCodeInsightTest.java index f35b32e..5f01120 100644 --- a/test/coop/rchain/ide/folding/RholangCodeInsightTest.java +++ b/test/coop/rchain/ide/folding/RholangCodeInsightTest.java @@ -11,6 +11,6 @@ protected String getTestDataPath() { } public void testFolding(){ - myFixture.testFolding(getTestDataPath() + "/ide/folding/folding.rho"); + myFixture.testFolding(getTestDataPath() + "/ide/folding/blockDocComment.rho"); } } diff --git a/testData/ide/folding/blockDocComment.rho b/testData/ide/folding/blockDocComment.rho new file mode 100644 index 0000000..e0a2c73 --- /dev/null +++ b/testData/ide/folding/blockDocComment.rho @@ -0,0 +1,4 @@ +/** + * Test + */ + diff --git a/testData/ide/folding/folding.rho b/testData/ide/folding/folding.rho deleted file mode 100644 index 495c01e..0000000 --- a/testData/ide/folding/folding.rho +++ /dev/null @@ -1,148 +0,0 @@ -// A token contract that implements the ERC20 standard. -// This contract demonstrates the creation of a token, -// the transferring of tokens, the querying of a balance, -// and the printing of the balance query result. - -new token in { - contract token (message_sender, total_supply, return_channel) = { - - new allowed_channel, balances_channel, owner_channel in { - - allowed_channel!(Map()) | - owner_channel!(message_sender) | - balances_channel!(Map()) | - for (balances <- balances_channel) { - balances_channel!( balances.insert(message_sender, total_supply) ) - } | - - new transfer, transfer_from, approve, balance_of, allowance, contract_owner in { - - contract transfer(message_sender, to, amount, rtn) = { - for (balances <- balances_channel) { - new x, y in { - x!(balances.getOrElse(message_sender, 0)) | - y!(balances.getOrElse(to, 0)) | - for (balance_of_sender <- x - ; balance_of_receiver <- y) { - // Preconditions to check before the transfer goes through - match [ - balance_of_sender >= amount, - amount > 0, - balance_of_receiver + amount > balance_of_receiver] with - => { - balances_channel!( - (balances - .insert(message_sender, balance_of_sender - amount)) - .insert(to, balance_of_receiver+amount) - ) | - rtn!(true) - } - _ => { - balances_channel!(balances) | - rtn!(false) - } - } - } - } - } | - - // Same as the transfer contract but allows for the sender to be different from - // the person calling the transfer_from contract - contract transfer_from(message_sender, from, to, amount, rtn) = { - for (balances <- balances_channel - ; allowed <- allowed_channel) { - new x, y, z in { - x!(balances.getOrElse(from, 0)) | - y!(allowed.getOrElse(from, message_sender, 0)) | - z!(balances.getOrElse(to, 0)) | - for ( balance_of_sender <- x - ; sender_allowed <- y - ; balance_of_receiver <- z ) { - match [ - balance_of_sender >= amount, - sender_allowed >= amount, - amount > 0, - balance_of_receiver + amount > balance_of_receiver] with - => { - balances_channel!( - (balances - .insert(from, balance_of_sender - amount)) - .insert(to, balance_of_receiver + amount) - ) | - allowed_channel!( - allowed.insert(from, message_sender, sender_allowed - amount) - ) | - rtn!(true) - } - _ => { - balances_channel!(balances) | - allowed_channel!(allowed) | - rtn!(false) - } - - } - } - } - } | - - // This is the way an address can pre-approve (delegate) the transfer of - // a certain amount of tokens to some other address. This allows for - // that other address, through the use of the transfer_from function, - // to send up to that amount of tokens. - contract approve(message_sender, spender, amount, rtn) = { - for (allowed <- allowed_channel) { - allowed_channel!(allowed.insert(message_sender,spender,amount)) | - rtn!(true) - } - } | - - contract balance_of(owner, rtn) = { - for (balances <- balances_channel) { - rtn!(balances.getOrElse(owner, 0)) | balances_channel!(balances) - } - } | - - contract allowance(owner, spender, rtn) = { - for (allowed <- allowed_channel) { - allowed_channel!(allowed) | - rtn!(allowed.getOrElse(owner,spender,0)) - } - } | - - contract contract_owner(rtn) = { - for (owner <- owner_channel) { - owner_channel!(owner) | - rtn!(owner) - } - } | - - return_channel!( - Map().insertMany("transfer", transfer, "transfer_from", transfer_from, - "approve", approve, "balance_of", balance_of, "allowance", allowance, - "contract_owner", contract_owner)) - // TODO: Eventually just insert with compiler - } - } - } | - new rtn, me, they in { - token!([me, 100, rtn]) | - for (token_contract <- rtn) { - new unused_rtn, balance_of_rtn in { - @token_contract.get("transfer")!([me, they, 50, unused_rtn]) | - @token_contract.get("balance_of")!([they, balance_of_rtn]) | - for (they_balance <- balance_of_rtn) { print(they_balance) } - } - } - } | - new rtn2, me2, they2 in { - token!([me2, 1000, rtn2]) | - for (token_contract2 <- rtn2) { - new unused_rtn2, balance_of_rtn2 in { - @token_contract2.get("transfer")!([me2, they2, 500, unused_rtn2]) | - @token_contract2.get("balance_of")!([they2, balance_of_rtn2]) | - for (they_balance2 <- balance_of_rtn2) { print(they_balance2) } - } - } - } - // Once we have a registry, we can do registry_channel!(token) to save the contract there -} diff --git a/testData/lexer/token.rho b/testData/lexer/token.rho index 495c01e..0e2aa82 100644 --- a/testData/lexer/token.rho +++ b/testData/lexer/token.rho @@ -1,7 +1,10 @@ -// A token contract that implements the ERC20 standard. -// This contract demonstrates the creation of a token, -// the transferring of tokens, the querying of a balance, -// and the printing of the balance query result. +// test +/* + * A token contract that implements the ERC20 standard. + * This contract demonstrates the creation of a token, + * the transferring of tokens, the querying of a balance, + * and the printing of the balance query result. + */ new token in { contract token (message_sender, total_supply, return_channel) = { diff --git a/testData/parser/token.rho b/testData/parser/token.rho index 495c01e..2e04d85 100644 --- a/testData/parser/token.rho +++ b/testData/parser/token.rho @@ -1,7 +1,9 @@ -// A token contract that implements the ERC20 standard. -// This contract demonstrates the creation of a token, -// the transferring of tokens, the querying of a balance, -// and the printing of the balance query result. +/** + * A token contract that implements the ERC20 standard. + * This contract demonstrates the creation of a token, + * the transferring of tokens, the querying of a balance, + * and the printing of the balance query result. + */ new token in { contract token (message_sender, total_supply, return_channel) = { From 0aa3e597c1b4f921342c9502c00cef03c76091f3 Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Mon, 22 Jan 2018 22:57:51 +0800 Subject: [PATCH 06/10] finish folding feature --- src/coop/rchain/lang/Rho.bnf | 16 +++++++++------- .../lang/folding/RholangFoldingBuilder.java | 15 ++++++++++++++- .../ide/folding/RholangCodeInsightTest.java | 7 ++++++- testData/ide/folding/blockDocComment.rho | 4 ++-- testData/ide/folding/procedure.rho | 7 +++++++ 5 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 testData/ide/folding/procedure.rho diff --git a/src/coop/rchain/lang/Rho.bnf b/src/coop/rchain/lang/Rho.bnf index 75c251d..e9699e9 100644 --- a/src/coop/rchain/lang/Rho.bnf +++ b/src/coop/rchain/lang/Rho.bnf @@ -90,9 +90,11 @@ // Top level contract declaration Contract ::= Proc -Contract_ ::= CONTRACT ContractName "(" [CPattern] ")" "=" "{" Proc "}" +Contract_ ::= CONTRACT ContractName "(" [CPattern] ")" "=" ProcBlock | CONTRACT ContractName "=" TypeTerm +ProcBlock ::= "{" Proc "}" + ContractName ::= ID_NAME { implements = [ "coop.rchain.lang.psi.RhoNamedElement" ] mixin = "coop.rchain.lang.psi.RhoNamedElementImpl" @@ -107,13 +109,13 @@ private comment ::= (BLOCK_COMMENT|BLOCK_DOC_COMMENT|LINE_COMMENT|LINE_DOC_COMME Proc4 ::= NIL | Value Proc3 ::= ChanRefSymbol Chan ["(" [Proc] ")"] Proc2 ::= Chan "!" "(" [Proc] ")" -Proc1 ::= SUM "(" Bind "/:" Bind ")" "{" Proc "}" - | TOTAL "(" Bind ":\\" Bind ")" "{" Proc "}" +Proc1 ::= SUM "(" Bind "/:" Bind ")" ProcBlock + | TOTAL "(" Bind ":\\" Bind ")" ProcBlock | FOR "(" [Bind] ")" "{" [Proc] "}" | SELECT "{" [CBranch] "}" | MATCH Proc WITH [PMBranch] | MATCH Proc { [PMBranch] } - | NEW [VarPattern] IN "{" Proc "}" + | NEW [VarPattern] IN ProcBlock | NEW [VarPattern] IN Proc | LET ("(" CPattern ")" | CPattern) "=" Proc IN Proc | ConstrName "(" [Proc] ")" @@ -129,7 +131,7 @@ ChanRefSymbol ::= "*"|"#" { } // Experimental! -FnDef ::= DEF FnName "(" [CPattern] ")" "=" "{" Proc "}" +FnDef ::= DEF FnName "(" [CPattern] ")" "=" ProcBlock | DEF FnName "=" TypeTerm FnName ::= ID_NAME { @@ -156,12 +158,12 @@ Bind_ ::= CPattern "<-" Chan IF Proc Bind ::= Bind_ (";" Bind_)* // Pattern match branches -PMBranch_ ::= PPattern "=>" "{" Proc "}" +PMBranch_ ::= PPattern "=>" ProcBlock PMBranch ::= PMBranch_ PMBranch_* // Choice branch CBranch ::= CBranch_ CBranch_* -CBranch_ ::= CASE [Bind] "=>" "{" Proc "}" +CBranch_ ::= CASE [Bind] "=>" ProcBlock QVal ::= TRUE | FALSE diff --git a/src/coop/rchain/lang/folding/RholangFoldingBuilder.java b/src/coop/rchain/lang/folding/RholangFoldingBuilder.java index e62d894..e3551a0 100644 --- a/src/coop/rchain/lang/folding/RholangFoldingBuilder.java +++ b/src/coop/rchain/lang/folding/RholangFoldingBuilder.java @@ -9,8 +9,12 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.javadoc.PsiDocComment; +import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.PsiTreeUtil; import coop.rchain.lang.psi.RhoFile; +import coop.rchain.lang.psi.RhoProc; import coop.rchain.lang.psi.RhoTypes; +import coop.rchain.lang.psi.impl.RhoProcBlockImpl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -33,11 +37,20 @@ private void appendDescriptors(PsiElement psi, List descripto return; } - if(psi.getNode().getElementType() == RhoTypes.BLOCK_DOC_COMMENT){ + final IElementType elementType = psi.getNode().getElementType(); + + if(elementType == RhoTypes.BLOCK_DOC_COMMENT){ final ASTNode blockDocComment = psi.getNode(); final String commentText = blockDocComment.getText(); TextRange range = new TextRange(blockDocComment.getTextRange().getStartOffset() + 3, blockDocComment.getTextRange().getEndOffset() - 2); descriptors.add(new FoldingDescriptor(blockDocComment, range)); + }else if(elementType == RhoTypes.PROC_BLOCK){ +// final RhoProc proc = ((RhoProcBlockImpl) psi).getProc(); +// final TextRange textRange = proc.getTextRange(); +// final TextRange tr1= new TextRange(textRange.getStartOffset(), textRange.getEndOffset()); + final TextRange textRange = psi.getNode().getTextRange(); + final TextRange textRange1 = new TextRange(textRange.getStartOffset() + 1, textRange.getEndOffset() - 1); + descriptors.add(new FoldingDescriptor(psi.getNode(), textRange1)); } PsiElement child = psi.getFirstChild(); diff --git a/test/coop/rchain/ide/folding/RholangCodeInsightTest.java b/test/coop/rchain/ide/folding/RholangCodeInsightTest.java index 5f01120..b6803bc 100644 --- a/test/coop/rchain/ide/folding/RholangCodeInsightTest.java +++ b/test/coop/rchain/ide/folding/RholangCodeInsightTest.java @@ -11,6 +11,11 @@ protected String getTestDataPath() { } public void testFolding(){ - myFixture.testFolding(getTestDataPath() + "/ide/folding/blockDocComment.rho"); + doTestFolding("blockDocComment"); + doTestFolding("procedure"); + } + + private void doTestFolding(String testName){ + myFixture.testFolding(getTestDataPath() + "/ide/folding/" + testName + ".rho"); } } diff --git a/testData/ide/folding/blockDocComment.rho b/testData/ide/folding/blockDocComment.rho index e0a2c73..d69dae7 100644 --- a/testData/ide/folding/blockDocComment.rho +++ b/testData/ide/folding/blockDocComment.rho @@ -1,4 +1,4 @@ -/** +/** * Test - */ + */ diff --git a/testData/ide/folding/procedure.rho b/testData/ide/folding/procedure.rho new file mode 100644 index 0000000..539f9dc --- /dev/null +++ b/testData/ide/folding/procedure.rho @@ -0,0 +1,7 @@ +new time_contract in { + contract time_contract(stream) = { + log-time(stream) + } | + time_contract!(ostream-new("test.txt")) | + time_contract!(ostream-new("test2.txt")) +} From a7ab3e3f1556e9eeb99f1deaab1308b6c61be38c Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Fri, 26 Jan 2018 12:16:45 +0800 Subject: [PATCH 07/10] translate java to kotlin and use the gitignore style as jetbrain suggesting --- .gitignore | 7 +- .../lang/folding/RholangFoldingBuilder.java | 79 ------------------- .../lang/folding/RholangFoldingBuilder.kt | 68 ++++++++++++++++ .../ide/folding/RholangCodeInsightTest.java | 21 ----- .../ide/folding/RholangCodeInsightTest.kt | 20 +++++ .../rchain/lang/lexer/RholangLexTest.java | 26 ------ test/coop/rchain/lang/lexer/RholangLexTest.kt | 24 ++++++ .../rchain/lang/parser/RholangParserTest.java | 24 ------ .../rchain/lang/parser/RholangParserTest.kt | 19 +++++ 9 files changed, 136 insertions(+), 152 deletions(-) delete mode 100644 src/coop/rchain/lang/folding/RholangFoldingBuilder.java create mode 100644 src/coop/rchain/lang/folding/RholangFoldingBuilder.kt delete mode 100644 test/coop/rchain/ide/folding/RholangCodeInsightTest.java create mode 100644 test/coop/rchain/ide/folding/RholangCodeInsightTest.kt delete mode 100644 test/coop/rchain/lang/lexer/RholangLexTest.java create mode 100644 test/coop/rchain/lang/lexer/RholangLexTest.kt delete mode 100644 test/coop/rchain/lang/parser/RholangParserTest.java create mode 100644 test/coop/rchain/lang/parser/RholangParserTest.kt diff --git a/.gitignore b/.gitignore index f15096a..e8ad08d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ out/ -.idea/workspace.xml gen/ *.java~ /*.jar -.idea/ +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/dictionaries +.idea/**/uiDesigner.xml + diff --git a/src/coop/rchain/lang/folding/RholangFoldingBuilder.java b/src/coop/rchain/lang/folding/RholangFoldingBuilder.java deleted file mode 100644 index e3551a0..0000000 --- a/src/coop/rchain/lang/folding/RholangFoldingBuilder.java +++ /dev/null @@ -1,79 +0,0 @@ -package coop.rchain.lang.folding; - -import com.intellij.lang.ASTNode; -import com.intellij.lang.folding.CustomFoldingBuilder; -import com.intellij.lang.folding.FoldingBuilder; -import com.intellij.lang.folding.FoldingDescriptor; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.util.TextRange; -import com.intellij.psi.PsiElement; -import com.intellij.psi.javadoc.PsiDocComment; -import com.intellij.psi.tree.IElementType; -import com.intellij.psi.util.PsiTreeUtil; -import coop.rchain.lang.psi.RhoFile; -import coop.rchain.lang.psi.RhoProc; -import coop.rchain.lang.psi.RhoTypes; -import coop.rchain.lang.psi.impl.RhoProcBlockImpl; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.List; - -public class RholangFoldingBuilder implements FoldingBuilder, DumbAware { - - @NotNull - @Override - public FoldingDescriptor[] buildFoldRegions(@NotNull ASTNode node, @NotNull Document document) { - List descriptors = new ArrayList<>(); - appendDescriptors(node.getPsi(), descriptors, document); - - return descriptors.toArray(FoldingDescriptor.EMPTY); - } - - private void appendDescriptors(PsiElement psi, List descriptors, Document document) { - if(isSingleLine(psi, document)){ // don't fold when text is single line - return; - } - - final IElementType elementType = psi.getNode().getElementType(); - - if(elementType == RhoTypes.BLOCK_DOC_COMMENT){ - final ASTNode blockDocComment = psi.getNode(); - final String commentText = blockDocComment.getText(); - TextRange range = new TextRange(blockDocComment.getTextRange().getStartOffset() + 3, blockDocComment.getTextRange().getEndOffset() - 2); - descriptors.add(new FoldingDescriptor(blockDocComment, range)); - }else if(elementType == RhoTypes.PROC_BLOCK){ -// final RhoProc proc = ((RhoProcBlockImpl) psi).getProc(); -// final TextRange textRange = proc.getTextRange(); -// final TextRange tr1= new TextRange(textRange.getStartOffset(), textRange.getEndOffset()); - final TextRange textRange = psi.getNode().getTextRange(); - final TextRange textRange1 = new TextRange(textRange.getStartOffset() + 1, textRange.getEndOffset() - 1); - descriptors.add(new FoldingDescriptor(psi.getNode(), textRange1)); - } - - PsiElement child = psi.getFirstChild(); - while (child != null){ - appendDescriptors(child, descriptors, document); - child = child.getNextSibling(); - } - } - - - private static boolean isSingleLine(PsiElement element, Document document){ - final TextRange textRange = element.getTextRange(); - return document.getLineNumber(textRange.getStartOffset()) == document.getLineNumber(textRange.getEndOffset()); - } - - @Nullable - @Override - public String getPlaceholderText(@NotNull ASTNode node) { - return "..."; - } - - @Override - public boolean isCollapsedByDefault(@NotNull ASTNode node) { - return false; - } -} diff --git a/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt b/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt new file mode 100644 index 0000000..ad16981 --- /dev/null +++ b/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt @@ -0,0 +1,68 @@ +package coop.rchain.lang.folding + +import com.intellij.lang.ASTNode +import com.intellij.lang.folding.CustomFoldingBuilder +import com.intellij.lang.folding.FoldingBuilder +import com.intellij.lang.folding.FoldingDescriptor +import com.intellij.openapi.editor.Document +import com.intellij.openapi.project.DumbAware +import com.intellij.openapi.util.TextRange +import com.intellij.psi.PsiElement +import com.intellij.psi.javadoc.PsiDocComment +import com.intellij.psi.tree.IElementType +import com.intellij.psi.util.PsiTreeUtil +import coop.rchain.lang.psi.RhoFile +import coop.rchain.lang.psi.RhoProc +import coop.rchain.lang.psi.RhoTypes +import coop.rchain.lang.psi.impl.RhoProcBlockImpl + +import java.util.ArrayList + +class RholangFoldingBuilder : FoldingBuilder, DumbAware { + + override fun buildFoldRegions(node: ASTNode, document: Document): Array { + val descriptors = ArrayList() + appendDescriptors(node.psi, descriptors, document) + + return descriptors.toTypedArray() + } + + private fun appendDescriptors(psi: PsiElement, descriptors: MutableList, document: Document) { + if (isSingleLine(psi, document)) { // don't fold when text is single line + return + } + + val elementType = psi.node.elementType + + if (elementType === RhoTypes.BLOCK_DOC_COMMENT) { + val blockDocComment = psi.node + val commentText = blockDocComment.text + val range = TextRange(blockDocComment.textRange.startOffset + 3, blockDocComment.textRange.endOffset - 2) + descriptors.add(FoldingDescriptor(blockDocComment, range)) + } else if (elementType === RhoTypes.PROC_BLOCK) { + val textRange = psi.node.textRange + val textRange1 = TextRange(textRange.startOffset + 1, textRange.endOffset - 1) + descriptors.add(FoldingDescriptor(psi.node, textRange1)) + } + + var child: PsiElement? = psi.firstChild + while (child != null) { + appendDescriptors(child, descriptors, document) + child = child.nextSibling + } + } + + + private fun isSingleLine(element: PsiElement, document: Document): Boolean { + val textRange = element.textRange + return document.getLineNumber(textRange.startOffset) == document.getLineNumber(textRange.endOffset) + } + + override fun getPlaceholderText(node: ASTNode): String? { + return "..." + } + + override fun isCollapsedByDefault(node: ASTNode): Boolean { + return false + } +} diff --git a/test/coop/rchain/ide/folding/RholangCodeInsightTest.java b/test/coop/rchain/ide/folding/RholangCodeInsightTest.java deleted file mode 100644 index b6803bc..0000000 --- a/test/coop/rchain/ide/folding/RholangCodeInsightTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package coop.rchain.ide.folding; - -import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; - -import static coop.rchain.RholangTestUtil.getBaseTestDataPath; - -public class RholangCodeInsightTest extends LightCodeInsightFixtureTestCase { - @Override - protected String getTestDataPath() { - return getBaseTestDataPath(); - } - - public void testFolding(){ - doTestFolding("blockDocComment"); - doTestFolding("procedure"); - } - - private void doTestFolding(String testName){ - myFixture.testFolding(getTestDataPath() + "/ide/folding/" + testName + ".rho"); - } -} diff --git a/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt b/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt new file mode 100644 index 0000000..4e675be --- /dev/null +++ b/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt @@ -0,0 +1,20 @@ +package coop.rchain.ide.folding + +import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase + +import coop.rchain.RholangTestUtil.getBaseTestDataPath + +class RholangCodeInsightTest : LightCodeInsightFixtureTestCase() { + override fun getTestDataPath(): String { + return getBaseTestDataPath() + } + + fun testFolding() { + doTestFolding("blockDocComment") + doTestFolding("procedure") + } + + private fun doTestFolding(testName: String) { + myFixture.testFolding("$testDataPath/ide/folding/$testName.rho") + } +} diff --git a/test/coop/rchain/lang/lexer/RholangLexTest.java b/test/coop/rchain/lang/lexer/RholangLexTest.java deleted file mode 100644 index 7975a2f..0000000 --- a/test/coop/rchain/lang/lexer/RholangLexTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package coop.rchain.lang.lexer; - -import com.intellij.lexer.Lexer; -import com.intellij.openapi.application.PathManager; -import com.intellij.testFramework.LexerTestCase; -import coop.rchain.RholangTestUtil; -import coop.rchain.lang.RhoLexerAdapter; - -import java.nio.file.Paths; - -public class RholangLexTest extends LexerTestCase { - - @Override - protected Lexer createLexer() { - return new RhoLexerAdapter(); - } - - @Override - protected String getDirPath() { - return Paths.get(RholangTestUtil.getBaseTestDataPath(), "lexer").toString().substring(PathManager.getHomePath().length()); - } - - public void testToken() { - doFileTest("rho"); - } -} diff --git a/test/coop/rchain/lang/lexer/RholangLexTest.kt b/test/coop/rchain/lang/lexer/RholangLexTest.kt new file mode 100644 index 0000000..6fa69fa --- /dev/null +++ b/test/coop/rchain/lang/lexer/RholangLexTest.kt @@ -0,0 +1,24 @@ +package coop.rchain.lang.lexer + +import com.intellij.lexer.Lexer +import com.intellij.openapi.application.PathManager +import com.intellij.testFramework.LexerTestCase +import coop.rchain.RholangTestUtil +import coop.rchain.lang.RhoLexerAdapter + +import java.nio.file.Paths + +class RholangLexTest : LexerTestCase() { + + override fun createLexer(): Lexer { + return RhoLexerAdapter() + } + + override fun getDirPath(): String { + return Paths.get(RholangTestUtil.getBaseTestDataPath(), "lexer").toString().substring(PathManager.getHomePath().length) + } + + fun testToken() { + doFileTest("rho") + } +} diff --git a/test/coop/rchain/lang/parser/RholangParserTest.java b/test/coop/rchain/lang/parser/RholangParserTest.java deleted file mode 100644 index 1cb6e5f..0000000 --- a/test/coop/rchain/lang/parser/RholangParserTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package coop.rchain.lang.parser; - -import com.intellij.lang.ParserDefinition; -import com.intellij.testFramework.ParsingTestCase; -import coop.rchain.RholangTestUtil; -import coop.rchain.lang.RhoParserDefinition; -import org.jetbrains.annotations.NotNull; - -import java.nio.file.Paths; - -public class RholangParserTest extends ParsingTestCase { - public RholangParserTest() { - super("", "rho", new RhoParserDefinition()); - } - - @Override - protected String getTestDataPath() { - return Paths.get(RholangTestUtil.getBaseTestDataPath(), "parser").toString(); - } - - public void testtoken(){ - doTest(true); - } -} diff --git a/test/coop/rchain/lang/parser/RholangParserTest.kt b/test/coop/rchain/lang/parser/RholangParserTest.kt new file mode 100644 index 0000000..4303feb --- /dev/null +++ b/test/coop/rchain/lang/parser/RholangParserTest.kt @@ -0,0 +1,19 @@ +package coop.rchain.lang.parser + +import com.intellij.lang.ParserDefinition +import com.intellij.testFramework.ParsingTestCase +import coop.rchain.RholangTestUtil +import coop.rchain.lang.RhoParserDefinition + +import java.nio.file.Paths + +class RholangParserTest : ParsingTestCase("", "rho", RhoParserDefinition()) { + + override fun getTestDataPath(): String { + return Paths.get(RholangTestUtil.getBaseTestDataPath(), "parser").toString() + } + + fun testtoken() { + doTest(true) + } +} From 3ee03c6973c4de1cbca9676a70c2ff39519d99f2 Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Fri, 26 Jan 2018 12:23:07 +0800 Subject: [PATCH 08/10] update gitignore --- .gitignore | 7 +- .idea/kotlinc.xml | 7 + src/coop/rchain/lang/Rho.bnf | 2 +- .../lang/folding/RholangFoldingBuilder.kt | 1 - test/coop/rchain/RholangTestUtil.java | 9 - test/coop/rchain/RholangTestUtil.kt | 8 + .../ide/folding/RholangCodeInsightTest.kt | 4 +- test/coop/rchain/lang/lexer/RholangLexTest.kt | 2 +- .../rchain/lang/parser/RholangParserTest.kt | 4 +- testData/lexer/token.txt | 8 +- testData/parser/token.txt | 4537 +++++++++-------- 11 files changed, 2302 insertions(+), 2287 deletions(-) create mode 100644 .idea/kotlinc.xml delete mode 100644 test/coop/rchain/RholangTestUtil.java create mode 100644 test/coop/rchain/RholangTestUtil.kt diff --git a/.gitignore b/.gitignore index e8ad08d..8ebea89 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,9 @@ out/ gen/ *.java~ /*.jar -.idea/**/workspace.xml -.idea/**/tasks.xml +.idea/workspace.xml +.idea/tasks.xml .idea/dictionaries -.idea/**/uiDesigner.xml +.idea/uiDesigner.xml +.idea/misc.xml diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..5806fb3 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/src/coop/rchain/lang/Rho.bnf b/src/coop/rchain/lang/Rho.bnf index e9699e9..ab229a3 100644 --- a/src/coop/rchain/lang/Rho.bnf +++ b/src/coop/rchain/lang/Rho.bnf @@ -93,7 +93,7 @@ Contract ::= Proc Contract_ ::= CONTRACT ContractName "(" [CPattern] ")" "=" ProcBlock | CONTRACT ContractName "=" TypeTerm -ProcBlock ::= "{" Proc "}" +ProcBlock ::= "{" [Proc] "}" ContractName ::= ID_NAME { implements = [ "coop.rchain.lang.psi.RhoNamedElement" ] diff --git a/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt b/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt index ad16981..b1abe37 100644 --- a/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt +++ b/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt @@ -36,7 +36,6 @@ class RholangFoldingBuilder : FoldingBuilder, DumbAware { if (elementType === RhoTypes.BLOCK_DOC_COMMENT) { val blockDocComment = psi.node - val commentText = blockDocComment.text val range = TextRange(blockDocComment.textRange.startOffset + 3, blockDocComment.textRange.endOffset - 2) descriptors.add(FoldingDescriptor(blockDocComment, range)) } else if (elementType === RhoTypes.PROC_BLOCK) { diff --git a/test/coop/rchain/RholangTestUtil.java b/test/coop/rchain/RholangTestUtil.java deleted file mode 100644 index 6207632..0000000 --- a/test/coop/rchain/RholangTestUtil.java +++ /dev/null @@ -1,9 +0,0 @@ -package coop.rchain; - -import com.intellij.openapi.application.PathManager; - -public class RholangTestUtil { - public static String getBaseTestDataPath() { - return PathManager.getHomePath() + "/testData"; - } -} diff --git a/test/coop/rchain/RholangTestUtil.kt b/test/coop/rchain/RholangTestUtil.kt new file mode 100644 index 0000000..a347b5c --- /dev/null +++ b/test/coop/rchain/RholangTestUtil.kt @@ -0,0 +1,8 @@ +package coop.rchain + +import com.intellij.openapi.application.PathManager + +object RholangTestUtil { + val baseTestDataPath: String + get() = PathManager.getHomePath() + "/testData" +} diff --git a/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt b/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt index 4e675be..17e3f6d 100644 --- a/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt +++ b/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt @@ -1,12 +1,12 @@ package coop.rchain.ide.folding import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase +import coop.rchain.RholangTestUtil.baseTestDataPath -import coop.rchain.RholangTestUtil.getBaseTestDataPath class RholangCodeInsightTest : LightCodeInsightFixtureTestCase() { override fun getTestDataPath(): String { - return getBaseTestDataPath() + return baseTestDataPath } fun testFolding() { diff --git a/test/coop/rchain/lang/lexer/RholangLexTest.kt b/test/coop/rchain/lang/lexer/RholangLexTest.kt index 6fa69fa..630c717 100644 --- a/test/coop/rchain/lang/lexer/RholangLexTest.kt +++ b/test/coop/rchain/lang/lexer/RholangLexTest.kt @@ -15,7 +15,7 @@ class RholangLexTest : LexerTestCase() { } override fun getDirPath(): String { - return Paths.get(RholangTestUtil.getBaseTestDataPath(), "lexer").toString().substring(PathManager.getHomePath().length) + return Paths.get(RholangTestUtil.baseTestDataPath, "lexer").toString().substring(PathManager.getHomePath().length) } fun testToken() { diff --git a/test/coop/rchain/lang/parser/RholangParserTest.kt b/test/coop/rchain/lang/parser/RholangParserTest.kt index 4303feb..dd74922 100644 --- a/test/coop/rchain/lang/parser/RholangParserTest.kt +++ b/test/coop/rchain/lang/parser/RholangParserTest.kt @@ -1,16 +1,14 @@ package coop.rchain.lang.parser -import com.intellij.lang.ParserDefinition import com.intellij.testFramework.ParsingTestCase import coop.rchain.RholangTestUtil import coop.rchain.lang.RhoParserDefinition - import java.nio.file.Paths class RholangParserTest : ParsingTestCase("", "rho", RhoParserDefinition()) { override fun getTestDataPath(): String { - return Paths.get(RholangTestUtil.getBaseTestDataPath(), "parser").toString() + return Paths.get(RholangTestUtil.baseTestDataPath, "parser").toString() } fun testtoken() { diff --git a/testData/lexer/token.txt b/testData/lexer/token.txt index 8f2fb75..7d14cec 100644 --- a/testData/lexer/token.txt +++ b/testData/lexer/token.txt @@ -1,10 +1,6 @@ -LINE_COMMENT ('// A token contract that implements the ERC20 standard.') +LINE_COMMENT ('// test') WHITE_SPACE ('\n') -LINE_COMMENT ('// This contract demonstrates the creation of a token,') -WHITE_SPACE ('\n') -LINE_COMMENT ('// the transferring of tokens, the querying of a balance,') -WHITE_SPACE ('\n') -LINE_COMMENT ('// and the printing of the balance query result.') +BLOCK_COMMENT ('/*\n * A token contract that implements the ERC20 standard.\n * This contract demonstrates the creation of a token,\n * the transferring of tokens, the querying of a balance,\n * and the printing of the balance query result.\n */') WHITE_SPACE ('\n\n') new ('new') WHITE_SPACE (' ') diff --git a/testData/parser/token.txt b/testData/parser/token.txt index 4abcc85..1f7b3f5 100644 --- a/testData/parser/token.txt +++ b/testData/parser/token.txt @@ -1,13 +1,8 @@ Rholang File - PsiComment(LINE_COMMENT)('// A token contract that implements the ERC20 standard.') - PsiWhiteSpace('\n') - PsiComment(LINE_COMMENT)('// This contract demonstrates the creation of a token,') - PsiWhiteSpace('\n') - PsiComment(LINE_COMMENT)('// the transferring of tokens, the querying of a balance,') - PsiWhiteSpace('\n') - PsiComment(LINE_COMMENT)('// and the printing of the balance query result.') - PsiWhiteSpace('\n\n') RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + PsiElement(BLOCK_DOC_COMMENT)('/**\n * A token contract that implements the ERC20 standard.\n * This contract demonstrates the creation of a token,\n * the transferring of tokens, the querying of a balance,\n * and the printing of the balance query result.\n */') + PsiWhiteSpace('\n\n') RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) PsiElement(new)('new') @@ -18,141 +13,85 @@ Rholang File PsiWhiteSpace(' ') PsiElement(in)('in') PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoContract_Impl(CONTRACT_) - PsiElement(contract)('contract') - PsiWhiteSpace(' ') - RhoContractNameImpl(CONTRACT_NAME) - PsiElement(ID_NAME)('token') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('total_supply') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('return_channel') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(=)('=') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(new)('new') - PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('token') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) RhoVarPatternImpl(VAR_PATTERN) RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('allowed_channel') + PsiElement(ID_NAME)('message_sender') PsiElement(,)(',') PsiWhiteSpace(' ') RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balances_channel') + PsiElement(ID_NAME)('total_supply') PsiElement(,)(',') PsiWhiteSpace(' ') RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('owner_channel') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) + PsiElement(ID_NAME)('return_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) PsiElement(ID_NAME)('allowed_channel') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('Map') - PsiElement(()('(') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('owner_channel') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('message_sender') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) PsiElement(ID_NAME)('balances_channel') - PsiElement(!)('!') - PsiElement(()('(') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('owner_channel') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n\n ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('Map') + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('Map') + PsiElement(()('(') + PsiElement())(')') PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balances') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') RhoProc_Impl(PROC_) RhoProc2Impl(PROC_2) RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') + PsiElement(ID_NAME)('owner_channel') PsiElement(!)('!') PsiElement(()('(') - PsiWhiteSpace(' ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) @@ -160,1055 +99,489 @@ Rholang File RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('insert') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('total_supply') - PsiElement())(')') - PsiWhiteSpace(' ') + PsiElement(ID_NAME)('message_sender') PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(new)('new') - PsiWhiteSpace(' ') - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('transfer') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('transfer_from') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('approve') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balance_of') - PsiElement(,)(',') PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('allowance') - PsiElement(,)(',') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('Map') + PsiElement(()('(') + PsiElement())(')') + PsiElement())(')') PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('contract_owner') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n\n ') - RhoProcImpl(PROC) + PsiElement(|)('|') + PsiWhiteSpace('\n ') RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) - RhoContract_Impl(CONTRACT_) - PsiElement(contract)('contract') - PsiWhiteSpace(' ') - RhoContractNameImpl(CONTRACT_NAME) - PsiElement(ID_NAME)('transfer') - PsiElement(()('(') - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('to') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('amount') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('rtn') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(=)('=') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace(' ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) PsiElement(ID_NAME)('balances') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(new)('new') - PsiWhiteSpace(' ') - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('x') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('y') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('x') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('getOrElse') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('y') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('getOrElse') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('to') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balance_of_sender') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('x') - PsiWhiteSpace('\n ') - PsiElement(;)(';') - PsiWhiteSpace(' ') - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balance_of_receiver') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('y') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - PsiComment(LINE_COMMENT)('// Preconditions to check before the transfer goes through') - PsiWhiteSpace('\n ') + PsiElement(.)('.') RhoProcImpl(PROC) RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) - PsiElement(match)('match') - PsiWhiteSpace(' ') + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') RhoProcImpl(PROC) RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) - PsiElement([)('[') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_sender') - PsiWhiteSpace(' ') - PsiElement(>=)('>=') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiElement(,)(',') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiWhiteSpace(' ') - PsiElement(>)('>') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement(,)(',') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_receiver') - PsiWhiteSpace(' ') - PsiElement(+)('+') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiWhiteSpace(' ') - PsiElement(>)('>') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_receiver') - PsiElement(])(']') - PsiWhiteSpace(' ') - PsiElement(with)('with') - PsiWhiteSpace('\n ') - RhoPMBranchImpl(PM_BRANCH) - RhoPMBranch_Impl(PM_BRANCH_) - RhoPPatternImpl(P_PATTERN) - RhoPPattern_Impl(P_PATTERN_) - RhoPPattern4Impl(P_PATTERN_4) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoValPatternImpl(VAL_PATTERN) - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(<)('<') - RhoPPatternImpl(P_PATTERN) - RhoPPattern_Impl(P_PATTERN_) - RhoPPattern4Impl(P_PATTERN_4) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoValPatternImpl(VAL_PATTERN) - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(true)('true') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(true)('true') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(true)('true') - PsiElement(>)('>') - PsiWhiteSpace(' ') - PsiElement(=>)('=>') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiElement(!)('!') - PsiElement(()('(') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiWhiteSpace('\n ') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('insert') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_sender') - PsiWhiteSpace(' ') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(.)('.') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('insert') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('to') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_receiver') - PsiElement(+)('+') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(true)('true') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - RhoPMBranch_Impl(PM_BRANCH_) - RhoPPatternImpl(P_PATTERN) - RhoPPattern_Impl(P_PATTERN_) - RhoPPattern4Impl(P_PATTERN_4) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('_') - PsiWhiteSpace(' ') - PsiElement(=>)('=>') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(false)('false') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('total_supply') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') PsiWhiteSpace(' ') PsiElement(|)('|') - PsiWhiteSpace('\n\n ') - PsiComment(LINE_COMMENT)('// Same as the transfer contract but allows for the sender to be different from') - PsiWhiteSpace('\n ') - PsiComment(LINE_COMMENT)('// the person calling the transfer_from contract') - PsiWhiteSpace('\n ') + PsiWhiteSpace('\n\n ') RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) - RhoContract_Impl(CONTRACT_) - PsiElement(contract)('contract') + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('transfer') + PsiElement(,)(',') PsiWhiteSpace(' ') - RhoContractNameImpl(CONTRACT_NAME) + RhoVarPattern_Impl(VAR_PATTERN_) PsiElement(ID_NAME)('transfer_from') - PsiElement(()('(') - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('from') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('to') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('amount') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('rtn') - PsiElement())(')') + PsiElement(,)(',') PsiWhiteSpace(' ') - PsiElement(=)('=') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('approve') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowance') + PsiElement(,)(',') PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('contract_owner') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) PsiElement({)('{') - PsiWhiteSpace('\n ') + PsiWhiteSpace('\n\n ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balances') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiWhiteSpace('\n ') - PsiElement(;)(';') + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') PsiWhiteSpace(' ') - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('allowed') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('allowed_channel') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(new)('new') - PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('transfer') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) RhoVarPatternImpl(VAR_PATTERN) RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('x') + PsiElement(ID_NAME)('message_sender') PsiElement(,)(',') PsiWhiteSpace(' ') RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('y') + PsiElement(ID_NAME)('to') PsiElement(,)(',') PsiWhiteSpace(' ') RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('z') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('x') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('getOrElse') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('from') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('y') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('allowed') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('getOrElse') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('from') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('z') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('getOrElse') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('to') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement())(')') - PsiElement())(')') + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - PsiWhiteSpace(' ') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balance_of_sender') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('x') - PsiWhiteSpace('\n ') - PsiElement(;)(';') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances') PsiWhiteSpace(' ') - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('sender_allowed') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('y') - PsiWhiteSpace('\n ') - PsiElement(;)(';') + PsiElement(<)('<') + PsiElement(-)('-') PsiWhiteSpace(' ') - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balance_of_receiver') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('x') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('y') PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('z') - PsiWhiteSpace(' ') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(match)('match') - PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - PsiElement([)('[') - PsiWhiteSpace('\n ') + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('x') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('y') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('x') + PsiWhiteSpace('\n ') + PsiElement(;)(';') + PsiWhiteSpace(' ') + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('y') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// Preconditions to check before the transfer goes through') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(match)('match') + PsiWhiteSpace(' ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_sender') - PsiWhiteSpace(' ') - PsiElement(>=)('>=') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiElement(,)(',') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('sender_allowed') - PsiWhiteSpace(' ') - PsiElement(>=)('>=') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiElement(,)(',') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiWhiteSpace(' ') - PsiElement(>)('>') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement(,)(',') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_receiver') - PsiWhiteSpace(' ') - PsiElement(+)('+') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiWhiteSpace(' ') - PsiElement(>)('>') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_receiver') - PsiElement(])(']') - PsiWhiteSpace(' ') - PsiElement(with)('with') - PsiWhiteSpace('\n ') - RhoPMBranchImpl(PM_BRANCH) - RhoPMBranch_Impl(PM_BRANCH_) - RhoPPatternImpl(P_PATTERN) - RhoPPattern_Impl(P_PATTERN_) - RhoPPattern4Impl(P_PATTERN_4) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoValPatternImpl(VAL_PATTERN) - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(<)('<') - RhoPPatternImpl(P_PATTERN) - RhoPPattern_Impl(P_PATTERN_) - RhoPPattern4Impl(P_PATTERN_4) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoValPatternImpl(VAL_PATTERN) - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(true)('true') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(true)('true') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(true)('true') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoValPattern_Impl(VAL_PATTERN_) - PsiElement(true)('true') - PsiElement(>)('>') - PsiWhiteSpace(' ') - PsiElement(=>)('=>') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiElement(!)('!') - PsiElement(()('(') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiWhiteSpace('\n ') - PsiElement(.)('.') + PsiElement([)('[') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(>=)('>=') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiWhiteSpace(' ') + PsiElement(>)('>') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(+)('+') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiWhiteSpace(' ') + PsiElement(>)('>') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiElement(])(']') + PsiWhiteSpace(' ') + PsiElement(with)('with') + PsiWhiteSpace('\n ') + RhoPMBranchImpl(PM_BRANCH) + RhoPMBranch_Impl(PM_BRANCH_) + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoValPatternImpl(VAL_PATTERN) + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(<)('<') + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoValPatternImpl(VAL_PATTERN) + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(>)('>') + PsiWhiteSpace(' ') + PsiElement(=>)('=>') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') RhoProcImpl(PROC) RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('insert') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('from') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_sender') - PsiWhiteSpace(' ') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(.)('.') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('insert') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('to') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_receiver') - PsiWhiteSpace(' ') - PsiElement(+)('+') - PsiWhiteSpace(' ') - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('allowed_channel') - PsiElement(!)('!') - PsiElement(()('(') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('allowed') - PsiElement(.)('.') - RhoProcImpl(PROC) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace('\n ') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(.)('.') RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) RhoConstrNameImpl(CONSTR_NAME) @@ -1221,7 +594,7 @@ Rholang File RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('from') + PsiElement(ID_NAME)('to') PsiElement(,)(',') PsiWhiteSpace(' ') RhoProc_Impl(PROC_) @@ -1230,7 +603,580 @@ Rholang File RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('message_sender') + PsiElement(ID_NAME)('balance_of_receiver') + PsiElement(+)('+') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(true)('true') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + RhoPMBranch_Impl(PM_BRANCH_) + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('_') + PsiWhiteSpace(' ') + PsiElement(=>)('=>') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(false)('false') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + PsiComment(LINE_COMMENT)('// Same as the transfer contract but allows for the sender to be different from') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// the person calling the transfer_from contract') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('transfer_from') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiWhiteSpace('\n ') + PsiElement(;)(';') + PsiWhiteSpace(' ') + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowed') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('x') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('y') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('z') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('x') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('y') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('z') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('to') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + PsiWhiteSpace(' ') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('x') + PsiWhiteSpace('\n ') + PsiElement(;)(';') + PsiWhiteSpace(' ') + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('sender_allowed') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('y') + PsiWhiteSpace('\n ') + PsiElement(;)(';') + PsiWhiteSpace(' ') + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('z') + PsiWhiteSpace(' ') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(match)('match') + PsiWhiteSpace(' ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(>=)('>=') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('sender_allowed') + PsiWhiteSpace(' ') + PsiElement(>=)('>=') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiWhiteSpace(' ') + PsiElement(>)('>') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiWhiteSpace(' ') + PsiElement(+)('+') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiWhiteSpace(' ') + PsiElement(>)('>') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_receiver') + PsiElement(])(']') + PsiWhiteSpace(' ') + PsiElement(with)('with') + PsiWhiteSpace('\n ') + RhoPMBranchImpl(PM_BRANCH) + RhoPMBranch_Impl(PM_BRANCH_) + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoValPatternImpl(VAL_PATTERN) + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(<)('<') + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoValPatternImpl(VAL_PATTERN) + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoValPattern_Impl(VAL_PATTERN_) + PsiElement(true)('true') + PsiElement(>)('>') + PsiWhiteSpace(' ') + PsiElement(=>)('=>') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace('\n ') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_sender') + PsiWhiteSpace(' ') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('to') PsiElement(,)(',') PsiWhiteSpace(' ') RhoProc_Impl(PROC_) @@ -1239,234 +1185,653 @@ Rholang File RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('sender_allowed') + PsiElement(ID_NAME)('balance_of_receiver') PsiWhiteSpace(' ') - PsiElement(-)('-') + PsiElement(+)('+') PsiWhiteSpace(' ') RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) PsiElement(ID_NAME)('amount') PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(true)('true') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - RhoPMBranch_Impl(PM_BRANCH_) - RhoPPatternImpl(P_PATTERN) - RhoPPattern_Impl(P_PATTERN_) - RhoPPattern4Impl(P_PATTERN_4) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('_') - PsiWhiteSpace(' ') - PsiElement(=>)('=>') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('allowed_channel') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('allowed') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(false)('false') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n\n ') - PsiComment(LINE_COMMENT)('// This is the way an address can pre-approve (delegate) the transfer of') - PsiWhiteSpace('\n ') - PsiComment(LINE_COMMENT)('// a certain amount of tokens to some other address. This allows for') - PsiWhiteSpace('\n ') - PsiComment(LINE_COMMENT)('// that other address, through the use of the transfer_from function,') - PsiWhiteSpace('\n ') - PsiComment(LINE_COMMENT)('// to send up to that amount of tokens.') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoContract_Impl(CONTRACT_) - PsiElement(contract)('contract') - PsiWhiteSpace(' ') - RhoContractNameImpl(CONTRACT_NAME) - PsiElement(ID_NAME)('approve') - PsiElement(()('(') - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('spender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('amount') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('rtn') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(=)('=') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) + PsiWhiteSpace('\n ') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('from') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('sender_allowed') + PsiWhiteSpace(' ') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(true)('true') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + RhoPMBranch_Impl(PM_BRANCH_) + RhoPPatternImpl(P_PATTERN) + RhoPPattern_Impl(P_PATTERN_) + RhoPPattern4Impl(P_PATTERN_4) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('_') + PsiWhiteSpace(' ') + PsiElement(=>)('=>') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(false)('false') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + PsiComment(LINE_COMMENT)('// This is the way an address can pre-approve (delegate) the transfer of') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// a certain amount of tokens to some other address. This allows for') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// that other address, through the use of the transfer_from function,') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// to send up to that amount of tokens.') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('approve') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('spender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('amount') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowed') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insert') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('message_sender') + PsiElement(,)(',') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('spender') + PsiElement(,)(',') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('amount') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(true)('true') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('balance_of') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('owner') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balances') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('owner') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balances_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balances') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('allowance') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('owner') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('spender') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('allowed') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('allowed_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowed') + PsiElement(.)('.') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('getOrElse') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('owner') + PsiElement(,)(',') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('spender') + PsiElement(,)(',') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('0') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') + RhoContract_Impl(CONTRACT_) + PsiElement(contract)('contract') + PsiWhiteSpace(' ') + RhoContractNameImpl(CONTRACT_NAME) + PsiElement(ID_NAME)('contract_owner') + PsiElement(()('(') + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(=)('=') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('owner') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('owner_channel') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('owner_channel') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('owner') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('owner') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n\n ') + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('return_channel') + PsiElement(!)('!') PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('allowed') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('allowed_channel') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') + PsiWhiteSpace('\n ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('allowed_channel') - PsiElement(!)('!') + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('Map') PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('allowed') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('insert') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('message_sender') - PsiElement(,)(',') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('spender') - PsiElement(,)(',') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('amount') - PsiElement())(')') PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') + PsiElement(.)('.') RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement(!)('!') + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('insertMany') PsiElement(()('(') RhoProcImpl(PROC) RhoProc_Impl(PROC_) @@ -1475,603 +1840,235 @@ Rholang File RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(true)('true') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoContract_Impl(CONTRACT_) - PsiElement(contract)('contract') - PsiWhiteSpace(' ') - RhoContractNameImpl(CONTRACT_NAME) - PsiElement(ID_NAME)('balance_of') - PsiElement(()('(') - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('owner') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('rtn') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(=)('=') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balances') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) + PsiElement(STRING_LIT)('"transfer"') + PsiElement(,)(',') + PsiWhiteSpace(' ') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('getOrElse') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('owner') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balances_channel') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) + PsiElement(ID_NAME)('transfer') + PsiElement(,)(',') + PsiWhiteSpace(' ') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balances') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoContract_Impl(CONTRACT_) - PsiElement(contract)('contract') - PsiWhiteSpace(' ') - RhoContractNameImpl(CONTRACT_NAME) - PsiElement(ID_NAME)('allowance') - PsiElement(()('(') - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('owner') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('spender') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('rtn') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(=)('=') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('allowed') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('allowed_channel') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('allowed_channel') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) + PsiElement(STRING_LIT)('"transfer_from"') + PsiElement(,)(',') + PsiWhiteSpace(' ') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('allowed') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) + PsiElement(ID_NAME)('transfer_from') + PsiElement(,)(',') + PsiWhiteSpace('\n ') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('allowed') - PsiElement(.)('.') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('getOrElse') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('owner') - PsiElement(,)(',') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('spender') - PsiElement(,)(',') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('0') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoContract_Impl(CONTRACT_) - PsiElement(contract)('contract') - PsiWhiteSpace(' ') - RhoContractNameImpl(CONTRACT_NAME) - PsiElement(ID_NAME)('contract_owner') - PsiElement(()('(') - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('rtn') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(=)('=') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('owner') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('owner_channel') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('owner_channel') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) + PsiElement(STRING_LIT)('"approve"') + PsiElement(,)(',') + PsiWhiteSpace(' ') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('owner') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) + PsiElement(ID_NAME)('approve') + PsiElement(,)(',') + PsiWhiteSpace(' ') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('owner') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n\n ') - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('return_channel') - PsiElement(!)('!') - PsiElement(()('(') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('Map') - PsiElement(()('(') - PsiElement())(')') - PsiElement(.)('.') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('insertMany') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"transfer"') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('transfer') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"transfer_from"') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('transfer_from') - PsiElement(,)(',') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"approve"') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('approve') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"balance_of"') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"allowance"') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('allowance') - PsiElement(,)(',') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"contract_owner"') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('contract_owner') - PsiElement())(')') - PsiElement())(')') - PsiWhiteSpace('\n ') - PsiComment(LINE_COMMENT)('// TODO: Eventually just insert with compiler') - PsiWhiteSpace('\n ') + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"balance_of"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"allowance"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('allowance') + PsiElement(,)(',') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"contract_owner"') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('contract_owner') + PsiElement())(')') + PsiElement())(')') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// TODO: Eventually just insert with compiler') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(new)('new') - PsiWhiteSpace(' ') - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('rtn') - PsiElement(,)(',') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('me') - PsiElement(,)(',') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('me') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('they') PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('they') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('token') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - PsiElement([)('[') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('me') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('100') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('rtn') - PsiElement(])(']') - PsiElement())(')') + PsiElement(in)('in') PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('token_contract') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn') - PsiElement())(')') + PsiElement(ID_NAME)('token') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('me') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('100') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('rtn') + PsiElement(])(']') + PsiElement())(')') PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(new)('new') - PsiWhiteSpace(' ') - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('unused_rtn') - PsiElement(,)(',') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('token_contract') PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balance_of_rtn') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(@)('@') - PsiElement(ID_NAME)('token_contract') - PsiElement(.)('.') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('get') - PsiElement(()('(') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('unused_rtn') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_rtn') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"transfer"') - PsiElement())(')') - PsiElement(!)('!') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) + RhoProc1Impl(PROC_1) + PsiElement(@)('@') + PsiElement(ID_NAME)('token_contract') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('get') PsiElement(()('(') RhoProcImpl(PROC) RhoProc_Impl(PROC_) @@ -2079,129 +2076,72 @@ Rholang File RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) - PsiElement([)('[') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('me') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('they') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('50') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('unused_rtn') - PsiElement(])(']') + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"transfer"') PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(@)('@') - PsiElement(ID_NAME)('token_contract') - PsiElement(.)('.') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('get') - PsiElement(()('(') - RhoProcImpl(PROC) + PsiElement(!)('!') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"balance_of"') - PsiElement())(')') - PsiElement(!)('!') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - PsiElement([)('[') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('they') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_rtn') - PsiElement(])(']') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('they_balance') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balance_of_rtn') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace(' ') - RhoProcImpl(PROC) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('me') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('50') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('unused_rtn') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(@)('@') + PsiElement(ID_NAME)('token_contract') + PsiElement(.)('.') RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('print') + PsiElement(ID_NAME)('get') PsiElement(()('(') RhoProcImpl(PROC) RhoProc_Impl(PROC_) @@ -2210,149 +2150,208 @@ Rholang File RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('they_balance') + PsiElement(STRING_LIT)('"balance_of"') PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(new)('new') - PsiWhiteSpace(' ') - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('rtn2') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('me2') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('they2') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc2Impl(PROC_2) - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('token') - PsiElement(!)('!') - PsiElement(()('(') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - PsiElement([)('[') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('me2') - PsiElement(,)(',') - PsiWhiteSpace(' ') + PsiElement(!)('!') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('1000') - PsiElement(,)(',') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_rtn') + PsiElement(])(']') + PsiElement())(')') PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('rtn2') - PsiElement(])(']') - PsiElement())(')') + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('they_balance') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balance_of_rtn') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace(' ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('print') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they_balance') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('token_contract2') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('rtn2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('me2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('they2') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc2Impl(PROC_2) RhoChanImpl(CHAN) - PsiElement(ID_NAME)('rtn2') - PsiElement())(')') + PsiElement(ID_NAME)('token') + PsiElement(!)('!') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('me2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('1000') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('rtn2') + PsiElement(])(']') + PsiElement())(')') PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(new)('new') - PsiWhiteSpace(' ') - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('unused_rtn2') - PsiElement(,)(',') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(for)('for') + PsiWhiteSpace(' ') + PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('token_contract2') PsiWhiteSpace(' ') - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('balance_of_rtn2') - PsiWhiteSpace(' ') - PsiElement(in)('in') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace('\n ') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(@)('@') - PsiElement(ID_NAME)('token_contract2') - PsiElement(.)('.') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('get') - PsiElement(()('(') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('rtn2') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace('\n ') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(new)('new') + PsiWhiteSpace(' ') + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('unused_rtn2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('balance_of_rtn2') + PsiWhiteSpace(' ') + PsiElement(in)('in') + PsiWhiteSpace(' ') + RhoProcBlockImpl(PROC_BLOCK) + PsiElement({)('{') + PsiWhiteSpace('\n ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"transfer"') - PsiElement())(')') - PsiElement(!)('!') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) + RhoProc1Impl(PROC_1) + PsiElement(@)('@') + PsiElement(ID_NAME)('token_contract2') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('get') PsiElement(()('(') RhoProcImpl(PROC) RhoProc_Impl(PROC_) @@ -2360,72 +2359,72 @@ Rholang File RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) - PsiElement([)('[') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('me2') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('they2') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(DEC_LIT)('500') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('unused_rtn2') - PsiElement(])(']') + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"transfer"') PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(@)('@') - PsiElement(ID_NAME)('token_contract2') - PsiElement(.)('.') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('get') - PsiElement(()('(') - RhoProcImpl(PROC) + PsiElement(!)('!') RhoProc_Impl(PROC_) RhoProc4Impl(PROC_4) RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(STRING_LIT)('"balance_of"') - PsiElement())(')') - PsiElement(!)('!') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('me2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(DEC_LIT)('500') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('unused_rtn2') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + PsiElement(@)('@') + PsiElement(ID_NAME)('token_contract2') + PsiElement(.)('.') + RhoProc_Impl(PROC_) + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('get') PsiElement(()('(') RhoProcImpl(PROC) RhoProc_Impl(PROC_) @@ -2433,75 +2432,91 @@ Rholang File RhoValueImpl(VALUE) RhoQuantityImpl(QUANTITY) RhoQuantity_Impl(QUANTITY_) - PsiElement([)('[') - RhoProcImpl(PROC) - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('they2') - PsiElement(,)(',') - PsiWhiteSpace(' ') - RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('balance_of_rtn2') - PsiElement(])(']') + RhoQValImpl(Q_VAL) + PsiElement(STRING_LIT)('"balance_of"') PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement(|)('|') - PsiWhiteSpace('\n ') - RhoProc_Impl(PROC_) - RhoProc1Impl(PROC_1) - PsiElement(for)('for') - PsiWhiteSpace(' ') - PsiElement(()('(') - RhoBindImpl(BIND) - RhoBind_Impl(BIND_) - RhoCPatternImpl(C_PATTERN) - RhoCPattern_Impl(C_PATTERN_) - RhoVarPatternImpl(VAR_PATTERN) - RhoVarPattern_Impl(VAR_PATTERN_) - PsiElement(ID_NAME)('they_balance2') - PsiWhiteSpace(' ') - PsiElement(<)('<') - PsiElement(-)('-') - PsiWhiteSpace(' ') - RhoChanImpl(CHAN) - PsiElement(ID_NAME)('balance_of_rtn2') - PsiElement())(')') - PsiWhiteSpace(' ') - PsiElement({)('{') - PsiWhiteSpace(' ') - RhoProcImpl(PROC) + PsiElement(!)('!') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + PsiElement([)('[') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they2') + PsiElement(,)(',') + PsiWhiteSpace(' ') + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('balance_of_rtn2') + PsiElement(])(']') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(|)('|') + PsiWhiteSpace('\n ') RhoProc_Impl(PROC_) RhoProc1Impl(PROC_1) - RhoConstrNameImpl(CONSTR_NAME) - PsiElement(ID_NAME)('print') + PsiElement(for)('for') + PsiWhiteSpace(' ') PsiElement(()('(') + RhoBindImpl(BIND) + RhoBind_Impl(BIND_) + RhoCPatternImpl(C_PATTERN) + RhoCPattern_Impl(C_PATTERN_) + RhoVarPatternImpl(VAR_PATTERN) + RhoVarPattern_Impl(VAR_PATTERN_) + PsiElement(ID_NAME)('they_balance2') + PsiWhiteSpace(' ') + PsiElement(<)('<') + PsiElement(-)('-') + PsiWhiteSpace(' ') + RhoChanImpl(CHAN) + PsiElement(ID_NAME)('balance_of_rtn2') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement({)('{') + PsiWhiteSpace(' ') RhoProcImpl(PROC) RhoProc_Impl(PROC_) - RhoProc4Impl(PROC_4) - RhoValueImpl(VALUE) - RhoQuantityImpl(QUANTITY) - RhoQuantity_Impl(QUANTITY_) - RhoQValImpl(Q_VAL) - PsiElement(ID_NAME)('they_balance2') - PsiElement())(')') - PsiWhiteSpace(' ') + RhoProc1Impl(PROC_1) + RhoConstrNameImpl(CONSTR_NAME) + PsiElement(ID_NAME)('print') + PsiElement(()('(') + RhoProcImpl(PROC) + RhoProc_Impl(PROC_) + RhoProc4Impl(PROC_4) + RhoValueImpl(VALUE) + RhoQuantityImpl(QUANTITY) + RhoQuantity_Impl(QUANTITY_) + RhoQValImpl(Q_VAL) + PsiElement(ID_NAME)('they_balance2') + PsiElement())(')') + PsiWhiteSpace(' ') + PsiElement(})('}') + PsiWhiteSpace('\n ') PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiElement(})('}') - PsiWhiteSpace('\n ') - PsiComment(LINE_COMMENT)('// Once we have a registry, we can do registry_channel!(token) to save the contract there') - PsiWhiteSpace('\n') - PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiElement(})('}') + PsiWhiteSpace('\n ') + PsiComment(LINE_COMMENT)('// Once we have a registry, we can do registry_channel!(token) to save the contract there') + PsiWhiteSpace('\n') + PsiElement(})('}') From 2d4c1976619be0661c4ae0a823fecf9242ecddaf Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Fri, 26 Jan 2018 12:36:34 +0800 Subject: [PATCH 09/10] add documents for how to use test framework --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/README.md b/README.md index 783b229..b2ba6ee 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,21 @@ Any feedback, suggestions, bugs, testing, pull-requests, issues are very welcome - create new Plugin Run configuration with default setup - run/debug in a separate editor +### Test + +Intellij has provide some test frameworks.These framework do simplified verifying work. For more detail you can read [IntelliJ Platform SDK DevGuide +][idea-test-guide] + +#### How to use + +Just as using JUnit, there is a 'run' button on the left of the class or test case. You can click this button to run or debug. But there will be error after you run the test case, reporting that can not find the file. Now, you should config the run configuration, and set the vm option as follows: + +``` +-ea -Xbootclasspath/p:../out/classes/production/boot -XX:+HeapDumpOnOutOfMemoryError -Xmx512m -XX:MaxPermSize=320m -Didea.system.path=../test-system -Didea.home.path=./ -Didea.config.path=../test-config -Didea.test.group=ALL_EXCLUDE_DEFINED +``` + +Then rerun the test case, and you'll find it works. + ### Deployment - generate _jar_ file through the project root context menu [Prepare Plugin Module ... For Deployment][idea-deploy] @@ -76,6 +91,7 @@ Any feedback, suggestions, bugs, testing, pull-requests, issues are very welcome [idea-completion]: https://www.jetbrains.org/intellij/sdk/docs/tutorials/custom_language_support/completion_contributor.html [idea-reference]: https://www.jetbrains.org/intellij/sdk/docs/tutorials/custom_language_support/reference_contributor.html [idea-plugin-actions]: https://www.jetbrains.org/intellij/sdk/docs/basics/action_system.html +[idea-test-guide]: https://www.jetbrains.org/intellij/sdk/docs/tutorials/writing_tests_for_plugins.html [beta-badge]: https://cdn.rawgit.com/tgrospic/rholang-idea/master/docs/beta-0.0.3.svg [license]: https://github.com/tgrospic/rholang-idea/blob/master/LICENSE From dae77174ca852c334b06124c0813b6e28b2e6413 Mon Sep 17 00:00:00 2001 From: AbnerZheng Date: Sat, 27 Jan 2018 15:48:32 +0800 Subject: [PATCH 10/10] format files using EditorConfig plugin --- .../lang/folding/RholangFoldingBuilder.kt | 68 +++++++++---------- test/coop/rchain/RholangTestUtil.kt | 4 +- .../ide/folding/RholangCodeInsightTest.kt | 20 +++--- test/coop/rchain/lang/lexer/RholangLexTest.kt | 18 ++--- .../rchain/lang/parser/RholangParserTest.kt | 12 ++-- 5 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt b/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt index b1abe37..0cfee77 100644 --- a/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt +++ b/src/coop/rchain/lang/folding/RholangFoldingBuilder.kt @@ -20,48 +20,48 @@ import java.util.ArrayList class RholangFoldingBuilder : FoldingBuilder, DumbAware { - override fun buildFoldRegions(node: ASTNode, document: Document): Array { - val descriptors = ArrayList() - appendDescriptors(node.psi, descriptors, document) + override fun buildFoldRegions(node: ASTNode, document: Document): Array { + val descriptors = ArrayList() + appendDescriptors(node.psi, descriptors, document) - return descriptors.toTypedArray() - } + return descriptors.toTypedArray() + } - private fun appendDescriptors(psi: PsiElement, descriptors: MutableList, document: Document) { - if (isSingleLine(psi, document)) { // don't fold when text is single line - return - } + private fun appendDescriptors(psi: PsiElement, descriptors: MutableList, document: Document) { + if (isSingleLine(psi, document)) { // don't fold when text is single line + return + } - val elementType = psi.node.elementType + val elementType = psi.node.elementType - if (elementType === RhoTypes.BLOCK_DOC_COMMENT) { - val blockDocComment = psi.node - val range = TextRange(blockDocComment.textRange.startOffset + 3, blockDocComment.textRange.endOffset - 2) - descriptors.add(FoldingDescriptor(blockDocComment, range)) - } else if (elementType === RhoTypes.PROC_BLOCK) { - val textRange = psi.node.textRange - val textRange1 = TextRange(textRange.startOffset + 1, textRange.endOffset - 1) - descriptors.add(FoldingDescriptor(psi.node, textRange1)) - } + if (elementType === RhoTypes.BLOCK_DOC_COMMENT) { + val blockDocComment = psi.node + val range = TextRange(blockDocComment.textRange.startOffset + 3, blockDocComment.textRange.endOffset - 2) + descriptors.add(FoldingDescriptor(blockDocComment, range)) + } else if (elementType === RhoTypes.PROC_BLOCK) { + val textRange = psi.node.textRange + val textRange1 = TextRange(textRange.startOffset + 1, textRange.endOffset - 1) + descriptors.add(FoldingDescriptor(psi.node, textRange1)) + } - var child: PsiElement? = psi.firstChild - while (child != null) { - appendDescriptors(child, descriptors, document) - child = child.nextSibling - } + var child: PsiElement? = psi.firstChild + while (child != null) { + appendDescriptors(child, descriptors, document) + child = child.nextSibling } + } - private fun isSingleLine(element: PsiElement, document: Document): Boolean { - val textRange = element.textRange - return document.getLineNumber(textRange.startOffset) == document.getLineNumber(textRange.endOffset) - } + private fun isSingleLine(element: PsiElement, document: Document): Boolean { + val textRange = element.textRange + return document.getLineNumber(textRange.startOffset) == document.getLineNumber(textRange.endOffset) + } - override fun getPlaceholderText(node: ASTNode): String? { - return "..." - } + override fun getPlaceholderText(node: ASTNode): String? { + return "..." + } - override fun isCollapsedByDefault(node: ASTNode): Boolean { - return false - } + override fun isCollapsedByDefault(node: ASTNode): Boolean { + return false + } } diff --git a/test/coop/rchain/RholangTestUtil.kt b/test/coop/rchain/RholangTestUtil.kt index a347b5c..61d481a 100644 --- a/test/coop/rchain/RholangTestUtil.kt +++ b/test/coop/rchain/RholangTestUtil.kt @@ -3,6 +3,6 @@ package coop.rchain import com.intellij.openapi.application.PathManager object RholangTestUtil { - val baseTestDataPath: String - get() = PathManager.getHomePath() + "/testData" + val baseTestDataPath: String + get() = PathManager.getHomePath() + "/testData" } diff --git a/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt b/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt index 17e3f6d..95737d9 100644 --- a/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt +++ b/test/coop/rchain/ide/folding/RholangCodeInsightTest.kt @@ -5,16 +5,16 @@ import coop.rchain.RholangTestUtil.baseTestDataPath class RholangCodeInsightTest : LightCodeInsightFixtureTestCase() { - override fun getTestDataPath(): String { - return baseTestDataPath - } + override fun getTestDataPath(): String { + return baseTestDataPath + } - fun testFolding() { - doTestFolding("blockDocComment") - doTestFolding("procedure") - } + fun testFolding() { + doTestFolding("blockDocComment") + doTestFolding("procedure") + } - private fun doTestFolding(testName: String) { - myFixture.testFolding("$testDataPath/ide/folding/$testName.rho") - } + private fun doTestFolding(testName: String) { + myFixture.testFolding("$testDataPath/ide/folding/$testName.rho") + } } diff --git a/test/coop/rchain/lang/lexer/RholangLexTest.kt b/test/coop/rchain/lang/lexer/RholangLexTest.kt index 630c717..e9707f3 100644 --- a/test/coop/rchain/lang/lexer/RholangLexTest.kt +++ b/test/coop/rchain/lang/lexer/RholangLexTest.kt @@ -10,15 +10,15 @@ import java.nio.file.Paths class RholangLexTest : LexerTestCase() { - override fun createLexer(): Lexer { - return RhoLexerAdapter() - } + override fun createLexer(): Lexer { + return RhoLexerAdapter() + } - override fun getDirPath(): String { - return Paths.get(RholangTestUtil.baseTestDataPath, "lexer").toString().substring(PathManager.getHomePath().length) - } + override fun getDirPath(): String { + return Paths.get(RholangTestUtil.baseTestDataPath, "lexer").toString().substring(PathManager.getHomePath().length) + } - fun testToken() { - doFileTest("rho") - } + fun testToken() { + doFileTest("rho") + } } diff --git a/test/coop/rchain/lang/parser/RholangParserTest.kt b/test/coop/rchain/lang/parser/RholangParserTest.kt index dd74922..af82018 100644 --- a/test/coop/rchain/lang/parser/RholangParserTest.kt +++ b/test/coop/rchain/lang/parser/RholangParserTest.kt @@ -7,11 +7,11 @@ import java.nio.file.Paths class RholangParserTest : ParsingTestCase("", "rho", RhoParserDefinition()) { - override fun getTestDataPath(): String { - return Paths.get(RholangTestUtil.baseTestDataPath, "parser").toString() - } + override fun getTestDataPath(): String { + return Paths.get(RholangTestUtil.baseTestDataPath, "parser").toString() + } - fun testtoken() { - doTest(true) - } + fun testtoken() { + doTest(true) + } }