v0.3.3: is lib word, UTF–8 string support

This commit is contained in:
Luxferre
2026-07-07 08:25:11 +03:00
parent 147089dc23
commit 6ccd7e7350
3 changed files with 16 additions and 1 deletions
+6
View File
@@ -270,6 +270,9 @@ func (c *Clyx) popCallerToken() any {
if err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err); return nil }
return qParsed
}
if s, ok := t.(string); ok {
return normToken(s)
}
return t
}
@@ -284,6 +287,9 @@ func (c *Clyx) cmdDefw() {
if isQForm { val = c.popCallerToken() }
}
if val == nil { val = c.pop() }
if s, ok := val.(string); ok {
val = normToken(s)
}
nameVal := c.pop()
var name string
if s, ok := nameVal.(string); ok {
+8 -1
View File
@@ -103,10 +103,17 @@ class Clyx:
def _cmd_qset(self): i, v, x = self._stack.pop(), self._stack.pop(), self._stack.pop(); (v.pop(int(i)), v.insert(int(i), x)) if isinstance(v, list) else None; self._stack.append(v if isinstance(v, list) else None)
def _exec_loop(self, c, b):
while (self._exec_qform(c), self._stack.pop())[1]: self._exec_qform(b)
_pop_caller_token = lambda self: (lambda t: (t.pop(0) if t[0] != '[' else self._parse_qform((t.pop(0), t)[1])) if t else None)(self._token_streams[-1] if self._token_streams else self._tokens)
def _pop_caller_token(self):
t = self._token_streams[-1] if self._token_streams else self._tokens
if not t: return None
val = t.pop(0)
if val == '[': return self._parse_qform(t)
if isinstance(val, str): return self._norm_token(val)
return val
def _cmd_defw(self):
t = self._token_streams[-1] if self._token_streams else self._tokens
val = self._pop_caller_token() if (t and (t[0] == '[' or isinstance(t[0], list))) else self._stack.pop()
if isinstance(val, str): val = self._norm_token(val)
name = self._stack.pop()
if isinstance(name, str): name = self._norm_token(name)
self._words[name] = val
+2
View File
@@ -226,6 +226,8 @@ my_inline 100 = if [ " :: (inline) PASS" puts cr ] [ " :: (inline) FAIL" puts
":: source_test_word [ 99 ]" "test_source.clx" writef drop source test_source.clx source_test_word 99 = if [ "test_source.clx" delf " source PASS" puts cr ] [ "test_source.clx" delf " source FAIL" puts cr ] # Test source
my_is_word is [ 200 ]
my_is_word 200 =
my_str_word is "abc"
my_str_word "abc" streq and
:: "my_inline_string_word" [ 400 ]
my_inline_string_word 400 = and
if [ " is PASS" puts cr ] [ " is FAIL" puts cr ] # Test is