diff parser.js @ 171:869399ff7faa

Merge
author Mike Pavone <pavone@retrodev.com>
date Tue, 13 Aug 2013 22:01:00 -0700
parents 18598163e3ef 9de2572a34a7
children ab204751d1e7
line wrap: on
line diff
--- a/parser.js	Tue Aug 13 21:58:03 2013 -0700
+++ b/parser.js	Tue Aug 13 22:01:00 2013 -0700
@@ -15,11 +15,15 @@
 	return this.name[0] == ':' ? this.name.substr(1) : this.name;
 }
 
-function intlit(val, bits)
+function intlit(val, bits, unsigned)
 {
 	if (!bits) {
 		bits = 32;
 	}
+	if (unsigned === undefined) {
+		unsigned = false;
+	}
+	this.unsigned = unsigned;
 	this.bits = bits;
 	this.val = val;
 }
@@ -89,8 +93,8 @@
 'symbol = chars:[a-zA-Z_!?@]+ trailing:(":"? [a-zA-Z_!?@0-9])* ! ":" { for (var i = 0; i < trailing.length; i++) { trailing[i] = trailing[i].join(""); } return new symbol(chars.join("") + trailing.join("")); };' +
 'float = digits:[0-9]+ "." decimals:[0-9]+ { return new floatlit(parseFloat(digits.join("") + "." + decimals.join(""))); };' +
 'binary = "0b" digits:[01]+ { return new intlit(parseInt(digits.join(""), 2)); };' +
-'hex = "0x" digits:[0-9a-fA-F]+ size:("i" ("8" / "16" / "32" / "64"))? { var bits = size ? parseInt(size[1], 10) : 0; return new intlit(parseInt(digits.join(""), 16), bits); };' +
-'int = sign:"-"? digits:[0-9]+ size:("i" ("8" / "16" / "32" / "64"))? { var bits = size ? parseInt(size[1], 10) : 0; return new intlit(parseInt(sign + digits.join(""), 10), bits); };' +
+'hex = "0x" digits:[0-9a-fA-F]+ size:([iu] ("8" / "16" / "32" / "64"))? { var bits = size ? parseInt(size[1], 10) : 0; return new intlit(parseInt(digits.join(""), 16), bits, size[0] == "u"); };' +
+'int = sign:"-"? digits:[0-9]+ size:([iu] ("8" / "16" / "32" / "64"))? { var bits = size ? parseInt(size[1], 10) : 0; return new intlit(parseInt(sign + digits.join(""), 10), bits, size[0] == "u"); };' +
 'string = "\\"" text:(strpart/escape)* "\\"" { return new strlit(text.join("")); };' +
 'strpart = text:[^\\"\\\\]+ { return text.join(""); };' +
 'escape = "\\\\" char:[nt\\"r\\\\] { if (char == "n") { return "\\n"; } if (char == "r") { return "\\r"; } return char; };' +