updated code
This commit is contained in:
parent
a8ea8fbf94
commit
7d01a94d56
@ -124,7 +124,70 @@ func (p *process_t) pop_context() (node *Cnode_t) {
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
stmt
|
||||
|
||||
text text bracket
|
||||
stmt: text text
|
||||
stmt: text TEXT
|
||||
*/
|
||||
func (interp *Interp) eval_atom_node(node *Cnode_t) (*string, error) {
|
||||
var (
|
||||
p process_t
|
||||
v *string
|
||||
inode *Cnode_t
|
||||
err error
|
||||
)
|
||||
|
||||
p.interp = interp
|
||||
|
||||
for node != nil {
|
||||
p.push_context(node)
|
||||
p.push_string_value("") // placeholder for return value
|
||||
|
||||
for inode = node.child; inode != nil; inode = inode.next {
|
||||
switch inode.code {
|
||||
case CNODE_BRACKET:
|
||||
//p.push_context(inode)
|
||||
//p.push_string_value("")
|
||||
//node =
|
||||
|
||||
case CNODE_TEXT:
|
||||
|
||||
//fmt.Printf("XXXXXXXXXXXXXXXXXXXx[%s]\n", string(inode.token))
|
||||
err = p.push_string_value(string(inode.token))
|
||||
if err != nil {
|
||||
goto oops
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("CALLING\n")
|
||||
err = p.call()
|
||||
if err != nil {
|
||||
goto oops
|
||||
}
|
||||
if p.ctx.parent_ctx != nil {
|
||||
p.pop_context()
|
||||
}
|
||||
|
||||
node = node.next
|
||||
}
|
||||
|
||||
v = (*string)(p.pop_value())
|
||||
p.pop_context()
|
||||
if p.ctx != nil {
|
||||
err = fmt.Errorf("internal error - dangling process context")
|
||||
goto oops
|
||||
}
|
||||
|
||||
return v, nil
|
||||
|
||||
oops:
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func (interp *Interp) eval_atom_node_old(node *Cnode_t) (*string, error) {
|
||||
|
||||
var (
|
||||
p process_t
|
||||
@ -186,11 +249,6 @@ func (interp *Interp) eval_atom_node(node *Cnode_t) (*string, error) {
|
||||
goto oops
|
||||
}
|
||||
|
||||
case CNODE_SEP:
|
||||
// skip
|
||||
case CNODE_EOL:
|
||||
// skip
|
||||
|
||||
default:
|
||||
err = fmt.Errorf("internal error - non-atom node - %d", node.code)
|
||||
goto oops
|
||||
|
@ -392,7 +392,7 @@ func (inter *Interp) add_cnode_to_feed_struct(feed *feed_struct_t, cnode *Cnode_
|
||||
}
|
||||
|
||||
var feed_to_cnode_code_tab [11]cnode_code_t = [11]cnode_code_t{
|
||||
FEED_TOP: CNODE_EOL, // this must never be used
|
||||
FEED_TOP: CNODE_INVALID, // this must never be used
|
||||
FEED_INIT: CNODE_INIT,
|
||||
FEED_BRACKET: CNODE_BRACKET,
|
||||
FEED_BRACE: CNODE_BRACE,
|
||||
@ -400,9 +400,9 @@ var feed_to_cnode_code_tab [11]cnode_code_t = [11]cnode_code_t{
|
||||
FEED_DQUOTE: CNODE_DQUOTE,
|
||||
FEED_DQUOTED_TEXT: CNODE_TEXT,
|
||||
FEED_DOLLAR: CNODE_VAR,
|
||||
FEED_SEP: CNODE_SEP,
|
||||
FEED_SEP: CNODE_INVALID,
|
||||
FEED_WORD: CNODE_TEXT,
|
||||
FEED_EOL: CNODE_EOL,
|
||||
FEED_EOL: CNODE_INVALID,
|
||||
}
|
||||
|
||||
func (interp *Interp) pop_feed_struct() *feed_struct_t {
|
||||
@ -445,6 +445,9 @@ func (interp *Interp) pop_feed_struct() *feed_struct_t {
|
||||
parent.cnode_cont = false
|
||||
} else {
|
||||
cnode = &Cnode_t{code: feed_to_cnode_code_tab[feed.state], token: feed.token}
|
||||
if cnode.code == CNODE_INVALID {
|
||||
panic("internal error - CNODE INVALID encountered")
|
||||
}
|
||||
if cnode.code == CNODE_BRACKET || cnode.code == CNODE_BRACE || cnode.code == CNODE_INIT {
|
||||
// popping a container feed struct
|
||||
interp.finalize_feed_struct(feed, true)
|
||||
@ -452,15 +455,7 @@ func (interp *Interp) pop_feed_struct() *feed_struct_t {
|
||||
} else if cnode.code == CNODE_DQUOTE {
|
||||
interp.finalize_feed_struct(feed, false)
|
||||
cnode.child = feed.cnode_first
|
||||
} /*else if cnode.code == CNODE_VAR {
|
||||
fmt.Printf(">>>>\n")
|
||||
interp.dump_cnodes(parent.cnode_first, true)
|
||||
fmt.Printf(">>>>\n")
|
||||
interp.dump_cnodes(parent.cnode_tmp_first, true)
|
||||
fmt.Printf(">>>>\n")
|
||||
interp.dump_cnodes(cnode, true)
|
||||
|
||||
}*/
|
||||
}
|
||||
|
||||
// add the current cnode to the parent feed struct
|
||||
interp.add_cnode_to_feed_struct(parent, cnode)
|
||||
|
@ -54,14 +54,13 @@ type call_frame_t struct {
|
||||
type cnode_code_t int
|
||||
|
||||
const (
|
||||
CNODE_INIT cnode_code_t = iota
|
||||
CNODE_INVALID cnode_code_t = iota
|
||||
CNODE_INIT
|
||||
CNODE_BRACKET
|
||||
CNODE_BRACE
|
||||
CNODE_DQUOTE
|
||||
CNODE_VAR
|
||||
CNODE_TEXT
|
||||
CNODE_SEP
|
||||
CNODE_EOL
|
||||
CNODE_STMT
|
||||
CNODE_JOIN // merge the two top elements off the stack
|
||||
)
|
||||
@ -329,12 +328,6 @@ func (interp *Interp) __dump_cnodes(node *Cnode_t, nl bool, tabs int) {
|
||||
// contained inside other containers, some escaping is required
|
||||
fmt.Printf("%s", string(node.token))
|
||||
|
||||
case CNODE_SEP:
|
||||
fmt.Printf(" ")
|
||||
|
||||
case CNODE_EOL:
|
||||
fmt.Printf("\n")
|
||||
|
||||
case CNODE_JOIN:
|
||||
// do nothing
|
||||
//fmt.Printf("<M>")
|
||||
|
Loading…
Reference in New Issue
Block a user