{
int Token_id = 1;
+
+ public class TokenKeyMap : Object {
+ public Token key;
+ public Gee.ArrayList<Token> vals;
+
+ public TokenKeyMap()
+ {
+ this.key = new Token("","VOID", "VOID");
+ this.vals = new Gee.ArrayList<Token>();
+ }
+
+
+ }
+
public class Token : Object {
- int id;
+ public int id;
public string data;
public string type;
public string outData;
- public string identifier;
+ public Identifier identifier;
// used to stuff tokens together when building a tree..
public Gee.ArrayList<Gee.ArrayList<Token>> items;
+ // for a object definition, key -> array of tokens..
+ public Gee.HashMap<string,TokenKeyMap> props;
// props??? what's this???
this.name = name;
this.line = line;
this.prefix = "";
- this.outData = null; // used by packer/scopeparser
+ this.outData = ""; // used by packer/scopeparser
this.identifier = null; // used by scope
this.id = Token_id++;
this.items = new Gee.ArrayList<Gee.ArrayList<Token>>();
+ this.props = new Gee.HashMap<string,TokenKeyMap>();
}
public string asString()
{
- return "line:%d, type %s, name %s, data : %s , outData: %s".printf(
+ return "line:%d, type %s, data : %s, name %s, , outData: %s".printf(
this.line,
this.type,
- this.name,
this.data,
+ this.name,
this.outData == null ? "" : this.outData
);
}
+ public void dump(string indent)
+ {
+ print("%s%s\n",indent, this.asString());
+ if (this.items.size > 0) {
+
+ for (var i = 0;i < this.items.size; i++) {
+ print("%s --ITEMS[%d] [ \n",indent,i);
+ for (var j = 0;j < this.items[i].size; j++) {
+ this.items[i][j].dump(indent + " ");
+ }
+ }
+ }
+ if (this.props.size > 0) {
+ var m = this.props.map_iterator();
+ while(m.next()) {
+ print("%s --KEY %s :: \n",indent,m.get_key());
+ var vals = m.get_value().vals;
+ for (var i = 0;i < vals.size; i++) {
+
+ vals[i].dump(indent + " ");
+ }
+ }
+
+
+ }
+
+ }
+
+
public string toRaw(int lvl = 0)
{
var ret = this.data ;
foreach(var ai in this.items ) {
-
+ // supposed to iterate properties???
string str = "";
- foreach( var it in ai) {
- str += it.toRaw(lvl+1);
- }
+ //foreach( var it in ai) {
+ // str += it.toRaw(lvl+1);
+ // }
ret += str;
}