mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Marko v3: Calculate binary expression with literals at compile-time
This commit is contained in:
parent
90317b899f
commit
396c9794f3
@ -34,6 +34,18 @@ class BinaryExpression extends Node {
|
|||||||
throw new Error('Invalid BinaryExpression: ' + this);
|
throw new Error('Invalid BinaryExpression: ' + this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (left.type === 'Literal' && right.type === 'Literal') {
|
||||||
|
if (operator === '+') {
|
||||||
|
return codegen.generateCode(codegen.builder.literal(left.value + right.value));
|
||||||
|
} else if (operator === '-') {
|
||||||
|
return codegen.generateCode(codegen.builder.literal(left.value - right.value));
|
||||||
|
} else if (operator === '*') {
|
||||||
|
return codegen.generateCode(codegen.builder.literal(left.value * right.value));
|
||||||
|
} else if (operator === '/') {
|
||||||
|
return codegen.generateCode(codegen.builder.literal(left.value / right.value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
generateCodeForOperand(left, codegen);
|
generateCodeForOperand(left, codegen);
|
||||||
codegen.write(' ');
|
codegen.write(' ');
|
||||||
codegen.generateCode(operator);
|
codegen.generateCode(operator);
|
||||||
|
|||||||
1
test/fixtures/codegen/autotest/binaryExpression-literal-divide/expected.js
vendored
Normal file
1
test/fixtures/codegen/autotest/binaryExpression-literal-divide/expected.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
5
|
||||||
8
test/fixtures/codegen/autotest/binaryExpression-literal-divide/index.js
vendored
Normal file
8
test/fixtures/codegen/autotest/binaryExpression-literal-divide/index.js
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = function(builder) {
|
||||||
|
return builder.binaryExpression(
|
||||||
|
builder.literal(10),
|
||||||
|
'/',
|
||||||
|
builder.literal(2));
|
||||||
|
};
|
||||||
1
test/fixtures/codegen/autotest/binaryExpression-literal-multiply/expected.js
vendored
Normal file
1
test/fixtures/codegen/autotest/binaryExpression-literal-multiply/expected.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
10
|
||||||
8
test/fixtures/codegen/autotest/binaryExpression-literal-multiply/index.js
vendored
Normal file
8
test/fixtures/codegen/autotest/binaryExpression-literal-multiply/index.js
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = function(builder) {
|
||||||
|
return builder.binaryExpression(
|
||||||
|
builder.literal(2),
|
||||||
|
'*',
|
||||||
|
builder.literal(5));
|
||||||
|
};
|
||||||
1
test/fixtures/codegen/autotest/binaryExpression-literal-subtract/expected.js
vendored
Normal file
1
test/fixtures/codegen/autotest/binaryExpression-literal-subtract/expected.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
4
|
||||||
8
test/fixtures/codegen/autotest/binaryExpression-literal-subtract/index.js
vendored
Normal file
8
test/fixtures/codegen/autotest/binaryExpression-literal-subtract/index.js
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = function(builder) {
|
||||||
|
return builder.binaryExpression(
|
||||||
|
builder.literal(5),
|
||||||
|
'-',
|
||||||
|
builder.literal(1));
|
||||||
|
};
|
||||||
1
test/fixtures/codegen/autotest/concat-strings/expected.js
vendored
Normal file
1
test/fixtures/codegen/autotest/concat-strings/expected.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
"ab"
|
||||||
7
test/fixtures/codegen/autotest/concat-strings/index.js
vendored
Normal file
7
test/fixtures/codegen/autotest/concat-strings/index.js
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = function(builder) {
|
||||||
|
return builder.concat(
|
||||||
|
builder.literal('a'),
|
||||||
|
builder.literal('b'));
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user