aboutsummaryrefslogtreecommitdiff
path: root/dialoguer
diff options
context:
space:
mode:
authorTinWoodman92 <chrhodgden@gmail.com>2023-06-27 21:16:59 -0500
committerTinWoodman92 <chrhodgden@gmail.com>2023-06-27 21:16:59 -0500
commitc38e93fb37510ac091e7862834ba2a0da1c0ab3b (patch)
tree74605df04cbb52fe54b2d02a1a0a1dffd3df1a4f /dialoguer
parent53b02ea030d0f8593a007b51e6a5c9c4c2e84e0c (diff)
added evaluate_expression methods
Diffstat (limited to 'dialoguer')
-rw-r--r--dialoguer/__init__.py17
-rw-r--r--dialoguer/context_script.r26
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)
}