Refactor support for 32 an 64 bit numbers (#45)

This commit is contained in:
Borys Levytskyi
2023-05-08 16:01:57 +03:00
committed by GitHub
parent 6625e475e1
commit dd32a4734f
35 changed files with 730 additions and 403 deletions

View File

@@ -1,7 +1,8 @@
import { ScalarToken, ListOfNumbersExpression, BitwiseOperationExpression, OperatorToken } from '../expression';
import { ExpressionToken, Expression } from '../expression-interfaces';
import { ScalarValue, ListOfNumbersExpression, BitwiseOperationExpression, BitwiseOperator } from '../expression';
import { ExpressionElement, Expression } from '../expression-interfaces';
import calc from '../../core/calc';
import formatter from '../../core/formatter';
import exp from 'constants';
type Config = {
emphasizeBytes: boolean;
@@ -11,9 +12,10 @@ type Config = {
type ExpressionRowModel = {
sign: string;
css: string;
expression: ExpressionToken;
expression: ExpressionElement;
allowFlipBits: boolean;
label: string;
bitSize: number;
}
export default class BitwiseResultViewModel {
@@ -43,17 +45,17 @@ export default class BitwiseResultViewModel {
i = 0, len = expr.children.length,
ex, m = new BitwiseResultViewModel(config);
var prev : ScalarToken | null = null;
var prev : ScalarValue | null = null;
for (;i<len;i++) {
ex = expr.children[i];
if(ex instanceof ScalarToken) {
if(ex instanceof ScalarValue) {
m.addScalarRow(ex);
prev = ex;
continue;
}
var eo = ex as OperatorToken;
var eo = ex as BitwiseOperator;
// If it a single NOT expression
if(eo.isNotExpression) {
@@ -63,11 +65,11 @@ export default class BitwiseResultViewModel {
prev = notResult;
}
else if(eo.isShiftExpression){
prev = eo.evaluate(prev as ScalarToken);
prev = eo.evaluate(prev as ScalarValue);
m.addShiftExpressionResultRow(eo, prev);
} else {
prev = eo.evaluate(prev as ScalarToken);
prev = eo.evaluate(prev as ScalarValue);
m.addOperatorRow(eo);
m.addExpressionResultRow(prev);
}
@@ -77,7 +79,7 @@ export default class BitwiseResultViewModel {
return m;
};
addScalarRow(expr: ScalarToken) {
addScalarRow(expr: ScalarValue) {
const bits = calc.numberOfBitsDisplayed(expr.value);
this.maxNumberOfBits = Math.max(bits, this.maxNumberOfBits);
this.items.push({
@@ -85,14 +87,16 @@ export default class BitwiseResultViewModel {
css: '',
expression: expr,
allowFlipBits: this.allowFlipBits,
label: ''
label: '',
bitSize: expr.bitSize(),
});
};
addOperatorRow(expr: OperatorToken) {
addOperatorRow(expr: BitwiseOperator) {
const resultNumber = expr.isNotExpression ? expr.evaluate() : expr.getUnderlyingScalarOperand();
const bits = calc.numberOfBitsDisplayed(resultNumber.value);
this.maxNumberOfBits = Math.max(bits, this.maxNumberOfBits);
this.items.push({
@@ -100,11 +104,12 @@ export default class BitwiseResultViewModel {
css: '',
label: this.getLabel(resultNumber),
expression: expr.operand,
allowFlipBits: this.allowFlipBits
allowFlipBits: this.allowFlipBits,
bitSize: resultNumber.bitSize()
});
};
addShiftExpressionResultRow(expr : OperatorToken, resultExpr : ScalarToken) {
addShiftExpressionResultRow(expr : BitwiseOperator, resultExpr : ScalarValue) {
const bits = calc.numberOfBitsDisplayed(resultExpr.value);
this.maxNumberOfBits = Math.max(bits, this.maxNumberOfBits);
const child = expr.operand.getUnderlyingScalarOperand();
@@ -113,11 +118,12 @@ export default class BitwiseResultViewModel {
css: 'expression-result',
expression: resultExpr,
allowFlipBits: false,
label: ''
label: '',
bitSize: resultExpr.bitSize()
});
};
addExpressionResultRow(expr : ScalarToken) {
addExpressionResultRow(expr : ScalarValue) {
const bits = calc.numberOfBitsDisplayed(expr.value);
this.maxNumberOfBits = Math.max(bits, this.maxNumberOfBits);
this.items.push({
@@ -126,10 +132,11 @@ export default class BitwiseResultViewModel {
expression: expr,
allowFlipBits: false,
label: '',
bitSize: expr.bitSize()
});
};
getLabel (op: ScalarToken) : string {
getLabel (op: ScalarValue) : string {
return formatter.numberToString(op.value, op.base === 'bin' ? 'dec' : op.base)
}