mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-14 05:14:28 -08:00
unary minus
This commit is contained in:
@@ -902,6 +902,8 @@ const do_eval_frame_expr = (node, scope, callsleft) => {
|
|||||||
value = !expr.result.value
|
value = !expr.result.value
|
||||||
} else if(node.operator == 'typeof') {
|
} else if(node.operator == 'typeof') {
|
||||||
value = typeof(expr.result.value)
|
value = typeof(expr.result.value)
|
||||||
|
} else if(node.operator == '-') {
|
||||||
|
value = - expr.result.value
|
||||||
} else {
|
} else {
|
||||||
throw new Error('unknown op')
|
throw new Error('unknown op')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ const tokenize_js = (str) => {
|
|||||||
.join('|')},
|
.join('|')},
|
||||||
{name: 'keyword' , re: reserved.map(r => '\\b' + r + '\\b').join('|')},
|
{name: 'keyword' , re: reserved.map(r => '\\b' + r + '\\b').join('|')},
|
||||||
// TODO all possible notatins for js numbers
|
// TODO all possible notatins for js numbers
|
||||||
{name: 'number' , re: '-?\\d*\\.?\\d+'},
|
{name: 'number' , re: '\\d*\\.?\\d+'},
|
||||||
{name: 'identifier' , re: '[A-Za-z_$][A-Za-z0-9_$]*'},
|
{name: 'identifier' , re: '[A-Za-z_$][A-Za-z0-9_$]*'},
|
||||||
|
|
||||||
{name: 'punctuation' ,
|
{name: 'punctuation' ,
|
||||||
@@ -1012,13 +1012,13 @@ const primary = if_fail(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// operator precedence https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
|
// operator precedence https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
|
||||||
// TODO unary minus
|
|
||||||
// TODO instanceof
|
// TODO instanceof
|
||||||
const expr =
|
const expr =
|
||||||
[
|
[
|
||||||
grouping,
|
grouping,
|
||||||
function_call_or_member_access,
|
function_call_or_member_access,
|
||||||
unary('!'),
|
unary('!'),
|
||||||
|
unary('-'),
|
||||||
unary('typeof'),
|
unary('typeof'),
|
||||||
binary(['**']),
|
binary(['**']),
|
||||||
binary(['*','/','%']),
|
binary(['*','/','%']),
|
||||||
|
|||||||
@@ -573,9 +573,10 @@ export const tests = [
|
|||||||
assert_code_evals_to('typeof 1', 'number')
|
assert_code_evals_to('typeof 1', 'number')
|
||||||
}),
|
}),
|
||||||
|
|
||||||
test('eval_frame unary minus', () => {
|
test_only('eval_frame unary minus', () => {
|
||||||
// TODO
|
assert_code_evals_to(`-(1)`, -1)
|
||||||
//assert_code_evals_to(`-(1)`, -1)
|
assert_code_evals_to(`-1`, -1)
|
||||||
|
assert_code_evals_to(`-(-1)`, 1)
|
||||||
}),
|
}),
|
||||||
|
|
||||||
test('eval_frame binary', () => {
|
test('eval_frame binary', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user