};
function as_atom_node() {
- var tok = S.token, ret;
+ var ret, tok = S.token, value = tok.value;
switch (tok.type) {
case "num":
- ret = new AST_Number({ start: tok, end: tok, value: tok.value });
+ if (isFinite(value)) {
+ ret = new AST_Number({ value: value });
+ } else {
+ ret = new AST_Infinity();
+ if (value < 0) ret = new AST_UnaryPrefix({ operator: "-", expression: ret });
+ }
break;
case "bigint":
- ret = new AST_BigInt({ start: tok, end: tok, value: tok.value });
+ ret = new AST_BigInt({ value: value });
break;
case "string":
- ret = new AST_String({
- start : tok,
- end : tok,
- value : tok.value,
- quote : tok.quote
- });
+ ret = new AST_String({ value : value, quote : tok.quote });
break;
case "regexp":
- ret = new AST_RegExp({ start: tok, end: tok, value: tok.value });
+ ret = new AST_RegExp({ value: value });
break;
case "atom":
- switch (tok.value) {
+ switch (value) {
case "false":
- ret = new AST_False({ start: tok, end: tok });
+ ret = new AST_False();
break;
case "true":
- ret = new AST_True({ start: tok, end: tok });
+ ret = new AST_True();
break;
case "null":
- ret = new AST_Null({ start: tok, end: tok });
+ ret = new AST_Null();
break;
+ default:
+ unexpected();
}
break;
+ default:
+ unexpected();
}
next();
+ ret.start = ret.end = tok;
return ret;
}