aboutsummaryrefslogtreecommitdiff
path: root/make/util.mk
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2015-01-04 15:47:20 -0600
committerJoel Martin <github@martintribe.org>2015-01-09 16:16:56 -0600
commitf4c8a091aaf662b9b544a852a728459e84e5b7f5 (patch)
treeac1df2f7549cbac089678c6b6bd92083dfa63174 /make/util.mk
parent0f352c382c7291b12da7f1800f54b9a27a27ad64 (diff)
downloadmal-f4c8a091aaf662b9b544a852a728459e84e5b7f5.tar.gz
mal-f4c8a091aaf662b9b544a852a728459e84e5b7f5.zip
Make: refactor number type. Support large numbers.
- Can support numbers up to 100 decimal digits in length. - Still no support for negative numbers or floating point. - Change time-secs to time-ms and remove conditional in perf.mal
Diffstat (limited to 'make/util.mk')
-rw-r--r--make/util.mk30
1 files changed, 27 insertions, 3 deletions
diff --git a/make/util.mk b/make/util.mk
index eff258a..ffe635d 100644
--- a/make/util.mk
+++ b/make/util.mk
@@ -62,10 +62,34 @@ _EQ = $(if $(subst x$1,,x$2)$(subst x$2,,x$1),,true)
_NOT = $(if $1,,true)
-# READ: read and parse input
-str_encode = $(strip $(eval __temp := $$(subst $$$$,$(_DOL) ,$$(subst $(SPLICE_UNQUOTE),$(_SUQ) ,$$(subst $$(LPAREN),$$(_LP) ,$$(subst $$(RPAREN),$$(_RP) ,$$(subst $$(LCURLY),$$(_LC) ,$$(subst $$(RCURLY),$$(_RC) ,$$(subst $$(NEWLINE),$$(_NL) ,$$(subst $$(SPACE),$(_SP) ,$$1)))))))))$(foreach a,$(__gmsl_characters),$(eval __temp := $$(subst $$a,$$a$$(SPACE),$(__temp))))$(__temp))
+# take a list of words and join them with a separator
+# params: words, seperator, result
+_join = $(strip \
+ $(if $(strip $(1)),\
+ $(if $(strip $(3)),\
+ $(call _join,$(wordlist 2,$(words $(1)),$(1)),$(2),$(3)$(2)$(word 1,$(1))),\
+ $(call _join,$(wordlist 2,$(words $(1)),$(1)),$(2),$(word 1,$(1)))),\
+ $(3)))
-str_decode = $(subst $(_SP),$(SPACE),$(subst $(_NL),$(NEWLINE),$(subst $(_LC),$(LCURLY),$(subst $(_RC),$(RCURLY),$(subst $(_LP),$(LPAREN),$(subst $(_RP),$(RPAREN),$(subst $(_SUQ),$(SPLICE_UNQUOTE),$(subst $(_DOL),$$,$(strip $(call gmsl_merge,,$(1)))))))))))
+#$(info _join(1 2 3 4): [$(call _join,1 2 3 4)])
+#$(info _join(1 2 3 4,X): [$(call _join,1 2 3 4, )])
+#$(info _join(1): [$(call _join,1)])
+#$(info _join(): [$(call _join,)])
+
+# reverse list of words
+_reverse = $(if $(1),$(call _reverse,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1))
+
+#$(info reverse(1 2 3 4 5): $(call reverse,1 2 3 4 5))
+
+# str_encode: take a string and return an encoded version of it with
+# every character separated by a space and special characters replaced
+# with special Unicode characters
+str_encode = $(strip $(eval __temp := $$(subst $$$$,$(_DOL) ,$$(subst $(SPLICE_UNQUOTE),$(_SUQ) ,$$(subst $$(LPAREN),$$(_LP) ,$$(subst $$(RPAREN),$$(_RP) ,$$(subst $$(LCURLY),$$(_LC) ,$$(subst $$(RCURLY),$$(_RC) ,$$(subst $$(NEWLINE),$$(_NL) ,$$(subst $$(SPACE),$(_SP) ,$$1)))))))))$(foreach a,$(gmsl_characters),$(eval __temp := $$(subst $$a,$$a$$(SPACE),$(__temp))))$(__temp))
+
+# str_decode: take an encoded string an return an unencoded version of
+# it by replacing the special Unicode charactes with the real
+# characters and with all characters joined into a regular string
+str_decode = $(subst $(_SP),$(SPACE),$(subst $(_NL),$(NEWLINE),$(subst $(_LC),$(LCURLY),$(subst $(_RC),$(RCURLY),$(subst $(_LP),$(LPAREN),$(subst $(_RP),$(RPAREN),$(subst $(_SUQ),$(SPLICE_UNQUOTE),$(subst $(_DOL),$$,$(strip $(call _join,$(1)))))))))))
# Read a whole file substituting newlines with $(_NL)
_read_file = $(subst $(_NL),$(NEWLINE),$(shell out=""; while read -r l; do out="$${out}$${l}$(_NL)"; done < $(1); echo "$$out"))