summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2023-03-23 01:30:03 -0400
committerKyle Gunger <kgunger12@gmail.com>2023-03-23 01:30:03 -0400
commita81122df8f081fc6f7cbe338f094bd8da9ba0486 (patch)
tree950b7d44618d7c8f40c23f210502badf90844d6a
parent9066d5215225a32865cb628dad1c69997efffe62 (diff)
Make `self` a valid name in method blocks
-rw-r--r--tnslc/simple.tnsl36
-rw-r--r--tnslc/tnslc.tnsl11
2 files changed, 20 insertions, 27 deletions
diff --git a/tnslc/simple.tnsl b/tnslc/simple.tnsl
index 1d9bd30..6ac7f31 100644
--- a/tnslc/simple.tnsl
+++ b/tnslc/simple.tnsl
@@ -1,32 +1,14 @@
-/; module mod
- uint a = 2, b = 4
- {}uint8 str = "Hello", c = "#"
- {}int arr_i = {2, 3, 4, 5}
-
- struct test {
- int i, j,
- bool k,
- uint8 m
- }
-;/
-
-mod.test tv = {
- 1, 2, false, 0
-}
-
-mod.test sv = {
- 4, 5, true, 6
+struct Test {
+ int i
}
-/; main [int]
- ~uint8 i = ~mod.str{0}
- bool b = i` > i`
- /; loop (i` < 81)
- i` = i` + 2
- /; if (i` == 80)
- i` = i` + 5
- ;/
+/; method Test
+ /; whatever [int]
+ return self.i
;/
- return i`
;/
+
+/; main [int]
+ return 0
+;/ \ No newline at end of file
diff --git a/tnslc/tnslc.tnsl b/tnslc/tnslc.tnsl
index 1054d7b..ecc9e61 100644
--- a/tnslc/tnslc.tnsl
+++ b/tnslc/tnslc.tnsl
@@ -1633,6 +1633,7 @@
/; parse_param_list (~{}Token tok, ~int cur, ~Module current) [{}Variable]
;{}Variable out = {}
+
;int max = find_closing(tok, cur)
;Type t = NO_TYPE
/; loop (cur` = next_non_nl(tok, cur` + 1); cur` < max) [cur` = next_non_nl(tok, cur` + 1)]
@@ -2554,6 +2555,16 @@
;int max = find_closing(tok, cur)
;bool m = false, returned = false
;Type ret = NO_TYPE
+
+ /; if (len (current`.name) > 2)
+ /; if (current`.name{0} == '_' && current`.name{1} == '#')
+ ;{}{}uint8 split = string_split(current`.name, '#')
+ ;Type st = current`.find_type( {split{1}} )`
+ ;st.ptr_chain = {PTYPE.REFERENCE}
+ ;root.vars.append({"self", st, 0, 0})
+ ;/
+ ;/
+
/; loop (cur`++; cur` < max && !m) [cur`++]
/; if (tok`{cur`}.type_is(TOKEN.DEFWORD))
;root.name = tok`{cur`}.data