diff options
author | TinWoodman92 <chrhodgden@gmail.com> | 2023-06-27 21:16:59 -0500 |
---|---|---|
committer | TinWoodman92 <chrhodgden@gmail.com> | 2023-06-27 21:16:59 -0500 |
commit | c38e93fb37510ac091e7862834ba2a0da1c0ab3b (patch) | |
tree | 74605df04cbb52fe54b2d02a1a0a1dffd3df1a4f | |
parent | 53b02ea030d0f8593a007b51e6a5c9c4c2e84e0c (diff) |
added evaluate_expression methods
-rw-r--r-- | dialoguer/__init__.py | 17 | ||||
-rw-r--r-- | dialoguer/context_script.r | 26 |
2 files changed, 32 insertions, 11 deletions
diff --git a/dialoguer/__init__.py b/dialoguer/__init__.py index 367e14b..476cde0 100644 --- a/dialoguer/__init__.py +++ b/dialoguer/__init__.py @@ -102,8 +102,8 @@ class Dialogue: self.send(len(args)) recv_chk = self.recv(set_data_type=bool) #send number of keyword arguments - # self.send(len(kwargs)) - # recv_chk = self.recv(set_data_type=bool) + self.send(len(kwargs)) + recv_chk = self.recv(set_data_type=bool) #send method name self.send(method_name) recv_chk = self.recv(set_data_type=bool) @@ -112,14 +112,11 @@ class Dialogue: self.send(arg, True) recv_chk = self.recv(set_data_type=bool) #send keyword arguments - for kwarg in kwargs: - #k = key(kwarg) - #self.send(k) - #recv_chk = self.recv(set_data_type=bool) - #v = val(kwarg) - #self.send(v, True) - #recv_chk = self.recv(set_data_type=bool) - pass + for kw in kwargs: + self.send(kw) + recv_chk = self.recv(set_data_type=bool) + self.send(kwargs[kw], True) + recv_chk = self.recv(set_data_type=bool) result = self.recv(True) return result diff --git a/dialoguer/context_script.r b/dialoguer/context_script.r index 8629f2a..712727c 100644 --- a/dialoguer/context_script.r +++ b/dialoguer/context_script.r @@ -11,6 +11,8 @@ data_type_vect <- c( str = 'character', integer = 'integer', int = 'integer', + double = 'double', + float = 'double', logical = 'logical', bool = 'logical' ) @@ -44,6 +46,9 @@ bin_conv <- function(data, data_type_name = NA) { } else if (is.logical(data) && is.na(data_type_name)) { conv_data <- as.raw(data) conv_data <- rawToBits(conv_data) + } else if (is.double(data) && is.na(data_type_name)) { + conv_data <- as.raw(data) + conv_data <- rawToBits(conv_data) # convert from binary } else if (is.raw(data) && data_type_name == "character") { conv_data <- add_missing_bits(data) @@ -57,6 +62,10 @@ bin_conv <- function(data, data_type_name = NA) { conv_data <- add_missing_bits(data) conv_data <- packBits(conv_data, "raw") conv_data <- as.logical(conv_data) + } else if (is.raw(data) && data_type_name == "double") { + conv_data <- add_missing_bits(data) + conv_data <- packBits(conv_data, "raw") + conv_data <- as.double(conv_data) } return(conv_data) } @@ -122,9 +131,11 @@ import_variable <- function() { send(con, var_val, TRUE) } -evaluate_expression <- function () { +evaluate_expression <- function() { arg_count <- recv(con, FALSE, "integer") send(con, TRUE) + kwarg_count <- recv(con, FALSE, "integer") + send(con, TRUE) method_name <- recv(con, FALSE, "character") send(con, TRUE) args <- list() @@ -134,6 +145,19 @@ evaluate_expression <- function () { send(con, TRUE) } } + kwargs <- list() + if (kwarg_count > 0) { + keys <- c() + vals <- list() + for (i in 1:kwarg_count) { + keys <- c(keys, recv(con)) + send(con, TRUE) + vals <- c(vals, recv(con, TRUE)) + send(con, TRUE) + } + kwargs <- setNames(vals, keys) + } + args <- c(args, kwargs) result <- do.call(method_name, args) send(con, result, TRUE) } |