JavaScript解释器更新(二)

虽说早就添加了bool类型支持,然而bool表达式的解析总是有些问题,今天一天基本是在解决这些琐碎的小bug,解决办法无非是反复断点调试+反复变换的UnitTest。后来发现原来是拼错了一个单词,Add拼成了And,导致token读取位置出错,改了之后完美运行。

今天最蛋疼的还是github,远程提交总是出错,每次都出错,弄了很久的命令行才成功,成功了都不知道是为什么。反正基本上是客户端提交失败就换命令行,命令行失败就换客户端。以前明明很顺的。

js解释器计划继续添加以前忽略的特性,每天都发现有很多to-do list,真是可怕,越写越长。

  • for / for..in
  • do..while
  • Array(DictArray) [] {'1':2,'3':3} 直接创建Array
  • object {} 对象字面量{a:10,b:function(){}}
  • 支持解释多行语句
  • Math
  • proto
  • es6新特性支持
  • String Array Function Library

今天太热了,下午完全写不动代码,晚上发现了一个奇怪的bug,1==1居然返回false,耗费良久时间解决不了,结果总是和真是结果反着来,我被迫将==的回调函数写成了这样:

(s1,s2)=>s1 != s2;

然后居然结果就正确了,我百思不得其解,明明>,<,<=,>=都是正常的,唯独这个==的回调非要反着写才返回true。不知道这是哪根筋搭错了。

(s1,s2)=>s1 == s2;

试验1==1,居然亲眼看见返回了false,我瞎了。。。

被迫反着写了2333333333。昧着良心。

最后发现是要重载==和!=,喵的因为我的JsNumber的value虽然是int类型,然而C#编译器好像不认一样,我服。

public static bool operator ==(JsNumber num1,JsNumber num2)
{
       return Object.Equals(num1.value, num2.value);
}
public static bool operator !=(JsNumber num1, JsNumber num2)
{
       return !Object.Equals(num1.value, num2.value);
}

不过说起来,重载运算符还是在C++里面方便,C#这重载语言看着不合常理。不过C#其他方面太优秀了,瑕不掩瑜。

你可能感兴趣的:(JavaScript解释器更新(二))