Marko v3: Calculate binary expression with literals at compile-time

This commit is contained in:
Patrick Steele-Idem 2016-02-06 18:15:24 -07:00
parent 90317b899f
commit 396c9794f3
9 changed files with 47 additions and 0 deletions

View File

@ -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);

View File

@ -0,0 +1 @@
5

View File

@ -0,0 +1,8 @@
'use strict';
module.exports = function(builder) {
return builder.binaryExpression(
builder.literal(10),
'/',
builder.literal(2));
};

View File

@ -0,0 +1 @@
10

View File

@ -0,0 +1,8 @@
'use strict';
module.exports = function(builder) {
return builder.binaryExpression(
builder.literal(2),
'*',
builder.literal(5));
};

View File

@ -0,0 +1 @@
4

View File

@ -0,0 +1,8 @@
'use strict';
module.exports = function(builder) {
return builder.binaryExpression(
builder.literal(5),
'-',
builder.literal(1));
};

View File

@ -0,0 +1 @@
"ab"

View File

@ -0,0 +1,7 @@
'use strict';
module.exports = function(builder) {
return builder.concat(
builder.literal('a'),
builder.literal('b'));
};