12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import { StoreObject } from '../store/storeObject';
- import * as Commands from './../../ast/commands';
- import { Types } from './../../typeSystem/types';
- import { toInt } from "./../../typeSystem/parsers";
- import { Modes } from '../modes';
- /*
- * substring
- * length
- * uppercase
- * lowercase
- * charAt
- **/
- export function createSubstringFun () {
- const substringFun = (sto, _) => {
- const str = sto.applyStore("str");
- const start = sto.applyStore("start");
- const end = sto.applyStore("end");
- const result = str.value.substring(start.value, end.value);
- const temp = new StoreObject(Types.STRING, result);
- sto.mode = Modes.RETURN;
- return Promise.resolve(sto.updateStore("$", temp));
- };
- const block = new Commands.CommandBlock([], [new Commands.SysCall(substringFun)]);
- const func = new Commands.Function('$substring', Types.STRING,
- [new Commands.FormalParameter(Types.STRING, 'str', false),
- new Commands.FormalParameter(Types.INTEGER, 'start', false),
- new Commands.FormalParameter(Types.INTEGER, 'end', false)],
- block);
- return func;
- }
- export function createLengthFun () {
- const lengthFun = (sto, _) => {
- const str = sto.applyStore("str");
- const temp = new StoreObject(Types.INTEGER, toInt(str.value.length));
- sto.mode = Modes.RETURN;
- return Promise.resolve(sto.updateStore("$", temp));
- }
- const block = new Commands.CommandBlock([], [new Commands.SysCall(lengthFun)]);
- const func = new Commands.Function('$length', Types.INTEGER,
- [new Commands.FormalParameter(Types.STRING, 'str', false)],
- block);
- return func;
- }
- export function createUppercaseFun () {
- const uppercaseFun = (sto, _) => {
- const str = sto.applyStore("str");
- const temp = new StoreObject(Types.STRING, str.value.toUpperCase());
- sto.mode = Modes.RETURN;
- return Promise.resolve(sto.updateStore("$", temp));
- }
- const block = new Commands.CommandBlock([], [new Commands.SysCall(uppercaseFun)]);
- const func = new Commands.Function('$uppercase', Types.STRING,
- [new Commands.FormalParameter(Types.STRING, 'str', false)],
- block);
- return func;
- }
- export function createLowercaseFun () {
- const lowercaseFun = (sto, _) => {
- const str = sto.applyStore("str");
- const temp = new StoreObject(Types.STRING, str.value.toLowerCase());
- sto.mode = Modes.RETURN;
- return Promise.resolve(sto.updateStore("$", temp));
- }
- const block = new Commands.CommandBlock([], [new Commands.SysCall(lowercaseFun)]);
- const func = new Commands.Function('$lowercase', Types.STRING,
- [new Commands.FormalParameter(Types.STRING, 'str', false)],
- block);
- return func;
- }
- export function createrCharAtFun () {
- const charAtFun = (sto, _) => {
- const str = sto.applyStore("str");
- const idx = sto.applyStore("index");
- if (idx.value.toNumber() < 0 || idx.value.toNumber() >= str.value.length) {
- return Promise.reject(new Error("invalid string position"));
- }
- const temp = new StoreObject(Types.STRING, str.value.charAt(idx.value.toNumber()));
- sto.mode = Modes.RETURN;
- return Promise.resolve(sto.updateStore("$", temp));
- }
- const block = new Commands.CommandBlock([], [new Commands.SysCall(charAtFun)]);
- const func = new Commands.Function('$charAt', Types.STRING,
- [new Commands.FormalParameter(Types.STRING, 'str', false),
- new Commands.FormalParameter(Types.INTEGER, 'index', false)],
- block);
- return func;
- }
|