more fixed for v0.3.6
This commit is contained in:
+10
-4
@@ -268,7 +268,11 @@ func (c *Clyx) popCallerToken() any {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if stream == nil {
|
if stream == nil {
|
||||||
stream = &c.tokens
|
if len(c.tokenStreams) == 0 {
|
||||||
|
stream = &c.tokens
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if len(*stream) == 0 { return nil }
|
if len(*stream) == 0 { return nil }
|
||||||
t := (*stream)[0]
|
t := (*stream)[0]
|
||||||
@@ -292,15 +296,17 @@ func (c *Clyx) cmdDefw() {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if stream == nil {
|
if stream == nil && len(c.tokenStreams) == 0 {
|
||||||
stream = &c.tokens
|
stream = &c.tokens
|
||||||
}
|
}
|
||||||
var val any
|
var val any
|
||||||
if len(*stream) > 0 {
|
if stream != nil && len(*stream) > 0 {
|
||||||
t0 := (*stream)[0]
|
t0 := (*stream)[0]
|
||||||
isQForm := false
|
isQForm := false
|
||||||
if s, ok := t0.(string); ok && s == "[" { isQForm = true } else if _, ok := t0.([]any); ok { isQForm = true }
|
if s, ok := t0.(string); ok && s == "[" { isQForm = true } else if _, ok := t0.([]any); ok { isQForm = true }
|
||||||
if isQForm { val = c.popCallerToken() }
|
if isQForm {
|
||||||
|
val = c.popCallerToken()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if val == nil { val = c.pop() }
|
if val == nil { val = c.pop() }
|
||||||
if s, ok := val.(string); ok {
|
if s, ok := val.(string); ok {
|
||||||
|
|||||||
@@ -108,7 +108,10 @@ class Clyx:
|
|||||||
t = stream
|
t = stream
|
||||||
break
|
break
|
||||||
if t is None:
|
if t is None:
|
||||||
t = self._tokens
|
if not self._token_streams:
|
||||||
|
t = self._tokens
|
||||||
|
else:
|
||||||
|
return None
|
||||||
if not t: return None
|
if not t: return None
|
||||||
val = t.pop(0)
|
val = t.pop(0)
|
||||||
if val == '[': return self._parse_qform(t)
|
if val == '[': return self._parse_qform(t)
|
||||||
@@ -120,7 +123,7 @@ class Clyx:
|
|||||||
if stream:
|
if stream:
|
||||||
t = stream
|
t = stream
|
||||||
break
|
break
|
||||||
if t is None:
|
if t is None and not self._token_streams:
|
||||||
t = self._tokens
|
t = self._tokens
|
||||||
val = self._pop_caller_token() if (t and (t[0] == '[' or isinstance(t[0], list))) else self._stack.pop()
|
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)
|
if isinstance(val, str): val = self._norm_token(val)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ _start [
|
|||||||
0 if [ " if false FAIL" ] [ " if false PASS" ] puts cr # Test if false
|
0 if [ " if false FAIL" ] [ " if false PASS" ] puts cr # Test if false
|
||||||
10 20 [ 5 - ] dip [] cons cons [ 5 20 ] streq if [ " dip PASS" puts cr ] [ " dip FAIL" puts cr ] # Test dip
|
10 20 [ 5 - ] dip [] cons cons [ 5 20 ] streq if [ " dip PASS" puts cr ] [ " dip FAIL" puts cr ] # Test dip
|
||||||
5 dup while [ 1 - dup ] 0 = if [ " while loop PASS" puts cr ] [ " while loop FAIL" puts cr ] # Test while
|
5 dup while [ 1 - dup ] 0 = if [ " while loop PASS" puts cr ] [ " while loop FAIL" puts cr ] # Test while
|
||||||
|
:: test_while_word [ 5 dup while [ 1 - dup ] ] test_while_word 0 = if [ " while in word PASS" puts cr ] [ " while in word FAIL" puts cr ] # Test while in word
|
||||||
0 [ + ] [ 1 2 3 ] qfor 6 = 0 [ + ] [] qfor 0 = and if [ " qfor PASS" puts cr ] [ " qfor FAIL" puts cr ] # Test qfor
|
0 [ + ] [ 1 2 3 ] qfor 6 = 0 [ + ] [] qfor 0 = and if [ " qfor PASS" puts cr ] [ " qfor FAIL" puts cr ] # Test qfor
|
||||||
0 for [ 1 4 range ] [ + ] 6 = 0 for [ [] ] [ + ] 0 = and if [ " for PASS" puts cr ] [ " for FAIL" puts cr ] # Test for
|
0 for [ 1 4 range ] [ + ] 6 = 0 for [ [] ] [ + ] 0 = and if [ " for PASS" puts cr ] [ " for FAIL" puts cr ] # Test for
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user