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);
|
||||
}
|
||||
|
||||
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);
|
||||
codegen.write(' ');
|
||||
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