mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 13:04:30 -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
|
||||
} else if(node.operator == 'typeof') {
|
||||
value = typeof(expr.result.value)
|
||||
} else if(node.operator == '-') {
|
||||
value = - expr.result.value
|
||||
} else {
|
||||
throw new Error('unknown op')
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ const tokenize_js = (str) => {
|
||||
.join('|')},
|
||||
{name: 'keyword' , re: reserved.map(r => '\\b' + r + '\\b').join('|')},
|
||||
// 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: 'punctuation' ,
|
||||
@@ -1012,13 +1012,13 @@ const primary = if_fail(
|
||||
)
|
||||
|
||||
// operator precedence https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
|
||||
// TODO unary minus
|
||||
// TODO instanceof
|
||||
const expr =
|
||||
[
|
||||
grouping,
|
||||
function_call_or_member_access,
|
||||
unary('!'),
|
||||
unary('-'),
|
||||
unary('typeof'),
|
||||
binary(['**']),
|
||||
binary(['*','/','%']),
|
||||
|
||||
@@ -573,9 +573,10 @@ export const tests = [
|
||||
assert_code_evals_to('typeof 1', 'number')
|
||||
}),
|
||||
|
||||
test('eval_frame unary minus', () => {
|
||||
// TODO
|
||||
//assert_code_evals_to(`-(1)`, -1)
|
||||
test_only('eval_frame unary minus', () => {
|
||||
assert_code_evals_to(`-(1)`, -1)
|
||||
assert_code_evals_to(`-1`, -1)
|
||||
assert_code_evals_to(`-(-1)`, 1)
|
||||
}),
|
||||
|
||||
test('eval_frame binary', () => {
|
||||
|
||||
Reference in New Issue
Block a user