diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/texec/libtnsl.go | 14 | ||||
| -rw-r--r-- | src/tparse/token.go | 2 | ||||
| -rw-r--r-- | src/tparse/tree-list.go | 6 | ||||
| -rw-r--r-- | src/tparse/tree-preproc.go | 8 | ||||
| -rw-r--r-- | src/tparse/tree-statement.go | 5 | ||||
| -rw-r--r-- | src/tparse/tree-value.go | 14 | 
6 files changed, 25 insertions, 24 deletions
| diff --git a/src/texec/libtnsl.go b/src/texec/libtnsl.go index bff8d48..000af7d 100644 --- a/src/texec/libtnsl.go +++ b/src/texec/libtnsl.go @@ -46,6 +46,8 @@ var (  	tFile = TType{Pre: []string{}, T: TArtifact{Path: []string{"tnsl", "io"}, Name: "File"}, Post: []string{}}  	tString = TType{Pre: []string{"{}"}, T: TArtifact{Path: []string{}, Name:"charp"}, Post: []string{}}  	tInt = TType{Pre: []string{}, T: TArtifact{Path: []string{}, Name:"int"}, Post: []string{}} +	tByte = TType{Pre: []string{}, T: TArtifact{Path: []string{}, Name:"uint8"}, Post: []string{}} +	tByteArray = TType{Pre: []string{"{}"}, T: TArtifact{Path: []string{}, Name:"uint8"}, Post: []string{}}  	tFloat = TType{Pre: []string{}, T: TArtifact{Path: []string{}, Name:"float"}, Post: []string{}}  	tCharp = TType{Pre: []string{}, T: TArtifact{Path: []string{}, Name:"charp"}, Post: []string{}}  	tNull = TType{Pre: []string{}, T: TArtifact{Path: []string{}, Name: "null"}, Post: []string{}} @@ -143,10 +145,14 @@ func tfile_read(file TVariable) TVariable {  // tnsl.io.File.write  func tfile_write(file, in TVariable) { -	b := []byte{0} -	if equateType(file.Type, tFile) && (equateType(in.Type, tCharp) || equateType(in.Type, tInt)) { -		b[0] = (in.Data).(byte) -		(file.Data).(*os.File).Write(b) +	if equateType(file.Type, tFile) { +		if equateType(in.Type, tCharp) || equateType(in.Type, tByte) { +			b := []byte{0} +			b[0] = (in.Data).(byte) +			(file.Data).(*os.File).Write(b) +		} else if equateType(in.Type, tByteArray) { +			(file.Data).(*os.File).Write((in.Data).([]byte)) +		}  	} else {  		(file.Data).(*os.File).Close()  		panic(fmt.Sprintf("Failed to write to file, attempted to use unsupported type (%v)\n", in.Type)) diff --git a/src/tparse/token.go b/src/tparse/token.go index b358568..620dab2 100644 --- a/src/tparse/token.go +++ b/src/tparse/token.go @@ -28,8 +28,6 @@ type Token struct {  type Node struct {  	Data Token -    IsBlock  bool -  	Sub  []Node  } diff --git a/src/tparse/tree-list.go b/src/tparse/tree-list.go index d415594..3acc426 100644 --- a/src/tparse/tree-list.go +++ b/src/tparse/tree-list.go @@ -31,7 +31,7 @@ func getClosing(start string) string {  // Parse a list of values  func parseValueList(tokens *[]Token, tok, max int) (Node, int) { -	out := Node{Data: Token{Type: 10, Data: "vlist"}, IsBlock: false} +	out := Node{Data: Token{Type: 10, Data: "vlist"}}  	var tmp Node  	for ; tok < max; { @@ -56,7 +56,7 @@ func parseValueList(tokens *[]Token, tok, max int) (Node, int) {  // Parse list of parameters  func parseParamList(tokens *[]Token, tok, max int) (Node, int) { -	out := Node{Data: Token{Type: 10, Data: "plist"}, IsBlock: false} +	out := Node{Data: Token{Type: 10, Data: "plist"}}  	var tmp Node  	if isTypeThenValue(tokens, tok, max) { @@ -95,7 +95,7 @@ func parseParamList(tokens *[]Token, tok, max int) (Node, int) {  // Parse a list of types  func parseTypeList(tokens *[]Token, tok, max int) (Node, int) { -	out := Node{Data: Token{Type: 10, Data: "tlist"}, IsBlock: false} +	out := Node{Data: Token{Type: 10, Data: "tlist"}}  	var tmp Node  	for ; tok < max; { diff --git a/src/tparse/tree-preproc.go b/src/tparse/tree-preproc.go index 8fec30c..2e56705 100644 --- a/src/tparse/tree-preproc.go +++ b/src/tparse/tree-preproc.go @@ -17,7 +17,7 @@  package tparse  func parsePreBlock (tokens *[]Token, tok, max int) (Node, int) { -	out := Node{IsBlock: true} +	out := Node{}  	out.Data = Token{Type: 11, Data: (*tokens)[tok].Data}  	tok++ @@ -29,7 +29,7 @@ func parsePreBlock (tokens *[]Token, tok, max int) (Node, int) {  			break  		} -		tmp := Node{Data: t, IsBlock: false} +		tmp := Node{Data: t}  		out.Sub = append(out.Sub, tmp)  	} @@ -37,12 +37,12 @@ func parsePreBlock (tokens *[]Token, tok, max int) (Node, int) {  }  func parsePre (tokens *[]Token, tok, max int) (Node, int) { -	out := Node{IsBlock: false} +	out := Node{}  	out.Data = Token{Type: 11, Data: (*tokens)[tok].Data}  	tok++ -	tmp := Node{Data: (*tokens)[tok], IsBlock: false} +	tmp := Node{Data: (*tokens)[tok]}  	out.Sub = append(out.Sub, tmp)  	tok++ diff --git a/src/tparse/tree-statement.go b/src/tparse/tree-statement.go index ec6230c..25ddab6 100644 --- a/src/tparse/tree-statement.go +++ b/src/tparse/tree-statement.go @@ -20,7 +20,6 @@ package tparse  func parseBlock(tokens *[]Token, tok, max int) (Node, int) {  	out, tmp, def, name, sparse := Node{}, Node{}, Node{}, false, false  	out.Data = Token{Type: 10, Data: "block"} -	out.IsBlock = true  	def.Data = Token{Type: 10, Data: "bdef"} @@ -90,7 +89,7 @@ func parseBlock(tokens *[]Token, tok, max int) (Node, int) {  				if (*tokens)[tok+1].Type != DEFWORD && !name {  					errOut("You must provide a name for a module or method.", t)  				} else if !name { -					tmp.Sub = append(tmp.Sub, Node{(*tokens)[tok+1], false, []Node{}}) +					tmp.Sub = append(tmp.Sub, Node{(*tokens)[tok+1], []Node{}})  					tok++  				}  				tmp.Data = t @@ -172,9 +171,7 @@ func parseStatement(tokens *[]Token, tok, max int) (Node, int) {  func keywordStatement(tokens *[]Token, tok, max int) (Node, int) {  	out := Node{}  	out.Data = (*tokens)[tok] -	out.IsBlock = false  	var tmp Node -	tmp.IsBlock = false  	if tok + 1 < max {  		tok++ diff --git a/src/tparse/tree-value.go b/src/tparse/tree-value.go index 330194d..609e9d7 100644 --- a/src/tparse/tree-value.go +++ b/src/tparse/tree-value.go @@ -108,7 +108,7 @@ func parseUnaryOps(tokens *[]Token, tok, max int) (Node) {  				if vnode != &out {  					errOut("Composite values may not use unary operators.", out.Data)  				} -				(*vnode) = Node{Token{10, "comp", 0, 0}, false, []Node{Node{}}} +				(*vnode) = Node{Token{10, "comp", 0, 0}, []Node{Node{}}}  				(*vnode).Sub[0], tok = parseValueList(tokens, tok + 1, max)  				val = true  				comp = true @@ -123,7 +123,7 @@ func parseUnaryOps(tokens *[]Token, tok, max int) (Node) {  			if !prs {  				errOut("Parser bug!  Operator failed to load into AST.", t)  			} else { -				(*vnode) = Node{t, false, []Node{Node{}}} +				(*vnode) = Node{t, []Node{Node{}}}  				vnode = &((*vnode).Sub[0])  			}  		default: @@ -181,7 +181,7 @@ func parseUnaryOps(tokens *[]Token, tok, max int) (Node) {  // Works? Please test.  func parseBinaryOp(tokens *[]Token, tok, max int) (Node) { -	out := Node{IsBlock: false} +	out := Node{}  	first := tok  	var high, highOrder, bincount int = first, 0, 0  	var curl, brak, parn int = 0, 0, 0 @@ -327,12 +327,12 @@ func parseValue(tokens *[]Token, tok, max int) (Node, int) {  // Works? Please test.  func parseTypeParams(tokens *[]Token, tok, max int) (Node, int) { -	out := Node{Data: (*tokens)[tok], IsBlock: false} +	out := Node{Data: (*tokens)[tok]}  	tok++  	for ; tok < max; tok++{  		t := (*tokens)[tok] -		tmp := Node{IsBlock: false} +		tmp := Node{}  		switch t.Type {  		case DELIMIT:  			if tok < max { @@ -368,7 +368,7 @@ func parseTypeParams(tokens *[]Token, tok, max int) (Node, int) {  // TODO: make sure this actually works  func parseType(tokens *[]Token, tok, max int, param bool) (Node, int) { -	out := Node{Data: Token{Type: 10, Data: "type"}, IsBlock: false} +	out := Node{Data: Token{Type: 10, Data: "type"}}  	for ; tok < max; tok++ {  		t := (*tokens)[tok] @@ -392,7 +392,7 @@ func parseType(tokens *[]Token, tok, max int, param bool) (Node, int) {  			out.Sub = append(out.Sub, tmp)  			if param && (*tokens)[tok].Data == "`" { -				tmp = Node{(*tokens)[tok], false, []Node{}} +				tmp = Node{(*tokens)[tok], []Node{}}  				out.Sub = append(out.Sub, tmp)  				tok++  			} |